Přenos zvuku po síti (PulseAudio)
Přenášet v GNU/Linuxu obraz z jednoho počítače na druhý není žádná věda. Prostě se připojíme na vzdálený server pomocí SSH a spustíme na něm nějakou GUI aplikaci – okno se nám ukáže hezky na našem desktopu a můžeme s aplikací v klidu pracovat. Obraz bychom tedy měli, ale co zvuk? S ním nám pomůže právě PulseAudio.
PulseAudio je zvukový server pro POSIXové systémy (a Windows). V současných GNU/Linuxových distribucích se hojně používá, takže ho na počítači dost možná máte a ani o tom nevíte.
Základní pojmy:
- Server – počítač, ke kterému jsou připojené reproduktory a na kterém chceme přehrávat zvuk.
- Klient – počítač, který bude zdrojem zvuku, máme tu např. MP3 nebo filmy, zde spustíme přehrávač.
- Cookie – soubor obsahující nějaká data – slouží jako klíč, kterým se klient prokazuje serveru (aby nám tam někdo neoprávěný nepřehrával zvuky).
V následujícím návodu budeme předpokládat, že PulseAudio běží jako uživatelský proces (ne systémový démon).
Ruční zprovoznění síťového zvuku
Na serveru spustíme PulseAudio se síťovým modulem a povolíme nelokální spojení.
(všechny příkazy spouštíme jako neprivilegovaný uživatel)
$ pulseaudio --kill
$ pulseaudio -D -L module-native-protocol-tcp
Zkontrolujeme si, že PulseAudio skutečně naslouchá:
$ netstat -tlpn | grep 4713
tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN 4588/pulseaudio tcp6 0 0 :::4713 :::* LISTEN 4588/pulseaudio
(pokud používáme firewall, povolíme připojení z klienta na daný port serveru).
Zkopírujeme cookie soubor ~/.pulse-cookie
ze serveru na klienta. (Jinak bychom dostali na straně klienta chybu: Unable to connect: Access denied
.)
Na straně klienta si nastavíme proměnnou, obsahující jméno nebo IP adresu serveru:
$ export PULSE_SERVER="ip.adresa.serveru"
A to je vše. Teď si prostě na klientovi (ať už lokálně nebo přes SSH) spustíme přehrávač a zvuk uslyšíme z reproduktorů serveru. Např.:
$ vlc "Nějaký pěkný film.avi"
Další možnost je, „protunelovat“ TCP port PulseAudia ze serveru na klienta – pak nemusíme řešit firewally a nastavovat proměnnou. (Akorát musíme dát pozor, aby na klientovi neběžel PulseAudio démon, který by nám obsazoval tento port.)
$ ssh -R 4713:localhost:4713 klientský.počítač.cz
Teď už zbývá jen tenhle proces zautomatizovat a zjednodušit, ale o tom zase někdy příště…
Terminologie
Zdravím,
díky za fajn popis šikovného nástroje.
Jen mě trošku mate (nikoliv Ivo ;-)) použití termínů Server a Klient - asi bych je dle popsané funkce prohodil - připojuji se klientem k serveru, kde jsou uloženy data (zvuk)...
Každopádně díky za vynikající blog! Např. postřeh k Ústavě či Já, tužka!!!
Omluva
Sorry, nepochopení konceptu - web PulseAudio vše objasnil... Více klientů = více zdrojů, z kterých může server mixovat výsledný zvuk.
Opačně
jj, je to trochu nezvyklé – klient a server tu jsou obráceně, je to jako u X protokolu. X server nebo pulseaudio server běží obvykle na počítači, který je ze síťového hlediska klientem, zatímco program (např. přehrávač hudby) je z pohledu pulseaudia klientem, zatímco z pohledu SSH spojení je to server.
Chybička se vloudila
[pavel@ibm-pavel ~]$ pulseaudio --start -L module-native-protocol-tcp loopback=0
E: main.c: Too many arguments.
[pavel@ibm-pavel ~]$ pulseaudio --version
pulseaudio 0.9.21-26mdv2010.1
Mandriva Linux 2010.1 Spring Free.
Co s tím? Když vynechám "loopback=0", tak se server spustí, ale pak nic neslyším. Díky.
Vypadá to, že se trochu
pulseaudio --start -L
pulseaudio --start -L module-native-protocol-tcp loopback=0
vysledek: too many arguments
Viz komentář výše (pro
Viz komentář výše (pro jistotu jsem aktualizoval i text článku).