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
# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713
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:
> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.
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
# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours
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
# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0
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ów pulse-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
i passwd
też to zrobić). Więc (jako root lub sudo):
chmod u+s /usr/bin/pulseaudio
Nie ma pulse-rt
grupy utworzonej, gdy pulseaudio jest zainstalowany na Raspbian, więc:
groupadd pulse-rt
To da ci gid jak 1003. Dodaj (np.) Użytkownika pi do tej grupy:
usermod -aG pulse-rt pi
Ale na Raspbian nadal nie będziesz mógł się odświeżyć jak pi. W tym celu dodaj do /etc/security/limits.conf
:
@pulse-rt hard nice -20
@pulse-rt soft nice -20
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 w top
).
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 potrzebujesz mpg123-plugins-pulseaudio
pakietu. Do flashowania w przeglądarce (np. Youtude) potrzebujesz alsa-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:
load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1
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ć odpowiedni sink_name
do module-alsa-sink
linii default.pa
tam:
load-module module-alsa-sink device=hw:0,0 sink_name=bcm1
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 instalacja apt-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.