FK~

Moje odkazy

Ostatní odkazy

Close Windows
Nenajdete mě na Facebooku ani Twitteru
Rozpad EU
Jsem členem FSF
There Is No Cloud …just other people's computers.
Sane software manifesto / Manifest příčetného softwaru

Přenos zvuku po síti (PulseAudio)

vydáno: 14. 9. 2009 22:11, aktualizováno: 18. 7. 2020 13:27

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

Témata: [GNU/Linux]

Komentáře čtenářů


Iggy, 28. 10. 2009 16:46, Terminologie [odpovědět]

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!!!


Iggy, 28. 10. 2009 16:54, Omluva [odpovědět]

Sorry, nepochopení konceptu - web PulseAudio vše objasnil... Více klientů = více zdrojů, z kterých může server mixovat výsledný zvuk.


xkucf03, 29. 10. 2009 00:29, Opačně [odpovědět]

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.


Cigydd, 12. 9. 2010 02:25, Chybička se vloudila [odpovědět]

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


xkucf03, 12. 9. 2010 10:31, Vypadá to, že se trochu [odpovědět]
Vypadá to, že se trochu změnila syntaxe. U mě funguje:
pulseaudio -D -L module-native-protocol-tcp

Anonym, 7. 3. 2011 14:27, pulseaudio --start -L [odpovědět]

pulseaudio --start -L module-native-protocol-tcp loopback=0 vysledek: too many arguments


xkucf03, 7. 3. 2011 21:32, Viz komentář výše (pro [odpovědět]

Viz komentář výše (pro jistotu jsem aktualizoval i text článku).


Franta, 27. 4. 2015 21:51, Linkový vstup [odpovědět]

BTW: přehrávání audia z linkového vstupu (line-in):

pactl load-module module-loopback

případně ho zase vypneme:

pactl unload-module module-loopback

výpis výstupů:

pactl list sinks

aktivace ALSA výstupu:

pactl load-module module-alsa-sink

výběr výchozího výstupu:

pactl set-default-sink 2

(číslo z výpisu výše)

Přidat komentář

reagujete na jiný komentář (zrušit)
jméno nebo přezdívka
název příspěvku
webová stránka, blog
e-mailová adresa
nápověda: možnosti formátování
ochrana proti spamu a špatným trollům

Náhled komentáře