Pozor museum: Toto je archivní verze blogu. Pro vkládání komentářů přejděte na tento článek v nové verzi blogu.

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

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ě…

Průměr: 5 (3 hlasů)

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

Vypadá to, že se trochu změnila syntaxe. U mě funguje:
pulseaudio -D -L module-native-protocol-tcp

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).