Zainstalowałem Raspbian na moim Pi i skonfigurowałem zlew PulseAudio z zamiarem przesyłania strumieniowego całego dźwięku z mojego pulpitu do Pi, napędzając głośniki.
Postępowałem zgodnie z tym ładnym opisem: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124
Początkowo wydawało się, że działa bez problemu. Jednak dźwięk wysyłany z pulpitu ciągle się zacina na Pi, tak jakby istniały ciągłe niedopełnienia bufora, a pomiędzy nimi brakowało tylko kilku próbek.
Cały dzień szukałem przyczyny, ale bezskutecznie. Podstawowa konfiguracja to:
- przewodowe połączenie LAN
- najnowsze Raspbian pi (26 września 2013) z najnowszymi aktualizacjami oprogramowania
- PulseAudio 2.0 po obu stronach (komputer Ubuntu)
- Odtwarzanie przez mplayer, totem, ffplay
- transmisja sieciowa przez moduł-natywny-protokół-tcp
Oto, co próbowałem:
- Odtwarzanie dźwięku bezpośrednio na Pi działa idealnie.
- Przesyłanie strumieniowe do innych komputerów (stacjonarnych) działa dobrze.
- Wysyłanie dźwięku za pomocą bezpośredniego połączenia (określając $ PULSE_SERVER) działa całkiem dobrze przy bardzo niewielkim jąkaniu, ale nadal jest podatne na problem-2 (patrz poniżej)
- Wysyłanie dźwięku za pośrednictwem pulpitu Tunelowanie PulseAudio zapewnia ciągłe jąkanie
- Zwiększenie priorytetów / planowania w czasie rzeczywistym ... nie pomogło
- Naprawienie częstotliwości próbkowania do 48 kHz ... nie pomogło
- Ustawienie algorytmu ponownego próbkowania na „trywialny” ... nie pomogło
- Dostosowanie domyślnych fragmentów / rozmiaru fragmentów ... nie pomogło
Nie mogę znaleźć żadnych oznak problemu w dziennikach PulseAudio (pokazanych od momentu rozpoczęcia odtwarzania):
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: jak powiedziano powyżej, mogę uzyskać całkiem niezły dźwięk z bezpośrednim połączeniem. Jednak po kilku przeskokach w strumieniu (przy użyciu mplayera) serwer PulseAudio zawiesza się i nie odtwarza żadnego dźwięku. Czasami można go przywrócić, uruchamiając ponownie mplayera. Czasami zawiesza się tak źle, że należy ponownie uruchomić PulseAudio. Czasami nawet zawiesza się, gdy zmieniam tylko poziom głośności.
Według dokumentów PulseAudio zaletą bezpośredniego połączenia nad tunelowanym połączeniem jest lepsza kontrola buforowania, co wydaje się wskazywać, dlaczego otrzymuję dobry dźwięk z bezpośrednim połączeniem: http://www.freedesktop.org/wiki/Software / PulseAudio / Documentation / User / Network /
Nie mam już pomysłów. Co może powodować jąkanie i problem 2? Doceniony zostanie również pomysł, jak kontynuować debugowanie.