Ich habe Raspbian auf meinem Pi installiert und eine PulseAudio-Senke konfiguriert, um alle Audiodaten von meinem Desktop auf einen Pi zu streamen und die Lautsprecher anzutreiben.
Ich folgte dieser schönen Beschreibung: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124
Zunächst schien dies ohne Probleme zu funktionieren. Das vom Desktop gesendete Audio stottert jedoch ständig auf dem Pi, als ob es konstante Pufferunterläufe gäbe, wobei nur ein paar Samples dazwischen fehlen.
Ich habe den ganzen Tag versucht, die Ursache zu finden, aber ohne Erfolg. Das Grundsetup ist:
- Kabelgebundene LAN-Verbindung
- Neueste Raspbian Pi (26. September 2013) mit den neuesten Firmware-Updates
- PulseAudio 2.0 auf beiden Seiten (Ubuntu-Desktop)
- Wiedergabe über mplayer, totem, ffplay
- netzwerkübertragung via module-native-protocol-tcp
Das habe ich versucht:
- Das Abspielen von Audio direkt auf dem Pi funktioniert einwandfrei.
- Das Streamen auf andere (Desktop-) Computer funktioniert einwandfrei.
- Das Senden von Audiodaten mit einer direkten Verbindung (Angabe von $ PULSE_SERVER) funktioniert recht gut mit sehr wenig Ruckeln, ist aber immer noch anfällig für Problem-2 (siehe unten).
- Senden von Audio über den Desktop PulseAudio-Tunneln sorgt für ein konstantes Ruckeln
- Erhöhen der Prioritäten / Echtzeitplanung ... hat nicht geholfen
- Die Abtastrate auf 48 kHz festzulegen ... hat nicht geholfen
- Das Setzen des Resampling-Algorithmus auf "trivial" ... hat nicht geholfen
- Das Anpassen von Standard-Fragmenten / Fragment-Größe ... hat nicht geholfen
Ich kann keine Hinweise auf ein Problem in den PulseAudio-Protokollen finden (angezeigt ab dem Zeitpunkt, an dem ich mit der Wiedergabe begonnen habe):
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun. D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking D: [pulseaudio] sink.c: Suspend cause of sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo is 0x0000, resuming I: [alsa-sink] alsa-sink.c: Trying resume... I: [alsa-sink] alsa-util.c: cannot disable ALSA period wakeups D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 341 ms D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples), period size second (to 16384 samples). I: [alsa-sink] alsa-util.c: ALSA period wakeups were not disabled D: [alsa-sink] alsa-sink.c: Latency set to 25.00ms D: [alsa-sink] alsa-sink.c: hwbuf_unused=60736 D: [alsa-sink] alsa-sink.c: setting avail_min=15665 I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 15.00ms I: [alsa-sink] alsa-sink.c: Resumed successfully... I: [alsa-sink] alsa-sink.c: Starting playback. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo becomes busy. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] ratelimit.c: 115 events suppressed D: [alsa-sink] alsa-sink.c: Wakeup from ALSA! ... no more output, but stuttering continues ...
Problem 2: Wie oben gesagt, kann ich mit einer direkten Verbindung ganz ok Audio bekommen. Nach einigen Sprüngen im Stream (mit mplayer) bleibt der PulseAudio-Server jedoch hängen und gibt überhaupt kein Audio wieder. Manchmal kann es durch einen Neustart von mplayer wiederbelebt werden. Manchmal hängt es so stark, dass PulseAudio neu gestartet werden muss. Manchmal hängt es sogar, wenn ich nur die Lautstärke ändere.
Laut den PulseAudio-Dokumenten besteht der Vorteil einer direkten Verbindung gegenüber einer getunnelten Verbindung in einer besseren Puffersteuerung. Dies scheint darauf hinzudeuten, warum ich mit der direkten Verbindung gute Audiodaten erhalte: http://www.freedesktop.org/wiki/Software / PulseAudio / Dokumentation / Benutzer / Netzwerk /
Ich habe jetzt keine Ideen mehr. Was könnte das Ruckeln und Problem 2 verursachen? Nur eine Idee, wie das Debuggen weitergehen soll, wäre ebenfalls wünschenswert.