Pas trop le temps de bloguer en ce moment entre le boulot, le développement de la prochaine version de Glances et… la préparation de la conf de présentation du Raspberry Pi que j’ai faite jeudi dernier dans le cadre des SophiaConf 2013.
Voici donc le support de présentation que j’ai utilisé et qui est bien sûr ré-utilisable comme tout ce que je publie sur ce site (licence CC BY 3.0).
Après une rapide présentation de la Raspberry Camera 5M (voir ce précédant billet), entrons dans le vif du sujet avec une utilisation pratique: le streaming « live » du flux vidéo vers une autre machine de votre réseau. Les applications peuvent aller d’un « baby video phone » à un « interphone vidéo » pour votre maison en passant par toutes les autres choses qui vous passent par la tête !
Actuellement, la camera dispose d’un logiciel spécifique Raspivid (dont les sources sont disponibles sur Github), pour capturer et encoder en H.264 la vidéo dans un fichier ou bien sur le flux standard de sortie (stdout). C’est cette dernière particularité que nous allons exploiter afin de rediriger le flux vidéo vers une pipeline GStreamer qui va s’occuper du streaming vers notre machine cible (celle ou l’on souhaite voir la vidéo).
Installation des composants GStreamer
On commence par installer GStreamer sur notre Raspberry PI. Pour cela on saisi la commande suivante:
Détaillons un peu cette ligne de commande. La première partie est dédiée à Raspvid et s’occupe de l’encodage H.264. Les paramètres sont très importants pour avoir une qualité vidéo conforme à vos besoins. Ainsi, dans mon exemple, je n’y suis pas allé avec le dos de la cuillère car j’ai opté pour une résolution HD 720p (-w 1280 -h 720) à 25 images par seconde (-fps 25) pendant un temps infini (-t -1).
Pour le streaming, le paramètre de débit (bitrate, -b 2500000) est primordial car il va fixer le débit sortant de la vidéo (à 2.5 Mbps dans mon exemple).
Ce débit est à adapté selon votre résolution. Après quelques tests, voici une table indicative des débits à utiliser:
SD Low: -w 480 -h 260 -fps 25 -b 800000
SD Medium: -w 640 -h 360 -fps 25 -b 1200000
SD High: -w 960 -h 540 -fps 25 -b 1800000
HD Ready: -w 1280 -h 720 -fps 25 -b 2500000
Full HD: -w 1920 -h 1080 -fps 25 -b 5000000
Note: attention au dimensionnement de votre réseau si vous utilisez des débits élevés, en effet même avec des bornes Wifi ressentes, il est difficile de garder un débit constant de 5 Mbps (Full HD).
Note 2: sur le Raspberry, je conseille d’utiliser l’interface Ethernet et pas un dongle Wifi, surtout avec des résolutions importantes.
La commande passe ensuite la main à GStreamer qui va encapsuler le flux H.264 dans un conteneur RTP puis créer le serveur TCP en écoute des clients (il faudra penser à remplacer l’adresse IP par celle de votre Raspberry Pi).
Lecture de la vidéo depuis une autre machine
J’ai fait le test depuis mon portable Ubuntu 13.04 en saisissant la ligne de commande suivante pour récupérer et afficher la vidéo:
La qualité de la vidéo est très bonne, fluide. On note quelques retard quand on sollicite le réseau en parallèle mais cela semble normal vu les débits utilisés.
Ce qui est très impressionnant au niveau du Raspberry, c’est la faible consommation CPU. En effet, Raspivid ne dépasse pas les 2% (merci le GPU) et GStreamer les 25%. On peut sans aucun problème laisser tourner le tout sans risque de surchauffe.
Conclusion
J’espère que cette rapide introduction sur le streaming vidéo depuis le Raspberry vous a donné des idées que vous aller vous empresser de nous faire partager dans les commentaires ci-dessous !
Retrouvez mes articles sur l’écosystème Raspberry Pi en cliquant ici.
C’est en lisant un article sur le blog de Korben que j’ai découvert qu’il était possible de transformer une distribution GNU/Linux en une borne audio Spotify, pilotable à distance. L’objectif étant d’avoir un petit boîtier (type Raspberry Pi ou équivalent) branché directement à sa chaîne Hifi et de pouvoir naviguer à distance sur sa bibliothèque Spotify.
La configuration que j’ai mis en place est la suivante:
DAC Audio Cambridge (connecté au Raspberry Pi via l’interface USB) > C’est bien sûr optionnel et vous pouvez brancher directement votre amplificateur audio ou vos enceintes auto-alimentées sur le Raspberry
Un abonnement Spotify Premium et/ou des fichiers audios accessible depuis votre Raspberry
Mise en place du système
Je ne vais pas faire un copier/coller de mon billet d’installation de Raspbian Wheezy sur un Raspberry Pi, il suffit de suivre ce lien.
Etape optionnelle, uniquement si vous avez un DAC ou une carte son USB branché à votre Raspberry:
Comme j’utilise un DAC afin de remplacer la médiocre sortie analogique du Raspberry, il faut effectuer une petite configuration complémentaire pour forcer le Raspberry à utiliser le DAC (sortie USB) comme carte son. Il suffit d’éditer le fichier /etc/modprobe.d/alsa-base.conf en commentant une première ligne et en ajoutant une deuxième:
Après un dernier redémarrage, votre Raspberry Pi est prêt à recevoir l’installation de Mopidy.
Installation de Mopidy, le serveur Spotify
Mopidy est un serveur Audio compatible avec les clients uPnP et MDP et permet donc de jouer des musiques stockés localement ou de streamer des musiques disponibles sur le service Spotify (c’est sur ce dernier point que nous allons nous focaliser dans ce billet).
On commence par installer le dépôt officiel de Mopidy puis le logiciel:
$ mopidy
INFO Starting Mopidy 0.13.0
INFO Platform: Linux-3.6.11+-armv6l-with-debian-7.0
INFO Python: CPython 2.7.3
INFO Creating dir /home/pi/.config/mopidy
INFO Creating dir /home/pi/.local/share/mopidy
INFO Creating file /home/pi/.config/mopidy/settings.py
WARNING Could not open tag cache: [Errno 2] No such file or directory: u'/home/pi/.local/share/mopidy/tag_cache'
INFO Loading tracks from /home/pi/None using /home/pi/.local/share/mopidy/tag_cache
INFO Loading playlists from /home/pi/.local/share/mopidy/playlists
INFO Audio output set to "autoaudiosink"
INFO Audio mixer set to "alsamixer" using track "PCM"
ERROR Setting "SPOTIFY_USERNAME" is empty.
ImportError: could not import gtk.gdk
Cela va permettre à Mopidy de créer l’arborescence ~/.config/mopidy qui va contenir les fichiers de configuration.
On doit éditer le fichier ~/.config/mopidy/settings.py avec les paramètres:
du serveur MDP qui va permettre de contrôler à distance Mopidy
du répertoire local (ou distant sur un NAS) ou sont stockés vos fichiers audios
du compte Spotify Premium (obligatoire)
du compte LastFM (optionnel, uniquement pour le scrobbling)
$ mopidy
INFO Starting Mopidy 0.13.0
INFO Platform: Linux-3.6.11+-armv6l-with-debian-7.0
INFO Python: CPython 2.7.3
WARNING Could not open tag cache: [Errno 2] No such file or directory: u'/home/pi/.local/share/mopidy/tag_cache'
INFO Loading tracks from /home/pi/.config/mopidy/None using /home/pi/.local/share/mopidy/tag_cache
INFO Loading playlists from /home/pi/.local/share/mopidy/playlists
INFO Audio output set to "autoaudiosink"
INFO Audio mixer set to "alsamixer" using track "PCM"
INFO Mopidy uses SPOTIFY(R) CORE
INFO MPD server running at [0.0.0.0]:6600
INFO Connected to Spotify
ImportError: could not import gtk.gdk
ERROR MPRIS frontend setup failed (org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11)
INFO Connected to Last.fm
INFO Loaded 57 Spotify playlist(s)
Vous pouvez ignore les erreurs, les lignes importantes étant:
INFO MPD server running at [0.0.0.0]:6600
INFO Connected to Spotify
INFO Connected to Last.fm
INFO Loaded 57 Spotify playlist(s)
Piloter à distance votre borne Mopidy
Pour piloter votre tout nouveau serveur Mopidy, il suffit d’installer un client compatible avec le protocole implémenté dans MPD. Personnellement, j’utilise GMPC sur mon PC Ubuntu mais d’autres solutions existes:
Sous GNU/Linux: En ligne de commande Ncmpcpp (bon corage pour retenir le nom mais il marche à merveille) ou en GUI avec GMPC
Encore une utilisation sympa d’un Raspberry dans le monde de la Hifi. J’ai encore quelques problèmes de son (gros tics quand je passe d’un morceau à l’autre) mais dans l’ensemble c’est une solution bien pratique pour écouter sa bibliothèque musicale sur sa chaîne !
Pour fêter la mise en ligne de ma nouvelle page dédiée au Raspberry, Kubii, revendeur officiel de Pi en France et sponsor du blog de Nicolargo, nous propose un code promo de 5€ pour 100€ d’achat sur son site:
Airplay est une technologie, mise en avant par Apple et par un nombre croissant d’acteurs du monde de la Hifi, permettant de déporter les flux audio, photo et vidéo d’un device (PC/Mac, tablette, téléphone) sur des périphériques externes (Ampli, Enceintes…). Basée sur un protocole propriétaire (heureusement cassé par reverse ingenering), il n’a malheureusement en face de lui aucune alternative stable et libre: Miracast est uniquement dédié aux devices Wifi et Google qui planchait sur une alternative à Airplay ne semble pas très pressé de la sortir.
Dans ce billet nous allons voir comment transformer un Raspberry Pi (23€ chez votre épicier) en une borne Airplay connectée à votre chaîne Hifi (ou encore mieux en passant par un DAC) afin de disposer d’une chaîne de streaming de bonne qualité entre vos « idevices » (iPhone, iPad, Mac OS mais aussi Android) et vos enceintes.
Dans le jargon Airplay, nous allons donc transformer un Raspberry Pi en « Airplay receiver ». Shazam…
Ma configuration de test
Ce billet a été validé sur la configuration suivante:
une chaîne Hifi Cambridge composée d’un DAC, d’un amplificateur et d’une paire d’enceintes.
un Raspberry PI model B (mais cela doit marcher sans problème avec un modèle A)
Shairport est une implémentation libre d’un serveur RAOP qui est lui même à la base des Airport Express d’Apple. Il n’implémente, pour l’instant, que la version 1.0 d’Airplay (prise en charge des flux audio mais pas de vidéo ni de photo).
L’installation se fait en 5 commandes:
sudo aptitude install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils
git clone https://github.com/albertz/shairport.git shairport
cd shairport
make
sudo make install
Pour tester Shairport, il suffit de lancer:
/shairport.pl -a ShairPort
Si, comme moi, vous avez l’erreur suivante qui s’affiche:
Can't locate Net/SDP.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at ./shairport.pl line 48.
BEGIN failed--compilation aborted at ./shairport.pl line 48.
Alors, il faudra en plus saisir une sixième commande pour finaliser l’installation:
sudo cpan install Net::SDP
Pour automatiser le lancement de ShairPort au démarrage de votre Raspberry Pi:
Note: il est possible d’éditer le « nom » de votre borne Airplay en modifiant l’option -a dans le script:
DAEMON_ARGS="-w $PIDFILE -a ShairPort"
Il ne reste plus qu’à lancer le démon:
sudo update-rc.d shairport defaults
sudo service shairport start
Premier test: bien mais peut mieux faire
Arrivez à ce stade (bravo si vous êtes encore là), vous devriez pouvoir détecter votre borne Airplay ShairPlay à partir de votre iPhone:
Configuration de l’iPhone pour utiliser la borne Airplay (Spotify à gauche et iTunes à droite)
En branchant votre casque | chaîne sur la sortie analogique (prise jack) du Raspberry, vous allez entendre le son émis par votre iPhone.
Avec un <pub> Glances </pub> lancé sur le Raspberry, on peut constater, avec une liaison réseau filaire la faible consommation CPU en utilisation et un débit de streaming audio de 1Mbps:
Par contre cette consommation grimpe à plus de 60% si vous utilisez un dongle Wifi. En effet, le protocole WPA implique un déchiffrement des données non négligeable pour le Raspberry.
Si fonctionnellement on est arrivés à notre objectif, ce n’est pas cas pour la qualité audio. En effet, la sortie analogique est incompatible avec une écoute Hifi.
Raspberry + USB + DAC = Bonheur
Heureusement pour moi et pour mes oreilles, mon DAC (Cambridge Audio DacMagic) dispose d’une entrée USB. Si ce n’est pas votre cas, il existe pas mal de solutions plus ou moins chères sur le marché.
Après un dernier redémarrage, votre borne Airplay est enfin prête !
Update (28/04/2013): Pour vérifier que tout est configuré comme attendu, le plus simple est d’utiliser la commande aplay -l qui va afficher la liste des cartes sons de votre Raspberry Pi. On doit retrouver la « carte audio USB en premier » puis la classique carte intégrée bcm2835 en second:
Ma configuration fonctionne maintenant sans problème depuis quelques jours. Je suis justement en train d’écouter ma Playlist Spotify 2013 en rédigeant ce billet.
Seul problème rencontré: il faut que je redémarre mon Raspberry quand je désactive et réactive le Wifi sur ma Freebox. Si vous avez des idées, je suis preneur.
Certains buzz démarrent avec pas grand chose, d’autre sont issus de vraies bonnes idées. Le Raspberry Pi B 512 est de cette catégorie là. Proposer une carte mère pour moins de 30€ avec un CPU ARM à 700 Mhz, un GPU bi-core pour un affichage « full HD » et 512 Mo de RAM. J’ai donc décidé d’acheter le modèle Raspberry PI B 512 avec un jolie boitier transparent. Ce kit est en vente chez Kubii au prix de 50€ (au passage je tiens à signaler le très bon service client de Kubii. Service rapide et personnalisé. C’est suffisamment rare pour le signaler).
Passons au vis du sujet avec le déballage et l’installation de la bête.
Pour quoi faire ?
L’avantage d’un prix aussi bas est de pouvoir se lancer dans son achat sans avoir vraiment d’idée précise d’utilisation en tête. Après quelques jours, voici une liste de choses que l’on peut ou ne peut pas faire avec un Raspberry.
Le Raspberry Pi B 512 est parfaitement adapté pour:
Lire des fichiers audio et vidéo en haute définition (en utilisant OMXplayer le player spécifique du Raspberry Pi)
auto-héberger son site personnel (avec les limites d’usages au niveau du débit de la liaison montante de votre ligne Internet) avec une configuration basée sur LightHTTPd ou sur Nginx
héberger son serveur VPN pour accèder à son réseau personnel depuis l’exterieur
superviser votre réseau (jusqu’à une centaine de machines avec 10 services/machine sans aucun problème) avec une installation de Shinken et de Munin
développer des applications de domotique (quelques exemples ici, là et encore là)
… pleins d’autres idées qui peuvent vous passer par la tête (en voir 50 chez l’ami Korben)
Il peut être utilisé occasionnellement pour:
surfer sur Internet (mais il est vrai que l’on est habitué à un affichage rapide des pages, ce que l’on obtient pas avec le Raspberry Pi)
lire ces mails et faire un peu de bureautique simpliste
Passez votre chemin si vous voulez:
remplacer votre PC fixe ou mobile par un Raspberry Pi B 512…
Déballage
Commençons par la fin en montrant le résultat: mon Raspberry PI B 512 en action avec un écran, un clavier et une souris.
Regardons de plus prêt le coeur du système:
Installation
Choisir son système d’exploitation
Le Raspberry Pi est compatible avec les systèmes d’exploitations GNU/Linux. Certaines distributions se sont spécialisées pour ce matériel spécifique. La liste des systèmes d’exploitations compatibles se trouve sur cette page du site officiel. Mon choix c’est porté vers la Raspbian « Wheezy » qui est une distribution dérivée de Debian que je manipule tous les jours. Il existe également une autre distribution basée sur Arch Linux qui offre des performances équivalentes (voir l’article de P3ter sur le sujet).
Le système d’exploitation doit être stocké sur une carte SD à insérer dans le lecteur du Raspberry PI. Pour mettre le système Raspbian sur la carte SD j’ai utilisé mon PC portable sous Ubuntu 12.10 qui dispose d’un lecteur intégré de carte SD. La procédure suivante est donc à adapter selon votre matériel.
On commence donc par télécharger l’image de la dernière version de Raspbian puis de vérifier avec le logiciel sha1sum que l’archive est complète.
La valeur barbare donnée par la commande sha1sum est à comparer avec celle de référence disponible sur la page de téléchargement. Si elles différent alors il ne vous reste plus qu’à recommencer le téléchargement.
On peut ensuite décompresser le fichier pour obtenir l’image disque (2013-02-09-wheezy-raspbian.img dans mon cas):
Graver son système sur la carte SD (source: eLinux)
On commence par insérer la carte dans son lecteur (celui de mon PC portable dans mon cas), puis on utilise la commande df -h pour obtenir le point de montage (/dev/sdb1 dans mon cas) correspondant à la carte SD. Attention de bien utiliser le point de montage pour éviter de formater votre disque système !!!:
Une fois le point de montage identifié, il faut saisir les commande suivante (en remplaçant /dev/sdb1 par votre point de montage):
Quelques explications sur cette dernière commande:
elle doit être lancée avec les droits root (d’ou l’utilisation de sudo)
if donne l’emplacement de l’image de Raspbian « Wheezy »
of donne le point de montage racine (égal à votre point de montage sans le nombre finale soir /dev/sdb dans mon cas)
l’exécution va prendre un peu de temps…
Très bien, votre carte contenant l’OS Raspbian « Wheezy » est prête à être utilisée !
Insérer votre carte dans le lecteur SD du Raspberry PI, brancher un clavier et l’alimentation micro USB et c’est parti !
Configuration initiale du système
Au premier démarrage, vous allez avoir droit au lancement automatique de l’utilitaire de configuration « raspi-config » qu’il est possible de rappeler par la suite en saisissant la commande suivante dans un terminal:
sudo raspi-config
Raspi-config se présente sous la forme suivante:
Les différentes fonctions permettent de:
expand_rootfs: étendre la partition principale à la taille maximale de la carte SD (par exemple si vous avez une carte SD de 16 Go et que vous n’utilisez pas cette fonction, alors vous resterez avec une partition principale de 2 Go)
overscan: force l’affichage de marge pour s’adapter à des écrans 16/9 ou supérieur.
configurer: le clavier (configure_keyboard), le mot de passe par défaut (raspberry) de l’utilisateur par défaut (pi) (change_pass) , votre lieu géographique (change_locale) et le temps (change_timezone)
overclocking: comme Raspberry est une société intelligente, elle autorise l’overclocking de son matériel sans perte de la garantie (mais avec une durée de votre matériel qui risque de diminuer). Fonction à activer si vous voulez utilisez le Raspberry en mode graphique (comme client léger) ou tout autre besoin consommateur de CPU. On a le choix d’overcloking suivant:
memory-split: pour définir la quantité de mémoire vive dédiée au GPU (64 Mo par défaut).
ssh: permet de définir si le serveur SSH doit être lancé par défaut.
boot_behavor: choisir si on veut démarrer le boitier en mode texte (utilisation serveur) ou graphique (client léger avec l’environnement OpenBox + LXDE).
update: qui est en fait un raccourci vers la commande « apt-get update && apt-get upgrade » et ainsi mettre à jour votre système (qui doit être connecté à Internet).
Premières impressions
Comme lors de mon test du Linutop 4, la première impression quand on utilise le Raspberry Pi avec son interface graphique LXDE, est un retour en arrière de quelques années ou il fallait attendre quelques secondes avant l’affichage des fenêtres. La lecture vidéo HD est par contre bleufante (voir le paragraphe en de billet), on voit que le GPU est parfaitement exploité.
Une fois dans un terminal, la machine réagi bien. Dans un très appréciable silence total, on utilise un système GNU/Linux minimaliste mais réactif.
Quelques tests
CPU, GPU et RAM
Sur ces aspects là, rien de notable, on est dans la norme avec ce type de matériel. Si vous voulez des chiffres pour comparer avec d’autres machines, je vous conseille la lecture de cette page Wiki chez eLinux.
Interface réseau
L’interface Ethernet est à la norme FastEthernet (soit un débit théorique maximum de 100 Mbps). Comme le Raspberry Pi n’a pas une capacité de stockage importante, cette vitesse pourra être pénalisante lors de l’accès à vos données stockées sur un NAS ou une autre machine.
Un rapide test avec Iperf montre un débit maximum en TCP de 90 Mbps en entrée et 65 Mbps en sortie. On a donc de bonnes performances pour une interface FastEthernet, en espérant une évolution en Giga pour la prochaine version de Raspberry Pi.
Multimédia
Là ou le Raspberry Pi est bluffant c’est sur les lectures audio et vidéo. En effet, avec les efforts pour adapter XBMC sur ce matériel on dispose de logiciel permettant sans aucun problème de lire des vidéos H.264 full HD.
Si vous ne souhaitez pas passer par XBMC, vous pouvez utiliser OMXPlayer de la manière suivante:
omxplayer -o hdmi <nondufichiervideo>
Il est même possible, pour certains besoins spécifiques d’acheter, pour des sommes assez modiques, des licences pour des codecs MPEG-2 ou VC-1.
Il lui manque quoi ?
Personnellement, je serais assez intéressé par une version luxe (à 60€ max faut pas déconner non plus) intégrant les choses suivantes:
une interface Gigabit Ethernet, pour avoir un connectivité haut débit vers mon NAS
une sortie audio numérique pour connecter le Raspberry Pi à mon DAC (iPhone + Airplay + Shairport + Raspberry Pi + DAC + Ampli = Bonheur)
une troisième interface USB, car les deux premières sont occupées par mon clavier et ma souris et je ne sais pas ou mettre ma clés USB 🙂
Conclusion
Nous voici arrivé au bout de ce premier article sur le Raspberry Pi, d’autres viendront vites, plus spécialisés. Je dois avoué avoir été agréablement surpris pas les capacités et le potentiel de cette petite machine. Le futur est là, devant nos yeux.
Et vous ? Avez vous craqués ? Si oui pour quelle utilisation ?
Retrouvez mes articles sur l’écosystème Raspberry Pi en cliquant ici.