DiskStation als Airplay Empfänger

Status
Für weitere Antworten geschlossen.

Masl

Benutzer
Mitglied seit
18. Dez 2011
Beiträge
29
Punkte für Reaktionen
0
Punkte
0
Cool ! Liest sich gut !! Muss ich bei Zeiten mal unbedingt testen - ich habe sogar dann eine ARM CPU in meiner DS ;)
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Also ich hab jetzt raus, wie man so ein Synology-Paket baut. Habe dabei schmerzlich lernen müssen, dass eine "Intel Atom x86"-Architektur bei Synology wohl doch keine arch="x86" ist, sondern arch="cedarview" ... %-?

Anyhow... wenn du mir deine ARM-Binaries schicken kannst, könnte ich das Paket wohl noch um ARM erweitern (...ohne den Cross-Compiler :-O anwerfen zu müssen...). Es braucht die folgenden Files:
- lib/libasound.so.2
- lib/libcrypto.so.0.9.8
- lib/libssl.so.0.9.8
- bin/shairport

@all: wenn jemand Versuchskanninchen spielen möchte - bitte melden... ;-)
 
Zuletzt bearbeitet:

WeeGee

Benutzer
Mitglied seit
02. Dez 2012
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Moin Losty,

mit deiner Anleitung habe ich es fast geschafft, shairport zum dudeln zu bringen.
Beim Starten mit
LD_LIBRARY_PATH=/opt/lib ./shairport -p 5005 -a "Synology" &
kam dann aber die
WARNING: couldn't create avahi client: Daemon not running!

Mit etwas googeln habe ich dann einen anderen avahi installiert:
> ipkg install avahi
Package avahi (0.6.30-1) installed in root is up to date.
Nothing to be done
Successfully terminated.
> ipkg install dbus
Package dbus (1.2.16-1) installed in root is up to date.
Nothing to be done
Successfully terminated.

und den von Synology gestoppt:
> /usr/syno/etc/rc.d/S99avahi.sh stop
Stopping Avahi mDNS/DNS-SD Daemon

und den neuen gestartet:
> /opt/sbin/avahi-daemon &

dann noch die Gruppe audio hinzugefügt:
> addgroup audio

und shairport gestartet:
LD_LIBRARY_PATH=/opt/lib ./shairport -p 5005 -a "Synology" &

Damit lief das dann erstmal. :)

Wenn ich dann aber z.B. gleichzeitig zur Wiedergabe über AirPlay auch noch den MPD auf meiner DS213 abspielen will (ok, macht wenig Sinn, kann aber versehentlich passieren), knallt es:
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
FATAL: Alsa initialization failed: unable to open pcm device: Device or resource busy
Shutting down...

dann muß man Shairport neu starten..
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Spannend...

...das Gehuddel mit dem avahi hatte ich irgendwie gar nicht. Bei mir ist (afaik mit dem AFP-Support in der DSM)...
> avahi-daemon -V
avahi-daemon 0.6.28

...vorinstalliert gewesen und das hat getan. Die DS213 klingt ja noch recht neu, oder? Welche DSM-Version hast du?

Dieses "Device or resource busy" ist mir auch mal begegnet. Da hatte ich die AudioStation nebenher laufen. Allerdings war Shairport damals nicht abgeraucht gewesen, sonndern hatte nur die Meldung ausgegeben. An die genauen Einstellungen kann ich mich leider nicht mehr erinnern, aber ich habe mittlerweile ein start-stop-Skript, was das ganze dann auch noch vom TTY loslöst. Evtl. probierst du bei shairport mal den Parameter "--daemon". Ausserdem könntest du mal mit den Alsa-Options rumprobieren, ob man das mit Software-mixing irgendwie wegbekommt:
----------------------
Options for output alsa:
-d output-device set the output device [default*|...]
-t mixer-type set the mixer type [software*|hardware]
-m mixer-device set the mixer device ['output-device'*|...]
-c mixer-control set the mixer control [Master*|...]
-i mixer-index set the mixer index [0*|...]
*) default option
----------------------
 

WeeGee

Benutzer
Mitglied seit
02. Dez 2012
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Ja, diese DS213, mit DSM 4.3

Wenn ich den sbin-avahi kille und mit "/usr/syno/etc/rc.d/S99avahi.sh start" den Syno-avahi-daemon (V 0.6.28) starte, bekomme ich wieder
WARNING: couldn't create avahi client: Daemon not running!
Listening for connections.
Failed to create client object: Daemon not running
FATAL: MDNS child process died unexpectedly!
Shutting down...
 

neuni88

Benutzer
Mitglied seit
18. Feb 2014
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Moin,

ich bin losty`s Anleitung gefolgt und habe es soweit auch hinbekommen ipkg und alle benötigten Pakete zu installieren. Das "make" für shairport scheitert nun aber :(
Rich (BBCode):
DiskStation> CC=gcc make
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   shairport.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   daemon.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   rtsp.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   mdns.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   mdns_external.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   mdns_tinysvcmdns.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   common.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   rtp.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   player.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   alac.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   audio.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   audio_dummy.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   audio_pipe.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   tinysvcmdns.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   audio_ao.c
gcc -c -O2 -I/opt/include   -I/opt/include   -I/opt/include -I/opt/include/alsa   audio_alsa.c
gcc shairport.o daemon.o rtsp.o mdns.o mdns_external.o mdns_tinysvcmdns.o common.o rtp.o player.o alac.o audio.o audio_dummy.o audio_pipe.o tinysvcmdns.o audio_ao.o audio_alsa.o -lm -lpthread -L/opt/lib -lssl -lcrypto -ldl   -L/opt/lib -lao -lpthread -ldl   -L/opt/lib -lasound   -o shairport
/opt/i686-linux-gnu/lib/librt.so.1: undefined reference to `__librt_enable_asynccancel@GLIBC_PRIVATE'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libpthread.so: undefined reference to `__libc_sigaction@GLIBC_PRIVATE'
/opt/i686-linux-gnu/lib/librt.so.1: undefined reference to `__librt_multiple_threads@GLIBC_PRIVATE'
/opt/i686-linux-gnu/lib/librt.so.1: undefined reference to `__librt_disable_asynccancel@GLIBC_PRIVATE'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libpthread.so: undefined reference to `_h_errno@GLIBC_2.0'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libpthread.so: undefined reference to `__on_exit@GLIBC_PRIVATE'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libdl.so: undefined reference to `_dl_open@GLIBC_PRIVATE'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libdl.so: undefined reference to `_dl_close@GLIBC_PRIVATE'
/opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/libpthread.so: undefined reference to `_errno@GLIBC_2.0'
collect2: ld returned 1 exit status
make: *** [shairport] Error 1

configure hat geklappt, da hakt es nun aber.
Hatte schon jemand dieses Problem, bzw. kennt sich ein wenig besser mit C aus als ich?

Danke!

PS: Habe eine DS214play
 

8bitCrunch

Benutzer
Mitglied seit
10. Okt 2012
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Habe gerade noch mal shairport (den C fork nach http://www.losty.ch/2014/01/synology-nas-as-airplay-receiver.html) neu für DSM 5 installiert und bin über dein Problem gestolpert, was ähnlich zu meinem aussieht:

Versuch mal die entsprechenden symlinks umzubiegen, um die entsprechenden libs unter /lib anstelle von /opt/lib zu nutzen.
Am besten schaust du Dir erstmal deine symlinks an:

Rich (BBCode):
cd /opt/lib/gcc/i686-linux-gnu/4.2.1/../../../../i686-linux-gnu/lib/
ls -al libpthread*
ls -al libdl*

Am besten den Ausgangszustand notieren, falls du die folgenden Schritte rückgängig machen willst.
Entferne die symlinks und verlinke zu den entsprechenden libs in /lib.

Bspw. führte bei mir (DS213+) folgendes zum erfolgreichen kompilieren (Pfade und Dateinamen werden bei dir variieren, analog dazu anpassen - libm und librt kannst du anscheinend weglassen):

Rich (BBCode):
cd /opt/lib/gcc/powerpc-linux-gnuspe/3.4.6/../../../../powerpc-linux-gnuspe/lib/

rm libpthread.so
rm libpthread.so.0
ln -sf /lib/libpthread.so.0 libpthread.so

rm libm.so
rm libm.so.6
ln -sf /lib/libm.so.6 libm.so

rm libdl.so
rm libdl.so.2
ln -sf /lib/libdl.so.2 libdl.so

rm librt.so
rm librt.so.1
ln -sf /lib/librt.so.1 librt.so

PS:
Übrigens läuft es jetzt mit ALSA sehr viel stabiler und mit weniger Aussetzern - auch musste ich diesmal auch keinen alternativen avahi-daemon oder dbus installieren.
Ich nutze übrigens folgendes init-script:

/opt/etc/init.d/S99shairport
Rich (BBCode):
#!/bin/sh
APNAME="Kitchen"
PIDFILE=/opt/var/run/shairport.pid

SHAIRPORT="/opt/opt/shairport/shairport"

shairport_start() {
        if [ "$(ps | grep shairport\.pl |grep -v grep)" > /dev/null ]; then
                echo "shairport already running, use restart instead"
        else
           echo "Starting shairport..."
	   LD_LIBRARY_PATH=/opt/lib $SHAIRPORT -d -p 6002 -a "$APNAME"
#          LD_LIBRARY_PATH=/opt/lib $SHAIRPORT -q -d -b 512 -o 6002 --ao_driver=oss --ao_devicename=/dev/dsp4 --apname=$APNAME
        fi
}

shairport_stop() {
        echo "Stopping shairport..."
        killall shairport
}

shairport_restart() {
        shairport_stop
        sleep 2
        shairport_start
}

case "$1" in
'start')
        shairport_start
        ;;
'stop')
        shairport_stop
        ;;
'restart')
        shairport_restart
        ;;
*)
        echo "Usage: start, stop, restart"



Gruß, ByteCrunch
 
Zuletzt bearbeitet:

8bitCrunch

Benutzer
Mitglied seit
10. Okt 2012
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Kleiner Nachtrag:

Es läuft alles sehr zufriedenstellend ohne Aussetzer. Ich habe noch die "alsa-utils" installiert, um die Lautstärke mit alsamixer zu erhöhen, welche bei mir recht niedrig einstellt war. Danach noch mit "alsactl store" speichern und alles ist gut ;)
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Hej losty,

gestern habe ich deine Anleitung auf einer DS 1812+ ausprobiert.

Dazu habe ich zusätzlich zu den angegebenen Paketen "libao" aus der optware installiert sowie die Symlinks angepasst.

shairport wurde kompiliert, verabschiedet sich aber beim Start sofort mit core dump. Woran könnte das liegen?
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Hoi zäme,

sorry - die E-Mail-Benachrichtigung hatte hier wohl irgendwie nicht funktioniert. Mittlerweile bin ich schon ein Stückchen weiter und habe einen Cross-Compiler am laufen. Damit könnt ihr euch die compiliererei vielleicht sparen...

Ich hab da schon mal ein bisschen was vorbereitet :) : http://home.losty.ch/webfilebrowser/share/shairport-goes-diskstation?key=d97c1ef3 - bzgl. weiterer Architekturen einfach irgendwie melden.

Hier habe ich mal ein bisschen Synology-Nummern gesammelt, bei denen das ganze bereits funktioniert hatte: https://www.evernote.com/shard/s198...d2e3ed07fca6/7d2c3d24c2863824ceacfc871fad1091 ...über weitere Hinweise wäre ich froh.

Ich arbeite ausserdem daran das Paket bei der https://synocommunity.com/ unter zu bringen. Auch wenn sich von "offizieller" Seite bisher leider reichlich wenig zu bewegen scheint, der Github Fork resp. Pull-Request wäre jedenfalls hier zu finden: https://github.com/SynoCommunity/spksrc/pull/848

@hvkls: cedarview sollte tun - mit dem Paket klappts auf meiner 1512+ jedenfalls.

Cheers,
Losty
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Genial, und sogar als .spk :) Vielen Dank, es läuft auf der 1812+!

Ich würde allerdings gern einen anderen Namen broadcasten. Wo wird shairport denn gestartet, so dass ich dort den Parameter "-a" anpassen kann?
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Danke für die Rückmeldung!

Ja, für sowas wollte ich irgendwann noch mal ein Konfigurations-Seite einbauen - wenn irgendwann mal zu viel Zeit ist. Darum, wie man solche Menüs baut hatte ich mich bisher immer herumgedrückt... ;-)

Das Paket installiert sich unter /var/packages/shairport/.

Unter ./target/bin/ liegt das shairport binary.

Für "-a" macht es vielleicht mehr Sinn das start-stop-status-Skript unter ./scripts anzupassen.
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Ich hatte es unterweilen selbst gefunden, danke!

Ob es aber gut ist, OpenSSL beizufügen? Es wäre wohl deutlich sicherer, wenn die gut gewarteten Synology-Libraries verwendet werden könnten. Ob shairport darüber hinaus unbedingt als root laufen muss, muss ich selbst erst ausprobieren...
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Gib mir Bescheid, wenn Dus da was rausgefunden hast. Bei mir wars an den Rechten auf /dev/snd gescheitert. Also da hatte man das schon hinbiegen können, aber nach dem nächsten DSM-Update ists sicher wieder weg und so...

OpenSSL vom DSM war damals zu alt. Nach Heartbleed werden die das aber sich aktualisiert haben - wäre mal wieder ein Versuch wert.

PS: ...hast du nen Github Account?
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Einen Github-Account habe ich bis dato nicht. Könnte ich aber bestimmt anlegen.

Die Rechte auf /dev/dsp* /dev/mixer* /dev/snd/* könnte man im shairport start-stop-status vor dem Start setzen.

EDIT: Oder künftig elegant per udev:

udev ist erst ab 5.1 (aktuell in Beta) verfügbar, die Regeln liegen unter /lib/udev/rules.d. Ob Synology aber irgendwelche Beschränkungen vorgenommen hat, hab ich noch nicht weiter untersucht.
 
Zuletzt bearbeitet:

WLAN-Kabel

Benutzer
Mitglied seit
13. Jan 2015
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Ich hoffe der TO findet meine Beitrag :) Auf jeden Fall bin ich froh dass es so eine schicke Lösung für die DS gibt - wenn sie dann auch bei mir funktioniert. Ich habe eine DS112+ und eine USB Soundkarte und höre damit via Audio Station Musik auf meiner Anlage.

Ich habe mir auf meiner 112+ das shairport_88f6281_1.1.1-1.spk installiert. Dabei war die Audio Station aktiv und ich konnte Shairplay als Wiedergabeziel in der Audio Station auch sehen. Da mit Shairplay die Audio Station nicht mehr funktioniert, habe ich sie anschließend deaktiviert (nicht deinstalliert), denn ich will ja von meinem Handy streamen. Soweit, so gut. Da ich ein Android Handy benutze, was von Haus aus kein Airplay kann, habe ich mir die Apps AllConnect und Twonky Beam besorgt, welche (unabhängig von einander) einen Androiden Airplay-fähig machen. Dort wurde mein Shairplay ebenfalls gefunden. Will ich nun jedoch eine MP3 mit einer der Apps an Shairplay schicken, höre ich keine Musik und im Paketzentrum hat sich Shairplay von selbst deaktiviert. Um das ganze wieder in Gang zu setzen, muss ich die DS neu starten. Mache ich irgendwo einen Fehler?
 

losty

Benutzer
Mitglied seit
05. Jan 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Hmm... das Shairport-Paket hat aktuell keine eigene Initialisierung for die Soundkarte. Deswegen MUSS Audio Station nebenher laufen. Audio Station initialisiert die Soundkarte für Shairport und de-initialisiert sie wieder, wenn du Audio Station stoppst.

Funktioniert es damit?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat