RTP, MPD und Sound streamen

Sound, Digitalkameras, TV+Video und Spiele.
scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 29.03.2016 13:05:46

Ich veröffentliche jetzt mal meine letzte Konfiguration.

https://github.com/xundeenergie/pulseaudio

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 14.05.2016 14:03:32

Ich bin es wieder... :)

Hab noch ein Phänomen festgestellt.

Grundsätzlich funktioniert der RTP-Stream wunderbar. Bei einem User.

Wenn mpd läuft und gdm startet, hör ich sogar die Musik beim gdm.
Logge ich mich als User1 ein, hör ich die Musik weiter (mit einer kurzen Unterbrechung, wo auf den User umgeschaltet wird bis pulseaudio gestartet ist).
Mache ich "Benutzer wechseln" und logge mich als User2 ein, ist die Musik unterbrochen, solange ich wieder am gdm bin. Ist User2 angemeldet, erklingt die Musik wieder.
Ein Wechsel zu User1 bringt die Musik wieder beim User1, während der gdm angezeigt wird, nicht.

Da kann ich ein paar mal hin und her wechseln und es klappt immer.

Bin ich bei einem User etwas länger, und wechsle dann zum anderen User, ist der andere User plötzlich stumm. Eine Kontrolle mit pavucontrol zeigt, dass der RTP-Stream verschwunden ist. Ich muss dann den mit pulseaudio -k den Soundserver des Users killen. Und nach dem automatischen Neustart ist der RTP-Stream wieder da.

Ich habe module-suspend-on-idle in der default.conf für die User auskommentiert. In der default.pa von mpd ebenso.

Was könnte die Ursache sein, dass der mpd-Stream abreißt, während ein User inaktiv ist?

Noch eine Fehlermeldung aus dem log:

Code: Alles auswählen

Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device hdmi:0: Das Gerät oder die Ressource ist belegt
Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device front:1: Das Gerät oder die Ressource ist belegt
Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device front:1: Das Gerät oder die Ressource ist belegt
Aber warum? wie finde ich heraus, wovon?

Noch eine spannende Geschichte im Log beim Wechsel zurück zum User. Der Sound läuft noch ca. eine Sekunde und ist dann aus. Im Log dazu folgendes:

Code: Alles auswählen

Mai 14 14:36:47 aldebaran pulseaudio[10955]: pulsecore/memblockq.c: list_items flist is full (don't worry)
Mai 14 14:36:52 aldebaran pulseaudio[11018]: Updating sample rate
Mai 14 14:36:52 aldebaran pulseaudio[11018]: wi=35040362 ri=5014058
Mai 14 14:36:52 aldebaran pulseaudio[11018]: Write index deviates by 30029,16 ms, expected 500,00 ms
Mai 14 14:36:52 aldebaran pulseaudio[11018]: Estimated target rate: 485682819 Hz, using average of 10113952 Hz  (α=0,020)
Mai 14 14:36:52 aldebaran pulseaudio[11018]: Sample rates too different, not adjusting (44100 vs. 25046777).
Mai 14 14:36:52 aldebaran pulseaudio[11018]: Updated sampling rate to 44100 Hz.
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Checking for dead streams ...
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Freeing session 'PulseAudio RTP Stream on aldebaran.localdomain'
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Sink update requested latency 200,00
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Freeing input 2 "RTP Stream (PulseAudio RTP Stream on aldebaran.localdomain)"
Mai 14 14:36:53 aldebaran pulseaudio[10955]: alsa_output.pci-0000_00_1b.0.analog-stereo: Found underrun 16992 bytes ago (18256 bytes ahead in playback buffer)
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Latency set to 200,00ms
Mai 14 14:36:53 aldebaran pulseaudio[10955]: hwbuf_unused=30256
Mai 14 14:36:53 aldebaran pulseaudio[10955]: setting avail_min=15503
Mai 14 14:36:53 aldebaran pulseaudio[10955]: alsa_output.pci-0000_00_1b.0.analog-stereo: Found underrun 16992 bytes ago (18224 bytes ahead in playback buffer)
Mai 14 14:36:53 aldebaran pulseaudio[10955]: Latency set to 200,00ms
Mai 14 14:36:53 aldebaran pulseaudio[10955]: hwbuf_unused=30256
Mai 14 14:36:53 aldebaran pulseaudio[10955]: setting avail_min=15503
Mai 14 14:36:53 aldebaran pulseaudio[10955]: [alsa_output.pci-0000_00_03.0.hdmi-stereo] total=231,41ms sink=190,98ms 
Mai 14 14:36:53 aldebaran pulseaudio[10955]: alsa_output.pci-0000_00_1b.0.analog-stereo: Found underrun 16992 bytes ago (16784 bytes ahead in playback buffer)
Mai 14 14:36:53 aldebaran pulseaudio[10955]: [alsa_output.pci-0000_00_1b.0.analog-stereo] total=190,88ms sink=190,88ms 
Mai 14 14:36:53 aldebaran pulseaudio[10955]: alsa_output.pci-0000_00_1b.0.analog-stereo: Found underrun 16992 bytes ago (16688 bytes ahead in playback buffer)
Mai 14 14:36:53 aldebaran pulseaudio[10955]: [combined] avg total latency is 211,15 msec.
Freeing input2 RTP-Stream... warum???

lg scientific

PS: Ich habe eine neue Systemgruppe "mpd" gemacht und mpd läuft jetzt auch mit dieser Gruppe. Die Default-Gruppe von mpd "audio" hab ich ihm entzogen, damit wirklich nur Pulseaudio exklusiven Zugriff auf das Audio-Device hat und dieses nicht "irrtümlich" von mpd gekrallt und belegt wird.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 15.05.2016 10:26:03

scientific hat geschrieben:[…]
Noch eine Fehlermeldung aus dem log:

Code: Alles auswählen

Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device hdmi:0: Das Gerät oder die Ressource ist belegt
Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device front:1: Das Gerät oder die Ressource ist belegt
Mai 14 14:07:11 aldebaran pulseaudio[9820]: Error opening PCM device front:1: Das Gerät oder die Ressource ist belegt
Aber warum? wie finde ich heraus, wovon?[…]
Dazu gibts zu jeden Audiodevice Dateien dieser Art »/proc/asound/card0/pcm3p/sub0/status«, also zB

Code: Alles auswählen

$ cat /proc/asound/card0/pcm3p/sub0/status 
closed
$ aplay -D plughw:0,3 /dev/zero 
Wiedergabe: Rohdaten '/dev/zero' : Unsigned 8 bit, Rate: 8000 Hz, mono

$ cat /proc/asound/card0/pcm3p/sub0/status 
state: RUNNING
owner_pid   : 3716
trigger_time: 575.208798795
tstamp      : 0.000000000
delay       : 14704
avail       : 1376
avail_max   : 4016
-----
hw_ptr      : 85376
appl_ptr    : 100000
$ ps -p 3716 -o command=
aplay -D plughw:0,3 /dev/zero
leider habe ich nicht herausgefunden wie einem das in Verbindung mit Pulseaudio weiterhilft, denn dann

Code: Alles auswählen

$ aplay /dev/zero 
Wiedergabe: Rohdaten '/dev/zero' : Unsigned 8 bit, Rate: 8000 Hz, mono

$ cat /proc/asound/card0/pcm3p/sub0/status 
state: RUNNING
owner_pid   : 963
trigger_time: 742.236689859
tstamp      : 763.865118214
delay       : 5564
avail       : 10848
avail_max   : 10848
-----
hw_ptr      : 1038368
appl_ptr    : 1043904
$ ps -p 963 -o command=
[exitstatus 1]

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 30.05.2016 00:34:49

Vielen Dank!

Leider bringt es mich auch nicht weiter.

Aber ich habe herausgefunden, dass das Wechseln zu gdm oder einem anderen User unter stable tadellos funktioniert, unter testing hingegen das oben beschriebene Verhalten zeigt.

Jetzt stellt sich natürlich die Frage, gegen welches Paket hier ein Bugreport geschrieben werden muss...
Könnte das pulseaudio direkt sein?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 30.05.2016 09:04:15

Wissen tu ichs natürlich nicht, aber ich würde Pulseaudio für die richtige Anlaufstelle halten.

Ist vielleicht das Modul »module-esound-protocol« geladen?

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 30.05.2016 09:36:33

smutbert hat geschrieben:Wissen tu ichs natürlich nicht, aber ich würde Pulseaudio für die richtige Anlaufstelle halten.

Ist vielleicht das Modul »module-esound-protocol« geladen?
Das sollte also nicht geladen sein?

Ich habe von der Standardconfig übernommen:

Code: Alles auswählen

.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

Ich kann momentan nur per ssh auf meinen Rechner. Dort zeigt sich folgendes Bild:

Code: Alles auswählen

(0 ✓) SCREEN jakob@aldebaran[/@debian-testing] (09:48) ~: $ ps aux|grep pulse
mpd       1476  1.0  0.2 420920  7660 ?        Sl   08:26   0:52 /usr/bin/pulseaudio --start --log-target=journal
Debian-+  1650  4.4  0.7 685200 29700 ?        S<l  08:26   3:39 /usr/bin/pulseaudio --start --log-target=journal
jakob     4712  0.0  0.0  14524  2228 pts/2    S+   09:48   0:00 grep --color pulse
Pulse läuft am gdm (mit einer Config aus /etc/pulse/...) und für den mpd läuft der Pulseaudio mit einer eigenen Config aus /var/lib/mpd/.config/pulse/...
Also mal nachschauen, welche Module geladen sind:

Code: Alles auswählen

(0 ✓) SCREEN jakob@aldebaran[/@debian-testing] (09:48) ~: $ sudo -u Debian-gdm pacmd list-modules|o
Es läuft kein PulseAudio-Dienst oder nicht als Sessiondienst.
Hä?

Dieses Phänomen ist mir schon öfter aufgefallen, dass Pulseaudio zwar bei ps gelistet wird, aber nicht zugänglich ist über pacmd (oder pactl oder Shell-Extensions...)

Code: Alles auswählen

(0 ✓) SCREEN jakob@aldebaran[/@debian-testing] (09:48) ~: $ sudo -u mpd pacmd list-modules|less
6 module(s) loaded.
    index: 0
        name: <module-native-protocol-unix>
        argument: <>
        used: -1
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Native protocol (UNIX sockets)"
                module.version = "8.0"
    index: 1
        name: <module-null-sink>
        argument: <sink_name=rtp_local sink_properties="device.description='RTP Unicast Sink localhost'" >
        used: 1
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Clocked NULL Sink"
                module.version = "8.0"
    index: 2
        name: <module-rtp-send>
        argument: <source=rtp_local.monitor loop=1 destination_ip=127.0.0.1 port=46998 inhibit_auto_suspend=always>
        used: -1
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Read data from source and send it to the network via RTP/SAP/SDP"
                module.version = "8.0"
    index: 3
        name: <module-null-sink>
        argument: <sink_name=rtp_lan sink_properties="device.description='RTP Multicast Sink LAN'">
        used: 0
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Clocked NULL Sink"
                module.version = "8.0"
    index: 5
        name: <module-zeroconf-publish>
        argument: <>
        used: -1
        load once: yes
        properties:
                module.author = "Lennart Poettering"
                module.description = "mDNS/DNS-SD Service Publisher"
                module.version = "8.0"
    index: 6
        name: <module-cli-protocol-unix>
        argument: <>
        used: -1
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Command line interface protocol (UNIX sockets)"
                module.version = "8.0"
(END)
Der Pulseaudio von mpd läuft also. Und esound ist nicht geladen, stattdessen lt. Config module-native-protocol-unix.

Code: Alles auswählen

(0 ✓) SCREEN jakob@aldebaran[/@debian-testing] (09:53) ~: $ dpkg -l |grep pulseaudio
ii  gstreamer1.0-pulseaudio:amd64         1.8.1-1                              amd64        GStreamer plugin for PulseAudio
ii  pulseaudio                            8.0-2+b2                             amd64        PulseAudio sound server
ii  pulseaudio-module-bluetooth           8.0-2+b2                             amd64        Bluetooth module for PulseAudio sound server
ii  pulseaudio-module-x11                 8.0-2+b2                             amd64        X11 module for PulseAudio sound server
ii  pulseaudio-module-zeroconf            8.0-2+b2                             amd64        Zeroconf module for PulseAudio sound server
ii  pulseaudio-utils                      8.0-2+b2                             amd64        Command line tools for the PulseAudio sound server
Ich hab das Modul auch gar nicht installiert.

lg scientific
Zuletzt geändert von scientific am 30.05.2016 10:56:13, insgesamt 1-mal geändert.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 30.05.2016 09:57:06

Gerade seh ich:

Code: Alles auswählen

index: 2
        name: <module-rtp-send>
        argument: <source=rtp_local.monitor loop=1 destination_ip=127.0.0.1 port=46998 inhibit_auto_suspend=always>
        used: -1
        load once: no
        properties:
                module.author = "Lennart Poettering"
                module.description = "Read data from source and send it to the network via RTP/SAP/SDP"
                module.version = "8.0"
könnte das

Code: Alles auswählen

 inhibit_auto_suspend=always 
der Knackpunkt sein?

Und gerade fällt mir auf, dass die destination_ip mit 127.0.0.1 eine Unicast-Adresse ist. Die habe ich gewählt, weil Pulseaudio bei stärkerem Datenverkehr über eth0/wlan0 zu stottern begonnen hat und ich den Datenstrom von pulseaudio über das lo-Interface leiten wollte...
Aber dass pulseaudio aus Testing das anders handhabt wie der aus Jessie...?

Jetzt kann ich's leider nicht testen. Erst am Abend wieder.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 30.05.2016 23:49:09

Es scheint die

Code: Alles auswählen

destination_ip=127.0.0.1
gewesen zu sein. Hab das beim sende-modul bei mpd und beim Empfangs-Modul in /etc/pulse/default.pa rausgenommen aus den Zeilen (und das Empfangsmodul dort hingeschoben, wo die auskommentierten Alsa-Beispiele sind), und jetzt klappt es beim Wechsel zu gdm. Der Sound läuft weiter.

Also weiter... offenbar wird da gepuffert und beim entsprechenden User an der Stelle weitergespielt, wo man beim Wechsel vorher gewesen ist. Passt aber auch.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 11.08.2016 17:24:03

Irgendwie klappt das immer noch nicht korrekt.

Ohne Netzwerk kein RTP-Stream... Auch nicht am Localhost...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 11.08.2016 22:44:22

Kann mich vielleicht nicht mehr an alles erinnern - ist die Konfiguration noch aktuell?
scientific hat geschrieben:Ich veröffentliche jetzt mal meine letzte Konfiguration.

https://github.com/xundeenergie/pulseaudio

lg scientific
und sind in der ALSA-Konfiguration sonst irgendwelche Besonderheiten eingebaut?
Dass Pulseaudio nur auf ein dmix-Gerät von ALSA zugreift hast du wieder komplett verworfen, oder?

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 11.08.2016 23:04:17

Hi Smutbert!

Die Lösung über das dmix-Gerät in ALSA hab ich wieder verworfen und die Kombination von pulseaudio und ALSA quasi im default belassen.
Ich hab nur für mpd eine eigene default.pa, welche eine RTP-Multicast-Stream über ein Loop-Device an Localhost aussendet.
Die Lösung mit

Code: Alles auswählen

destination_ip=127.0.0.1 port=46998
in diesem Stream hab ich wieder verworfen, da über das loopback-Device kein Multicast-Stream möglich ist, und beim Umschalten von einem User zu gdm und dann zu einem anderen User auf einem anderen graphischen TTY der Stream hängenbleibt...
Nehme ich die default-Einstellungen für den RTP-Multicast-Stream kann ich zwischen Usern wechseln und mpd bei jedem User hören. Jedoch wenn die Netzwerkverbindung abbricht (WLAN wird abgeschaltet, oder die WLAN-Verbindung bricht aus einem anderen Grund ab), hängt auch der RTP-Stream vom localhost zu localhost... (Daher ja auch die Idee mit 127.0.0.1... )

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 12.08.2016 09:11:34

Jetzt hab ich, glaub ich die Lösung gefunden.
Ich schalte lo in den Multicast-Modus und setze eine Route.

Damit spielt jetzt MPD über RTP auf allen Userlogins bei denen pulseaudio läuft.

Ob damit aber noch ein Stream ins lokale Netz möglich ist, hab ich noch nicht getestet. Werde wahrscheinlich eine dezitierte Multicast-adresse in einer weiteren Route auf ein anderes Netzwerkgerät festlegen müssen.

Die Probleme von Multicast auf lo weiß ich jetzt auch noch nicht.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 13.08.2016 11:28:52

Bis jetzt gibts keine Erkenntnisse meinerseits zu vermelden.

Hab ich schon einmal gefragt wieso es RTP sein muss und nicht etwa module-native-protocol-tcp sein darf oder warum du Pulseaudio nicht als systemweiten Daemon startest?

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 13.08.2016 13:29:17

Geht damit die Lautstärkeregelung?
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 13.08.2016 19:39:06

Ja, man sieht die Pulseaudio-Sinks über das Netzwerk (fast) genauso, wie man die Sinks lokaler Soundkarten sieht - inklusive Lautstärkeregler.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 14.08.2016 10:05:22

OK.
Werd ich dann mal testen.
Aber ist da das streamen von einem zu mehreren usern möglich? Ich glaub mich zu erinnern, dass das der Grund war, warum ich RTP gewählt habe...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 14.08.2016 12:04:05

stimmt das ginge nur mit Umwegen:

Man hätte mehrere Pulseaudio-Server und für jeden davon hätte man am Client den oder die zugehörigen Senken, die man dann für die gleichzeitige Wiedergabe mit module-combine-sink zu einer Senke zusammenfassen müsste.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 14.08.2016 16:22:53

Da teste ich doch lieber mit RTP weiter...
Und vor allem muss ich mich in die Multicast-Geschichte besser einarbeiten.
Ich vermute mal, dass ich eine Multicast-Route für lo anlegen muss, die ich gezielt mit einem RTP-Stream von pulseaudio des mpd ansteuere, und einen zweiten Stream für das Streaming ins Netz...

Ich denke mal, wenn ich hier ein vernünftiges Setup zusammenbringe, ist das auch für viele andere mpd-Nutzer interessant.
Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 04.09.2016 14:10:01

So wie es jetzt aussieht, hab ich endlich mein Setup erfolgreich fertiggestellt.

Ich schalte lo in den Multicast-Modus und setze eine Route darauf.

Code: Alles auswählen

# cat network-multicast-lo.service 
[Unit]
Description=Configure loopback-interface for multicast (mpd-RTP-stream)

[Service]
Type=oneshot
ExecStart=/sbin/ifconfig lo multicast
ExecStart=/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
#ExecStart=/sbin/route add 224.0.0.56 netmask 255.255.255.0 dev lo

[Install]
WantedBy=basic.target
Für mpd habe ich unter /var/lib/mpd/.config/pulse/default.pa folgendes eingetragen:

Code: Alles auswählen

# cat /var/lib/mpd/.config/pulse/default.pa 
#! /usr/bin/pulseaudio -nF

load-module module-native-protocol-unix
load-module module-suspend-on-idle timeout=1

#.ifexists module-udev-detect.so
#load-module module-udev-detect tsched=0
#.else

load-module module-null-sink sink_name=rtp_localhost
#load-module module-rtp-send source=rtp.monitor loop=1 source_ip=127.0.0.1 destination_ip=224.0.0.56
load-module module-rtp-send source=rtp_localhost.monitor rate=48000 channels=2 format=s16be port=46102 loop=1 source_ip=127.0.0.1 destination_ip=224.0.0.56
set-default-sink rtp_localhost

#load-module module-null-sink sink_name=rtp
#load-module module-rtp-send source=rtp.monitor loop=1 source_ip=127.0.0.1 destination_ip=224.0.0.56
#load-module module-rtp-send source=rtp.monitor rate=48000 channels=2 format=s16be port=46102 loop=1 source_ip=127.0.0.1 destination_ip=224.0.0.57
#set-default-sink rtp

load-module module-zeroconf-publish
Und in /etc/pulse/default.pa habe ich zur Standardconfig lediglich diese Zeile noch eingefügt:

Code: Alles auswählen

.ifexists module-combine-sink.so
.fail
load-module module-combine-sink sink_name=combined_sys sink_properties="device.description='System-combined-sink'"
.nofail
.endif


### Load the RTP receiver module (also configured via paprefs, see above)
#load-module module-rtp-recv sap_address=224.0.0.56 sink=combined_sys
load-module module-rtp-recv sink=combined_sys

.fail
set-default-sink combined_sys
.nofail

Die Musik spielt damit unabhängig von einer aktiven Netzwerkverbindung und bei allen eingeloggten Usern incl. GDM-Anmeldebildschirm.
Allerdings bei jedem User untschiedlich gepuffert... und zeitversetzt. Manchmal werden die Latenzzeiten, bis der MPD reagiert (Pause/Play) extrem lange (viele Sekunden), und einem Bug von Pulseaudio bin ich auch auf der Spur (queue overrun) bzw. damit auf den Leim gegangen.

Und die unterschiedlichen pa-Instanzen krallen sich das Bluetooth-Device (so ich eines aktiviere) und verursacht so ein vollkommenes Verhindern eines Erkennens des Gerätes (z.B. Handy) oder das aktivieren/Pairing bzw. connect zum Audioprofil wird für den User (der nicht gdm oder mpd ist) unmöglich. Das ist aber wahrscheinlich eine andere Baustelle und wird nicht so einfach zum Lösen sein. (Als Workaround für das Headset-Problem wird im ArchLinux- und Ubuntu-Forum das Deaktivieren von PA für GDM genannt - was aber bei meinem Setup nicht infrage kommt (Ich will ja ohne eingeloggt zu sein auch Musik hören, weil ich mpd per Handy fernsteuere)

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 27.12.2016 22:26:00

Diese Latenzen finde ich nach wie vor sehr störend... Und ich bin jetzt nochmal in mich gegangen. Hab nochmal an der Konfiguration herumgespielt...

Da muss noch was gehen. Aber ich weiß noch nicht wie.
Offenbar ist es so, dass module-rtp-recv von pulseaudio den Stream puffert, wenn ich auf ein anderes VT zu einem anderen User wechsle. Denn wenn ich zurück zum ursprünglichen User wechsle, spielt der Stream an genau der Stelle weiter, wo ich vorher weggesprungen bin. Stoppe ich dann mittels mpc stop den mpd läuft der Ton noch eine gute Weile weiter...
Ich vermute jetzt, dass es daran liegt, dass der Puffer von rtp-recv noch leergespielt wird.

Jetzt frage ich mich, ob es bei pulseaudio eine Möglichkeit gibt, den RTP-Stream-Empfang zu stoppen, wenn der User inaktiv wird (Stichwort loginctl... ) und wieder auf Empfang zu setzen, wenn der User wieder aktiv wird.
suspend-on-idle ist es ja nicht...

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: RTP, MPD und Sound streamen

Beitrag von smutbert » 27.12.2016 22:45:37

Beim Videoabspielen kenne ich es beim VT-Switchen auch so, dass der versäumte Teil des Tones beim Zurückschalten nachgeholt zu werden scheint, aber irgenwie synchronisieren sich dann Ton und Bild wieder. Ist mir mit vlc schon ein paar Mal aufgefallen, aber da gings immer nur um relativ kurze Zeitspannen auf dem anderen VT - ich muss das noch einmal ausprobieren und aufpassen wie sich das genau verhält.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: RTP, MPD und Sound streamen

Beitrag von scientific » 27.12.2016 23:13:10

Wie es sich genau verhält, hab ich auch noch nicht rausgefunden.

Jetzt ist mir aber grad aufgefallen, dass danach auch der Ton verspätet einsetzt, wenn ich mpc stop und dann wieder mpc play abgesetzt habe. Scheint so, als ob der Stream dann überhaupt zeitversetzt wird.
Synchron wird es erst wieder, wenn ich killall pulseaudio als root ausführe.

Und soeben bemerke ich, dass atop für den Prozess gnome-shell zwischen 100% und 160% CPU-Last (2 Kerne!) anzeigt, sobald ich einen RTP-Stream von pulseaudio (mpd) zu pulseaudio (user) starte. Die CPU-Last geht auch nicht mehr zurück, wenn ich die Prozesse pulseaudio und mpd kille. Auch pasystray zu beenden ändert nix. Nur ein Restart der gnome-shell mit <Alt>+<F2> und r senkt die CPU-Last von gnome-shell...

Irgendwie funktioniert das alles nicht so, wie ich es gerne hätte...

[EDIT]
Ich korrigiere... pavucontrol hatte ich noch laufen. Das hat die hohe CPU-Last verursacht... :/

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten