Utiliser votre Raspberry Pi comme borne Airplay

Nicolargo

Dans cet article 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…

Commentez

- Titre : Utiliser votre Raspberry Pi comme borne Airplay

- Auteur : Nicolargo

- Parution : 3 octobre 2013

- Mise à jour : 14 janvier 2020

- Licence : Le contenu de cet article est rédigé par Nicolas Hennion et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Voir également :

- Raspberry Pi - DÃ©ballage et installation

- Test de la camÃ©ra Raspberry Pi 5M - Streaming

- Utiliser votre Raspberry Pi comme borne Airplay

- Test d'OpenElec sur Raspberry Pi

Sommaire

- Introduction

- I. Ma configuration de test

- II. Configuration système du Raspberry Pi

- III. Shairport, le cœur de la borne Airplay

- IV. Premier test : bien, mais peut mieux faire

- V. Raspberry + USB + DAC = Bonheur

- VI. Conclusion

- VII. Remerciements Developpez

Introduction

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 Wi-Fi et Google qui planchait sur une alternative à Airplay ne semble pas très pressé de la sortir.

I - 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) ;

- un iPhone 4.

II - Configuration système du Raspberry Pi

J'ai utilisé le système d'exploitation Raspbian « Wheezy » dont j'ai déjà détaillé l'installation dans un précédent billet. Comme ma chaîne hifi est loin de mon réseau Ethernet filaire, j'ai utilisé un dongle USB Wi-Fi (attention la liste des dongles supportés est ici) que j'ai connecté au Raspberry et configuré en suivant ce tutoriel.

Ma configuration réseau est la suivante pour le fichier /etc/network/interfaces :

auto lo

iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

et celle-ci pour le fichier /etc/wpa_supplicant/wpa_supplicant.conf :

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="MONWi-Fi"
scan_ssid=1
key_mgmt=WPA-PSK
proto=WPA
psk="MACLEWi-Fi"
}

III - Shairport, le cœur de la borne Airplay

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 cinq 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 :

sudo cp ./shairport.init.sample /etc/init.d/shairport
sudo chmod a+x /etc/init.d/shairport

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

IV - Premier test : bien, mais peut mieux faire

Arrivé à 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 1 Mbps :

Par contre cette consommation grimpe à plus de 60 % si vous utilisez un dongle Wi-Fi. 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.

V - 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é.

Pour forcer le Raspberry à utiliser le DAC (sortie USB) comme carte son, il faut éditer le fichier /etc/modprobe.d/alsa-base.conf en commentant une première ligne et en ajoutant une deuxième :

#options snd-usb-audio index=-2
options snd-usb-audio nrpacks=1

Après un dernier redémarrage, votre borne Airplay est enfin prête !

Mise à jour du 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 :

pi@raspberrypi $ aplay -l

**** List of PLAYBACK Hardware Devices ****
card 0: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7

VI - Conclusion

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 Wi-Fi sur ma Freebox. Si vous avez des idées, je suis preneur.

Quelques liens en bonus :

- si vous êtes sous Windows (sors de ce corps), il existe des « clients » Airplay ;

- sous Android, il y a des applications pour transformer votre téléphone/tablette en source Airplay ;

- sous GNU/Linux, j'ai essayé, sans succès pas mal de solutions (PulseAudio, GStreamer…). Si vous avez une solution, je suis (encore) preneur !

VII - Remerciements Developpez

L'équipe Systèmes Embarqués tient à remercier nicolargo pour la rédaction de ce tutoriel.

Nos remerciements à LittleWhite pour sa relecture attentive.

N'hésitez pas à faire part de vos remarques et commentaires à propos de cet article sur le forum ! Commentez