Utiliser votre Raspberry Pi comme borne Airplay

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.

Ma chaine Hi-Fi Cambridge

  • un Raspberry PI model B (mais cela doit marcher sans problème avec un modèle A)

Raspberry PI B 512

  • un iPhone 4

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édant billet. Comme ma chaîne Hifi est loin de mon réseau Ethernet filaire, j'ai utilisé un dongle USB Wifi (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:

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

Shairport, le coeur 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 5 commandes:

Pour tester Shairport, il suffit de lancer:

Si, comme moi, vous avez l'erreur suivante qui s'affiche:

Alors, il faudra en plus saisir une sixième commande pour finaliser l'installation:

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:

Il ne reste plus qu'à lancer le démon:

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:

Airplay Spotify photo

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:

capture_064

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

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:

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:

 

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

Quelques liens en bonus:

  • Pingback: Utiliser votre Raspberry Pi comme borne Airplay - Le blog de NicoLargo | Raspberry Pi | Scoop.it

  • G-rom

    Je ne connais pas Airplay, est ce que c’est comme MPD avec streaming ou plus comme de l’UPnP ?

  • Fabien Engels

    Par curiosité, as tu comparé les ressources CPU utilisé en utilisant le Wifi et l’ethernet ? Je me demande quelle est le % du CPU utilisé par le chiffrement du Wifi :) Merci pour l’article, reste à acheter un DAC …

    • http://www.nicolargo.com nicolargo

      Je viens de faire le test et effectivement la consommation passe de 10% à plus de 60% :(. Raison de plus pour tirer un câble entre son Raspberry et le switch Ethernet le plus proche (c’est madame qui va râler #nowaf)…

      Merci de m’avoir mis sur la piste. Je viens de mettre à jour le billet pour noter cette contrainte.

    • http://blog.nicolargo.com/ Nicolas Hennion

      Je viens de faire le test et effectivement la consommation passe de 10% à plus de 60% :(. Raison de plus pour tirer un câble entre son Raspberry et le switch Ethernet le plus proche (c’est madame qui va râler #nowaf)…

      Merci de m’avoir mis sur la piste. Je viens de mettre à jour le billet pour noter cette contrainte.

  • http://twitter.com/Ozzmos Christophe Bastin

    Sinon pour infos, XBMC prends en charge les flux Airplay. J’utilise actuellement mon raspberry PI avec RaspBMC et je stream depuis mon iPhone musiques, photos et vidéos.

  • Pingback: Raspberry | Pearltrees

  • Soulou

    J’ai personnellement réussi à diffuser de la musique sous Linux, mais seulement avec mpd dans une version précise qui est plus est patché (Le patch raop a été retiré de master : http://bugs.musicpd.org/view.php?id=3357) Vraiment rien d’agréable à mettre en place, mais ça fonctionne bien. (Guide ici : http://forum.ubuntu-fr.org/viewtopic.php?pid=7733421#p7733421)

  • jbd

    Je n’arrive pas non plus à utiliser un GNU/Linux comme source avec pulseaudio-raop, c’est frustrant. Ça rend la chose inutile si on ne possède pas du matériel Apple, ce qui est terriblement frustrant.

    Le problème semble venir du fait que pulseaudio ne fonctionne pas avec shairport parce que ce dernier ne support que RAOP au dessus d’UDP (comme tous les iMachins), alors que pulseaudio utilise TCP pour RAOP. Il faut donc implémenter le support d’UDP pour RAOP dans pulseaudio. Je n’ai pas vu beaucoup d’activité de ce côté malheureusement. Peut-être testé du côté de http://git.zx2c4.com/pulseaudio-raop2/, mais pas beaucoup d’activité… Une autre solution pourrait être d’utiliser TCP dans shairport, peut-être plus simple que de patcher pulseaudio ?

  • buddla

    Pour le wifi, j’ai exactement le même problème et la seule solution que j’ai trouvé à ce jour (et pourtant j’ai cherché …) c’est le script de surveillance du réseau avec un ping et un ifup –force wlan0 en cas de problème. Sur ce que j’ai pu en lire sur les forums Raspberry, ce problème est apparu dans une mise à jour de Wheezy l’année dernière.

  • Pingback: Utiliser votre Raspberry Pi comme borne Airplay | Libre de faire, Faire Libre | Scoop.it

  • loïc moriamé

    Peut-être prochainement une alternative open-source à Airplay : http://www.magicplay.com/

    Partenariat entre Qualcomm et DoubleTwist :
    “Built using Qualcomm’s AllJoyn framework, doubleTwist’s MagicPlay [...]

    doubleTwist Player for Android will be the first application to
    integrate MagicPlay in spring 2013. MagicPlay source code will also be
    released to third-party developers to embed into their media apps,
    giving consumers the ability to stream their music to any MagicPlay
    connected device.”

  • http://postblue.info/ PostBlue

    Pour faire du stream sans peine, j’ai eu plusieurs configurations qui se sont suivies :
    * DAAP, qui fonctionne très bien, qui est intégré à Rhythmbox par exemple, et qui roule sur Avahi,
    * Rygel, qui fonctionne très bien avec un contrôleur UPnP ou DLNA,
    * et le must, MPD, configuré de telle sorte qu’il y a sur mon réseau domestique une médiathèque agrégée sur tous les postes, et qui dispose d’une foule de clients pour y accéder depuis n’importe lequel de ses postes.

  • G. Love

    C’est sympa. Mais avec la sortie jack, ça lague !!! Heureusement je n’ai pas acheté le matos suite à cet article :’/

  • Grégoire Pineau

    J’avais fait quelque chose de similaire. J’arrivais a broadcasté depuis ubuntu vers le raspberry. Il y a plein de tuto sur le net. Par contre, le son était vraiment d’une très mauvaise qualité :(

  • geronimo

    salut, j’ai nerveusement envie d’appuyer sur la touche “valider” de ma
    commande du Creative Sound Blaster X-Fi 5.1 Pro cependant en regardant
    sur le net je ne le voit pas compatible avec le raspberry. Quelqu’un à
    un retour?

    merci

    • geronimo

      j’ai acheté le DAC Creative, après pas mal de galère j’ai trouvé la solution ici:

      http://audioplastic.org/blog/2013/01/10/AP1/

      maintenant que du bonheur!

      • CaMS

        salut Geronimo,

        ma question risque de paraitre bête mais est ce que tu as pu connecter des enceintes 5.1 et avoir un son 5.1 grâce à ce DAC ? merci

        CaMs

        • geronimo

          Salut CaMS,
          oui j’ai bien du 5.1. Deux solutions, passer par un ampli qui gère le 5.1 (mon cas) ou directement depuis le dac sur lequel tu peux brancher tes enceintes, sub et autres “rear” (solution que j’ai pas testé)

          • CaMS

            merci pour ta réponse, je pense que je vais me laisser tenter ! je n’ai pas d’ampli et vu le prix de ces petites betes je n’ai pas prévu d’investir !

          • geronimo

            je l’ai acheté sur http://www.son-video.com/ si tu veux voir la bête sous toutes les coutures ;)

  • Pingback: Utiliser votre Raspberry Pi comme borne Airplay...

  • Pingback: airplay | Pearltrees

  • Sylvain Pré

    Salut Nico, j’aurai aimé savoir comment tu as connecté ton DAC magic? en USB 1 ou 2? si tu as réussi en usb 2 est-ce que le flux des fichiers audio en 24bits/192Khz est bien transmis au DAC magic?
    Merci

  • Julien Jakubowski

    Merci ! Ca marche nickel, depuis que j’utilise cette version de shairport, sur la branche 1.0-dev : https://github.com/abrasive/shairport/tree/1.0-dev

  • Apo_fr

    Merci pour ce tutorial. J’ai pu écouter de la musique avec mon DAC branché en USB sur le RPI.

    Par contre, quand je lancais la commande “aplay -l”, mon DAC apparaissait en second (card 1). J’ai donc modifié la ligne “options snd-usb-audio index=-2″ par “options snd-usb-audio index=0″ pour que le DAC soit bien en card 0. J’espère que c’est une solution pas trop moche :)

    Bon par contre le son est pas génial, ça craquouille régulierement dans le casque, dommage, et pourtant le CPU du RPi ne dépasse jamais les 50%…

  • Julien

    Ben j’ai fait ton tuto a partir d’ubuntu, aucun souci fonctionne parfaitement! merci beaucoup! ;)

  • Jordan

    Bonjour,

    Ton article est super. Est ce que celà marcherait pour lire des vidéos? En reliant le raspberry à un retroprojecteur par exemple.
    En effet, je voudrais pouvoir partager l’écran de mon téléphone android sur un rétroprojecteur relié en filaire a mon raspberry. J’ai vu que l’application android Streambels airplaiy permettait de diffuser le contenu multimedia du téléphone vers un support compatible airplay ou DLNA.
    Transformer le raspberry en borne airplay , et en le reliant a un rétroprojecteur pourrait il permettre la partage d’écran de mon android?

    merci,

    Jordan

  • n1n1

    Bonjour,
    j’ai suivis le tutoriel, mais le “Shairport” n’est accessible qu’une seule fois. En effet, lorsque je lance une musique, aucun problème. Mais suite à cela plus moyen d’accéder à “Shairport” que ce soit du même appareil ou d’un autre. J’ai l’impression que le service se coupe suite à la connexion d’un appareil.

    Quelqu’un aurait une idée pour résoudre ce problème ?