Multiroom Audio: Difference between revisions

From Chaosdorf Wiki
(basic documentation for snapcast)
No edit summary
Line 1: Line 1:
Im Dorf gibt es aktuell ein rudimentäres Multiroom Audio System, aufgebaut auf Snapcast. Ich hatte noch nicht genug Zeit um alle In- & Output einzubauen, deshalb aktuell noch "beta".
Im Dorf gibt es aktuell ein rudimentäres Multiroom Audio System, aufgebaut auf Snapcast. Ich hatte noch nicht genug Zeit um alle In- & Outputs einzubauen, deshalb aktuell noch "beta".
 
Snapcast ist nur für das Routing und die Synchronisation von Audio verantwortlich, der Input wird durch andere Systeme generiert (siehe Musik rein).


{{Project
{{Project
Line 15: Line 17:


=== Generisch ===
=== Generisch ===
Der Snapserver stellt 4 TCP-Ports und server.snapcast.chaosdorf.space zu Verfügung. An Port 4951, 4952, 4953 und 4954 (auch so im Webinterface benannt, siehe unten) kann jemensch PCM-Audiopakete (48kHz, 16 Bit, Stereo) schicken.
Der Snapserver stellt 4 TCP-Ports und server.snapcast.chaosdorf.space zu Verfügung. An Port ''4951'', ''4952'', ''4953'' und ''4954'' (auch so im Webinterface als Stream benannt, siehe unten) kann jemensch PCM-Audiopakete (48kHz, 16 Bit, Stereo) schicken.
 
Ob das funktioniert, lässt sich z.B. mit Netcat einfach testen (sollte auf dem Snapclient in der Lounge rauschen):
nc server.snapcast.chaosdorf.space 4951 < /dev/urandom
 
=== Web ===
Unter mopidy.chaosdorf.space findet sich ein Webinterface, dass es möglich macht Online-Radio und den Sound von YouTube Videos direkt an Snapcast zu streamen, ohne das ein Gerät im Hintergrund weiterlaufen muss.


=== Linux ===
=== Linux ===
Line 26: Line 34:


=== Android ===
=== Android ===
Für Android ist Chromecast geplant.
Für Android ist Chromecast als Input geplant.


== Musik raus ==
== Musik raus ==
Aktuell stehen  
Aktuell stehen zwei Streaming-Clients permanent zu Verfügung, im ''E-Lab'' und in der ''Lounge''.
 
Um die Musik zu routen (siehe Musik rein), einfach auf snapcast.chaosdorf.space den jeweiligen Input-Stream einem Ausgangsgerät zuweisen. Wer auch auf einem eigenen Gerät mithören will, kann oben rechts im Webinterface den Play-Button klicken, dann taucht der Browser als zusätzliches Ausgabegerät im Interface aus und kann zugeordnet werden. Dazu muss der Browser aber FLAC abspielen können.
 
Für Android-Geräte gibt es auch eine "Snapcast" App [https://f-droid.org/en/packages/de.badaix.snapcast/ auf F-Droid] oder [https://play.google.com/store/apps/details?id=de.badaix.snapcast im Play Store]. Die App kann das System fernsteuern und kann auch als zusätliches Ausgabegerät genutzt werden.
 
== Infrastruktur ==
Die beiden Raspberry Pis für das E-Lab und die Lounge sind unter elab.local und lounge.local per mDNS erreichbar. SSH ist aktiviert (snapcast:snapcast) und die SD-Karte ist read-only, die Pis können also ohne Probleme vom Strom getrennt werden.


Infrastruktur
Der Server ist im Kubernetes-Cluster deployed, und die Konfiguration ist im Repo [https://github.com/chaosdorf/flux/tree/main/apps/snapcast-server chaosdorf/flux] zu finden. Das Helm-Chart ist liegt in [https://github.com/lukasklinger/snapcast-server-k8s lukasklinger/snapcast-server-k8s].


== Playback ==
== Playback ==

Revision as of 18:16, 8 June 2023

Im Dorf gibt es aktuell ein rudimentäres Multiroom Audio System, aufgebaut auf Snapcast. Ich hatte noch nicht genug Zeit um alle In- & Outputs einzubauen, deshalb aktuell noch "beta".

Snapcast ist nur für das Routing und die Synchronisation von Audio verantwortlich, der Input wird durch andere Systeme generiert (siehe Musik rein).


Multiroom Audio beta
5968845.png
Multiroom Audio mit Snapcast im Dorf
Ort Neues Dorf
Beteiligt cyaniccerulean
Quelltext https://github.com/badaix/snapcast


Musik rein

Generisch

Der Snapserver stellt 4 TCP-Ports und server.snapcast.chaosdorf.space zu Verfügung. An Port 4951, 4952, 4953 und 4954 (auch so im Webinterface als Stream benannt, siehe unten) kann jemensch PCM-Audiopakete (48kHz, 16 Bit, Stereo) schicken.

Ob das funktioniert, lässt sich z.B. mit Netcat einfach testen (sollte auf dem Snapclient in der Lounge rauschen):

nc server.snapcast.chaosdorf.space 4951 < /dev/urandom

Web

Unter mopidy.chaosdorf.space findet sich ein Webinterface, dass es möglich macht Online-Radio und den Sound von YouTube Videos direkt an Snapcast zu streamen, ohne das ein Gerät im Hintergrund weiterlaufen muss.

Linux

Linux kann Audio direkt per Loopback Souddevice an den Snapserver schicken (siehe Abschnitt Generisch). Das klappt z.B. mit ffmpeg oder pw-cat. Mehr Infos folgen.

Windows

macOS, iOS

Für macOS und iOS ist AirPlay aktuell geplant, da muss aber noch dran gebastelt werden.

Android

Für Android ist Chromecast als Input geplant.

Musik raus

Aktuell stehen zwei Streaming-Clients permanent zu Verfügung, im E-Lab und in der Lounge.

Um die Musik zu routen (siehe Musik rein), einfach auf snapcast.chaosdorf.space den jeweiligen Input-Stream einem Ausgangsgerät zuweisen. Wer auch auf einem eigenen Gerät mithören will, kann oben rechts im Webinterface den Play-Button klicken, dann taucht der Browser als zusätzliches Ausgabegerät im Interface aus und kann zugeordnet werden. Dazu muss der Browser aber FLAC abspielen können.

Für Android-Geräte gibt es auch eine "Snapcast" App auf F-Droid oder im Play Store. Die App kann das System fernsteuern und kann auch als zusätliches Ausgabegerät genutzt werden.

Infrastruktur

Die beiden Raspberry Pis für das E-Lab und die Lounge sind unter elab.local und lounge.local per mDNS erreichbar. SSH ist aktiviert (snapcast:snapcast) und die SD-Karte ist read-only, die Pis können also ohne Probleme vom Strom getrennt werden.

Der Server ist im Kubernetes-Cluster deployed, und die Konfiguration ist im Repo chaosdorf/flux zu finden. Das Helm-Chart ist liegt in lukasklinger/snapcast-server-k8s.

Playback

Der Snapcast-Server im Kubernetes-Cluster stellt vier verschiedene TCP-Endpoints zur Verfuegung, an die einfach PCM-Samples geschickt werden koennen. Die Adressen lauten `10.8.0.1:4591`, `10.8.0.1:4592`, `10.8.0.1:4593`, `10.8.0.1:4594` und lassen sich bei bedarf diesem Helm-Chart entnehmen.

Ob das funktioniert, laesst sich z.B. mit Netcat einfach testen (sollte auf dem Snapclient in der Lounge rauschen):

nc 10.8.0.1 4951 < /dev/urandom