Próbuję skonfigurować zlew PulseAudio na moim Raspberry Pi, aby przesyłać strumieniowo wszystkie dźwięki systemowe z mojego komputera. Jak najlepiej to zrobić?
Na przykład, czy można oglądać filmy, czy opóźnienie jest zbyt duże? Próbowałem tego jakiś czas temu przy użyciu gstreamer, ale z opóźnieniem około 2 sekund, co jest bezużyteczne dla moich wymagań.
Odpowiedzi:
Te oficjalne instrukcje dotyczące tworzenia „bezpośrednie połączenie” na sieć z nadzieją po prostu pracować dla większości ludzi, ale wydaje PulseAudio i nie dogadać tak dobrze: zajęło mi godzin . [Oprócz „bezpośredniego połączenia” możesz również użyć metody „tunelowej” opisanej w dalszej części, ale najpierw zalecamy przeczytanie tego.]
Mam teraz pulpit (fedora 17) przesyłający strumieniowo dźwięk do pi. Zminimalizowałem
/etc/pulse
pliki konfiguracyjne po obu stronach. Po stronie pulpitu:/etc/pulse/client.conf
Adres LAN mojej pi z domyślnym portem pulseaudio. Ale oto coś, co sprawiło, że pomyliłem się przez chwilę - przy określonym serwerze pulseaudio nawet się nie uruchomi:
Będzie działał na pierwszym planie (prawdopodobnie dlatego, że nie odczytuje wtedy puls-client.conf?). Jak się jednak okazuje, wcale nie trzeba go uruchamiać po stronie pulpitu (wysyłania) , co nie zostało zapisane w dokumentach pulseaudio. Korzystanie z
lsof -i -P
niego wydaje się, że działają wtyczki niższego poziomu dla różnych odtwarzaczy multimedialnych.Tak więc ten wiersz „client.conf” to właściwie wszystko, czego potrzebujesz po stronie komputera / klienta, jeśli wszystko, co zamierzasz zrobić, to korzystać z sieci (ale patrz „Jeszcze więcej komplikacji” poniżej).
Chociaż demon pulseaudio (po stronie odbierającej / serwera) może być uruchamiany jako usługa systemowa, twórcy pulsu odradzają go , aw rzeczywistości na pi skrypt skryptowy inicjuje tylko ostrzeżenie: wciąż musisz uruchomić samemu. Fedora nie zawiera nawet wpisu usługi rozruchu systemowego.
Dlatego po stronie pi powinieneś jawnie uruchomić i zatrzymać proces serwera pulseaudio, tak skonfigurowany:
/etc/pulse/daemon.conf
Możesz użyć -1,
exit-idle-time
aby utrzymać działanie demona przez czas nieokreślony. Uważaj, to sekunda, a domyślnie 20 (co oznacza, że „tajemniczo” umiera, jeśli tego nie ustawisz)./etc/pulse/default.pa
Ponieważ jest to aplikacja sieciowa, uruchamianie jej jako root nie jest dobrym pomysłem. Jednak, jak wspomniano powyżej
man pulseaudio
, dobrym pomysłem jest również „powtórzenie” procesu, aby nadać mu wyższy priorytet. Możesz to zrobić ręcznie za pomocąnice
, ale pulseaudio zrobi to automatycznie dla roota lub członkówpulse-rt
grupy, jeśli plik wykonywalny jest „setuid”, co oznacza, że może korzystać z niektórych uprawnień roota, a następnie przejść do właściwego nieuprzywilejowanego identyfikatora użytkownika (ping
ipasswd
też to zrobić). Więc (jako root lub sudo):Nie ma
pulse-rt
grupy utworzonej, gdy pulseaudio jest zainstalowany na Raspbian, więc:To da ci gid jak 1003. Dodaj (np.) Użytkownika pi do tej grupy:
Ale na Raspbian nadal nie będziesz mógł się odświeżyć jak pi. W tym celu dodaj do
/etc/security/limits.conf
:Musisz faktycznie zalogować się przed wprowadzeniem tych zmian; jeśli używasz ssh z pi, po prostu użyj
login
. Teraz możesz uruchomić pulseaudio, a ono zrestartuje się -11, co jest prawdopodobnie wyższym priorytetem niż większość innych procesów (spójrz na wartość NICE wtop
).Podczas odtwarzania dźwięku przesyłanego strumieniowo z sieci pulseaudio na pi zużywa około 10% procesora i trywialną ilość pamięci. :) To i mój pulpit są w przewodowej sieci LAN; strumienie impulsów surowe dane pcm (wierzę), więc wykorzystanie przepustowości odpowiada częstotliwości próbkowania źródła, 1 kB / s i więcej. Niestety, podczas oglądania wideo zauważalne jest opóźnienie w dźwięku.
Jeszcze więcej komplikacji ...
Niestety żadna z różnych aplikacji dźwiękowych z mojego komputera nie działała od razu;
mpg123
w ogóle by nie działał. W tym celu w Fedorze potrzebujeszmpg123-plugins-pulseaudio
pakietu. Do flashowania w przeglądarce (np. Youtude) potrzebujeszalsa-plugins-pulseaudio
(to właśnie łączy się ze zdalnym serwerem). Inne dystrybucje powinny mieć podobne pakiety. Jeśli korzystałeś wcześniej z pulseaudio (nie byłem), być może już je zainstalowałeś.Dzwonki i gwizdki pulpitu KDE również nie działały. Jest to trudniejszy problem do rozwiązania, ponieważ szuka lokalnego serwera pulseaudio, a zgodnie z opisem, użycie bezpośredniego połączenia oznacza, że żaden serwer nie może być uruchomiony lokalnie. Można to zrobić za pomocą metody „tunelowej”.
moduł-zlew-tunel
Jest to inny sposób wspomniany w dokumentach pulseaudio. W takim przypadku masz serwer działający po obu stronach i jedną rękę do drugiej. Aby to zrobić, skomentuj „serwer domyślny”
/etc/client.conf
i dodaj lokalny/etc/default.pa
zawierający:Jeśli nie włożysz
sink_name
, pulseaudio nie uruchomi się.sink
Odnosi się do nazwy zlewozmywaka z boku pi, która następnie musi także nazwę; dodać odpowiednisink_name
domodule-alsa-sink
liniidefault.pa
tam:Uruchom serwer po obu stronach i ... presto. Podczas gdy wszystko, łącznie z sygnałami dźwiękowymi KDE, było teraz przenoszone, odtwarzanie w przeglądarce flash mocno się zacięło. Jednak w innym środowisku pulpitu (właściwie tylko menedżer okien, fvwm) było w porządku.
Lubię KDE, ale mogę żyć bez sygnałów dźwiękowych, więc na razie pozostanę przy bezpośrednim połączeniu.
Rozwiązywanie problemów
Jeśli masz problemy, korzystanie
pulseaudio -vvvv --log-level=debug
z pi zapewnia wiele komunikatów do debugowania. Początkowo, gdy nie mogłem uzyskać dźwięku na pi, zgłosił problem „związany z błędem w sterowniku ALSA bcm2835”, który wydawał mi się dziwny, ponieważ dźwięk był w porządku tylko z alsa, i jestem pewien, że istnieje oprogramowanie pi, które zależy na pulseaudio -apt-get remove pulseaudio
a ponowna instalacjaapt-get install pulseaudio
wydawała się to naprawić ... Nie jest to rozwiązanie, które lubię widzieć, ale hej, przynajmniej teraz mogę słuchać tish bez konieczności podłączania głośników do każdego urządzenia. Przeważnie.źródło