# Intégration externe Airplay

**URL:** <https://community.gladysassistant.com/t/integration-externe-airplay/11451>\
**Category:** Développement\
**Tags:** integration-externe\
**Created:** [Octobre 29, 2026, 9:11 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451 "2026-10-29T21:11:15Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![GBoulvin](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/gboulvin/32/10006_2.png) [@GBoulvin](https://community.gladysassistant.com/u/GBoulvin)\
**Post date:** [Octobre 29, 2026, 9:11 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451/1 "2026-10-29T21:11:15Z")

</div>

> [@broom Gladys allège son cœur : l'avenir des intégrations natives](https://community.gladysassistant.com/t/gladys-allege-son-coeur-lavenir-des-integrations-natives/11440/11):
>
> la nouvelle lib maintenue est [`@sonn-audio/node-airplay`](https://www.npmjs.com/package/@sonn-audio/node-airplay). Ça vaudrait peut être le coup d’utiliser celle là, qu’en penses tu ?

J’ai posé ta question à Claude et la réponse est mitigée :

"_Oui, je pense qu’il faut passer à `@sonn-audio/node-airplay`. Mais en l’examinant, j’ai trouvé un problème plus important que le choix de la bibliothèque : il touche les HomePod quelle que soit la bibliothèque utilisée._

_ **Pourquoi changer** _

- _ **Maintenance :** `@lox-audioserver/node-airplay-sender` est archivée, alors que la nouvelle a été publiée fin août et que la 0.1.2 date du 22 septembre._
- _ **Licence :** la nouvelle est sous Apache-2.0, comme le template, et n’a aucune dépendance. L’intégration pourrait donc quitter l’AGPL que je lui avais imposée à cause de l’ancienne._
- _ **Qualité :** l’auteur dit l’avoir testée sur un HomePod (OS 27) et un BeoLab 50. Elle gère vraiment AirPlay 2, en choisissant automatiquement la méthode de synchronisation que l’enceinte accepte (PTP ou NTP). Elle gère aussi l’échange d’authentification de certains vieux récepteurs AirPlay 1 qui refusent la connexion sans lui._
- _ **Un argument fort :** son README indique que les HomePod et Apple TV récents (OS 27) acceptent une session AirPlay 1 mais restent muets. L’ancienne bibliothèque ne faisait qu’un AirPlay 2 « best-effort ». Sur un HomePod récent, l’intégration actuelle risque donc de ne produire aucun son._

_ **Ce que ça coûte** _

- _La bibliothèque est jeune (0.1.x, un seul auteur)._
- _Son interface est bas niveau : connexion, synchronisation, paquets audio. Il faudrait réécrire la logique de lecture, soit environ 250 lignes dans `src/player.js`Cette session n’est pas en cours d’exécution, ses fichiers ne peuvent donc pas être ouverts. Envoyez un message pour la relancer.._
- _Ce fichier est isolé du reste : la découverte, les scènes, le widget et les tests de l’application ne changent pas. Il faudrait seulement conserver en plus le champ `et` des enregistrements mDNS._

_ **Le problème de fond, que la bibliothèque ne règle pas** _

_J’ai vérifié dans le code de Gladys comment il crée le conteneur d’une intégration. Il est sur un réseau Docker en mode bridge, avec toutes les capacités Linux retirées. Aucun mode réseau `host` n’est possible, ni pour le conteneur principal ni pour un sous-conteneur, et les ports exposés sont attribués au hasard._

- _**Pour les HomePod / Apple TV (PTP) :** l’émetteur doit servir l’horloge sur les ports UDP 319/320, et l’enceinte vient l’interroger à l’adresse que l’émetteur lui donne. Cette adresse serait l’IP interne du conteneur (172.x), injoignable depuis le réseau local. Ces appareils resteraient donc probablement muets._
- _ **Pour les enceintes tierces en NTP et les récepteurs AirPlay 1 :** c’est plus favorable, mais rien ne le garantit, car l’enceinte doit aussi recontacter l’émetteur._

_Je l’avais signalé comme une limite ; c’est en réalité potentiellement bloquant pour les HomePod. La vraie solution serait que Gladys propose une option réseau pour ce type d’intégration. Ça vaudrait la peine de l’aborder avec les mainteneurs de Gladys._"

Peut-être garder cette solution sous le coude et attendre qu’elle mature un peu ?

Et en réalité, je n’ai pas encore eu l’occasion de tester mais ça n’est peut-être pas encore possible de passer en intégration externe en l’état

---

<div class="post-metadata">

**Author:** ![bertrandda](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/bertrandda/32/5929_2.png) [@bertrandda](https://community.gladysassistant.com/u/bertrandda)\
**Post date:** [Octobre 29, 2026, 9:27 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451/2 "2026-10-29T21:27:19Z")

</div>

> [@GBoulvin](#):
>
> Peut-être garder cette solution sous le coude et attendre qu’elle mature un peu ?

Oui j’avais vu la lib pour «&nbsp;l’ancienne&nbsp;» intégration interne mais tu as peut être raison, on peut la surveiller pour l’utiliser plus tard, en général c’est toujours mieux d’avoir une lib maintenue qu’une vieille lib abandonnée.

> [@GBoulvin](#):
>
> Et en réalité, je n’ai pas encore eu l’occasion de tester mais ça n’est peut-être pas encore possible de passer en intégration externe en l’état

Au vu de la dernière phrase que tu as mis de ton Claude oui en effet j’ai pas l’impression que ce soit possible. Je vais essayer de tester rapidement, et je te dis si ça fonctionne

---

<div class="post-metadata">

**Author:** ![bertrandda](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/bertrandda/32/5929_2.png) [@bertrandda](https://community.gladysassistant.com/u/bertrandda)\
**Post date:** [Octobre 29, 2026, 9:45 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451/3 "2026-10-29T21:45:43Z")

</div>

@GBoulvin ça ne semble pas marcher, je te ferrai plus de tests dimanche avec un véritable Homepod

```auto
[2026-10-29T21:40:02.135Z] [INFO] [app] Action test_speaker <- ext:ext-gboulvin-gladys-airplay:speaker:faee67b415d7
[2026-10-29T21:40:02.160Z] [INFO] [player] Playing on Speaker (172.16.8.255:7000, AirPlay 2)
/app/node_modules/bplist-parser/bplistParser.js:64
    throw new Error("Invalid binary plist. Expected 'bplist' at offset 0.");
    ^

Error: Invalid binary plist. Expected 'bplist' at offset 0.
    at exports.parseBuffer (/app/node_modules/bplist-parser/bplistParser.js:64:11)
    at Client.processData (/app/node_modules/@lox-audioserver/node-airplay-sender/dist/core/rtsp.js:1501:43)
    at Socket.<anonymous> (/app/node_modules/@lox-audioserver/node-airplay-sender/dist/core/rtsp.js:211:18)
    at Socket.emit (node:events:514:28)
    at addChunk (node:internal/streams/readable:569:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:520:3)
    at Readable.push (node:internal/streams/readable:400:5)
    at TCP.onStreamRead (node:internal/stream_base_commons:194:23)

```

---

<div class="post-metadata">

**Author:** ![GBoulvin](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/gboulvin/32/10006_2.png) [@GBoulvin](https://community.gladysassistant.com/u/GBoulvin)\
**Post date:** [Octobre 29, 2026, 10:02 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451/4 "2026-10-29T22:02:30Z")

</div>

D’après Claude, ton log montre plutôt qu’il faut utiliser la nouvelle lib. Une nouvelle version de l’intégration est sortie. Tu pourras tester ?

---

<div class="post-metadata">

**Author:** ![bertrandda](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/bertrandda/32/5929_2.png) [@bertrandda](https://community.gladysassistant.com/u/bertrandda)\
**Post date:** [Octobre 29, 2026, 10:09 UTC](https://community.gladysassistant.com/t/integration-externe-airplay/11451/5 "2026-10-29T22:09:31Z")

</div>

Oui je te test ça
