Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
project:audio_streaming [2016/08/30 21:33] dron |
project:audio_streaming [2016/09/01 00:49] dron |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Audio streming ====== | ====== Audio streming ====== | ||
- | Základní motivace tohoto projektu je realizace audio streamu ze stage do studia na jednom milém malém festivalu (Letní zvěř 2016). Nicméně tyto principy lze použít kdykoli na cokoli... | + | |**Project owner:**| [[user:dron]] | |
+ | |**Interested:** | | | ||
+ | |**Related:**| | | ||
+ | | **License:** | [[https://creativecommons.org/licenses/by-sa/3.0/|Uveďte původ-Zachovejte licenci CC BY-SA]] | | ||
- | TODO... | + | Základní motivace tohoto projektu je realizace audio streamu ze stage do studia na jednom milém malém festivalu (Letní zvěř 2016). Nicméně tyto principy lze použít kdykoli na cokoli... |
===== Setup ===== | ===== Setup ===== | ||
- | Tohle se týká konkrétně Letné zvěře a musí se to doplnit. TODO | + | Možností a nástrojů jak dostat audio z jednoho místa na druhé je spousta. Zde několik, o kterých vím (určitě to nebude úplný seznam, klidně doplňte...). Samozřejmě se bavím pouze o otevřených systémech a aplikacích... |
+ | |||
+ | * PulseAudio - tento audioserver umí přímo vytvářet a připojovat vzdálené zdroje audio signálu. S úspěchem používám, ale na kabelu. Audio posílám nekomprimovaně, což je náročné na šířku pásma a chybovost média. Dost pravděpodobně naprosto nevhodné pro bezdrát (ale netestováno...) | ||
+ | * IceCast - stremingový server. Umí streamovat enkodované audio mnoha připojeným klientům pomocí http. | ||
+ | |||
+ | Co se týče konkrétně Letní zvěře, tak to zkusíme udělat s IceCastem a posléze se uvidí, jestli to bylo dobré řešení... | ||
* Stage: | * Stage: | ||
* audio výstup z mixu, line-out | * audio výstup z mixu, line-out | ||
- | * PC bazmek s line-in vstupem (digitalizace, streaming) | + | * <del>PC bazmek s line-in vstupem</del> Raspberry PI s externí USB zvukovkou (digitalizace, streaming) |
* WiFi client | * WiFi client | ||
* Studio: | * Studio: | ||
Line 22: | Line 30: | ||
Nejjednodušší setup je klient - AP, ale aktuálně použijeme setup původně určený pro UfoBufo2016, což je na třech TP-Link TL-WDR4300 a OpenWRT postavené WDS. Milé je, že LAN porty jsou probridgeované s WLAN, tak stačí APčka zapnout a připojit na každé straně jedno PC (Stage a studio). Detailně popíšu jindy... TODO | Nejjednodušší setup je klient - AP, ale aktuálně použijeme setup původně určený pro UfoBufo2016, což je na třech TP-Link TL-WDR4300 a OpenWRT postavené WDS. Milé je, že LAN porty jsou probridgeované s WLAN, tak stačí APčka zapnout a připojit na každé straně jedno PC (Stage a studio). Detailně popíšu jindy... TODO | ||
+ | |||
+ | ==== Adresace ==== | ||
+ | |||
+ | * WDS používá subnet 10.0.0.0/21 (255.255.248.0) | ||
+ | * 3 AP mají adresy 10.0.0.1 - 3 | ||
+ | * PC Stage bude staticky 10.0.0.10/21 | ||
+ | * PC Studio bude staticky 10.0.0.11/21 | ||
===== Stage ===== | ===== Stage ===== | ||
Line 27: | Line 42: | ||
Na stage bude PC s Line-in vstupem z mixu. Budeme zde típat input source a posílat do ices, který to bude enkodovat a stremovat na druhou stranu do studia. | Na stage bude PC s Line-in vstupem z mixu. Budeme zde típat input source a posílat do ices, který to bude enkodovat a stremovat na druhou stranu do studia. | ||
+ | V Linuxu existuje docela dost audio serverů... Zmíním nastavení pro dva | ||
+ | ==== Alsa sound ==== | ||
+ | Tohle se bude týkat spíše varianty s RB Pi (a externí zvukovkou). | ||
+ | |||
+ | <code> | ||
+ | lsusb | ||
+ | lsmod | grep snd.usb.audio | ||
+ | </code> | ||
+ | |||
+ | Vypsání audio výstupů | ||
+ | |||
+ | <code> | ||
+ | aplay -l | ||
+ | </code> | ||
+ | |||
+ | Vypsání audio vstupů | ||
+ | |||
+ | <code> | ||
+ | arecord -l | ||
+ | </code> | ||
+ | |||
+ | Je potřeba si poznačit Card a Device numbers - alsa device ja pak označeno jako ''hw:Card,Device'' (např. ''hw:0,1''). | ||
+ | |||
+ | Nainstalujeme a připravíme config Ices (pozor na řádek ''<param name="device">hw:0,1</param>''). | ||
+ | |||
+ | <code> | ||
+ | yum install ices | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | nano /etc/ices.conf | ||
+ | </code> | ||
+ | |||
+ | <file> | ||
+ | <?xml version="1.0"?> | ||
+ | <ices> | ||
+ | <!-- run in background --> | ||
+ | <background>1</background> | ||
+ | <!-- where logs, etc go. --> | ||
+ | <logpath>/var/log/ices</logpath> | ||
+ | <logfile>ices.log</logfile> | ||
+ | <!-- 1=error,2=warn,3=info,4=debug --> | ||
+ | <loglevel>4</loglevel> | ||
+ | <!-- set this to 1 to log to the console instead of to the file above --> | ||
+ | <consolelog>0</consolelog> | ||
+ | |||
+ | <!-- optional filename to write process id to --> | ||
+ | <!-- <pidfile>/home/ices/ices.pid</pidfile> --> | ||
+ | |||
+ | <stream> | ||
+ | <!-- metadata used for stream listing (not currently used) --> | ||
+ | <metadata> | ||
+ | <name>Letni zver main stage stream</name> | ||
+ | <genre>Psychedelic</genre> | ||
+ | <description>Live stream from main stage of Letni zver 2016 festival...</description> | ||
+ | </metadata> | ||
+ | |||
+ | <input> | ||
+ | <module>alsa</module> | ||
+ | <param name="rate">44100</param> | ||
+ | <param name="channels">2</param> | ||
+ | <param name="device">hw:0,1</param> | ||
+ | <param name="periods">2</param> | ||
+ | <param name="buffer-time">500</param> | ||
+ | </input> | ||
+ | |||
+ | <instance> | ||
+ | <!-- icecast server, kam budeme audio posilat --> | ||
+ | <hostname>10.0.0.11</hostname> | ||
+ | <port>8000</port> | ||
+ | <password>heslo</password> | ||
+ | <mount>/letnizver.ogg</mount> | ||
+ | <reconnectdelay>2</reconnectdelay> | ||
+ | <reconnectattempts>5</reconnectattempts> | ||
+ | <maxqueuelength>80</maxqueuelength> | ||
+ | <encode> | ||
+ | <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps --> | ||
+ | <samplerate>44100</samplerate> | ||
+ | <channels>2</channels> | ||
+ | </encode> | ||
+ | </instance> | ||
+ | |||
+ | </stream> | ||
+ | </ices> | ||
+ | </file> | ||
+ | |||
+ | a spustíme ices | ||
+ | |||
+ | <code> | ||
+ | ices /etc/ices.conf | ||
+ | </code> | ||
+ | |||
+ | ==== Pulse audio ==== | ||
+ | Situace spíše s plnotučnou moderní Linuxovou distribucí (např. Fedora). | ||
+ | |||
+ | <code> | ||
+ | yum install paman ices | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | nano /etc/ices.conf | ||
+ | </code> | ||
+ | |||
+ | <file> | ||
+ | <?xml version="1.0"?> | ||
+ | <ices> | ||
+ | <!-- run in background --> | ||
+ | <background>0</background> | ||
+ | <!-- where logs, etc go. --> | ||
+ | <logpath>/var/log/ices</logpath> | ||
+ | <logfile>ices.log</logfile> | ||
+ | <!-- 1=error,2=warn,3=info,4=debug --> | ||
+ | <loglevel>4</loglevel> | ||
+ | <!-- set this to 1 to log to the console instead of to the file above --> | ||
+ | <consolelog>0</consolelog> | ||
+ | |||
+ | <!-- optional filename to write process id to --> | ||
+ | <!-- <pidfile>/home/ices/ices.pid</pidfile> --> | ||
+ | |||
+ | <stream> | ||
+ | <!-- metadata used for stream listing (not currently used) --> | ||
+ | <metadata> | ||
+ | <name>Letni zver main stage stream</name> | ||
+ | <genre>Psychedelic</genre> | ||
+ | <description>Live stream from main stage of Letni zver 2016 festival...</description> | ||
+ | </metadata> | ||
+ | |||
+ | <input> | ||
+ | <module>stdinpcm</module> | ||
+ | <param name="rate">44100</param> | ||
+ | <param name="channels">2</param> | ||
+ | </input> | ||
+ | |||
+ | <instance> | ||
+ | <!-- icecast server, kam budeme audio posilat --> | ||
+ | <hostname>10.0.0.11</hostname> | ||
+ | <port>8000</port> | ||
+ | <password>heslo</password> | ||
+ | <mount>/letnizver.ogg</mount> | ||
+ | <reconnectdelay>2</reconnectdelay> | ||
+ | <reconnectattempts>5</reconnectattempts> | ||
+ | <maxqueuelength>80</maxqueuelength> | ||
+ | <encode> | ||
+ | <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps --> | ||
+ | <samplerate>44100</samplerate> | ||
+ | <channels>2</channels> | ||
+ | </encode> | ||
+ | </instance> | ||
+ | |||
+ | </stream> | ||
+ | </ices> | ||
+ | </file> | ||
+ | |||
+ | Nyní je potřeba zjistit, jaký source (vstup) budeme streamovat. Zajímá nás název source (druhý sloupec, např. ''alsa_input.pci-0000_00_1b.0.analog-stereo''). | ||
+ | |||
+ | <code> | ||
+ | pactl list short sources | ||
+ | </code> | ||
+ | |||
+ | Poznámka: Pokud má source příponu ''.monitor'', tak se jedná o monitor (odposlech) toho, co hraje na odpovídajícím výstupu. | ||
+ | |||
+ | Poznámka: Pokud bychom chtěli posílat přímo výstup nějaké konkrétní, audio výstup produkující, aplikace, tak viz. [[https://wiki.archlinux.org/index.php/PulseAudio/Examples#Monitor_specific_output]] | ||
+ | |||
+ | Ices nemá podporu přímo pro Pulseaudio, ale lze to obejít pomocí modulu stdinpcm a posíláním audia do stdin ices. | ||
+ | |||
+ | <code> | ||
+ | parec -d alsa_input.pci-0000_00_1b.0.analog-stereo --raw | ices /etc/ices.conf | ||
+ | </code> | ||
+ | |||
+ | ==== Debug ==== | ||
+ | |||
+ | <code> | ||
+ | tail -f /var/log/ices/ices.log | ||
+ | </code> | ||
===== Studio ===== | ===== Studio ===== | ||
Line 120: | Line 309: | ||
<code> | <code> | ||
- | systemctl start icecast | + | service icecast start |
</code> | </code> | ||
- | a bacha na firewall... | + | a bacha na firewall... (stopnout, nebo povolit přístup na port 8000/tcp) |
- | Stream je pak dostupný na lokální adrese a portu 8000 např. přes browser. | + | <code> |
+ | service firewalld stop | ||
+ | </code> | ||
- | ===== Poznámky ===== | + | nebo |
+ | <code> | ||
+ | service iptables stop | ||
+ | </code> | ||
+ | Stream je pak dostupný na lokální adrese a portu 8000 např. přes browser. | ||
+ | Tento setup stačí pro stremování audia mnoha dalším uživatelům - záleží na dosažitelnosti adresy icecast serveru. | ||
- | Tohle je jen dočasný bordel z předchozího pokusu. Protřídit TODO... | + | Pokud chceme stream přehrát přímo na icecast serveru, pak např. utilitkou ogg123 (mpg123, mplayer,...) |
- | + | ||
- | + | ||
- | instalace na labkovy centos6 | + | |
<code> | <code> | ||
- | yum install pulseaudio-utils icecast | + | ogg123 http://10.0.0.11:8000/letnizver.ogg |
- | yum localinstall ftp://ftp.pbone.net/mirror/li.nux.ro/download/nux/dextop/el6/i386/ices-2.0.1-10.el6.nux.i686.rpm | + | |
</code> | </code> | ||
+ | ==== Debug ==== | ||
+ | Poslouchá icecast na portu 8000? | ||
<code> | <code> | ||
- | /etc/ices.conf | + | netstat -lntp |
</code> | </code> | ||
<file> | <file> | ||
- | <input> | + | ... |
- | <module>stdinpcm</module> | + | tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3070/icecast |
- | <param name="rate">44100</param> | + | ... |
- | <param name="channels">2</param> | + | </file> |
- | <param name="metadata">1</param> | + | |
- | <param name="metadatafilename">/home/ices/metadata</param> | + | |
- | </input> | + | |
+ | A co se děje v logu? | ||
- | <instance> | + | <code> |
- | <hostname>stream.slu.cz</hostname> | + | tail -f /var/log/icecast/*.log |
- | <port>8000</port> | + | </code> |
- | <password>********</password> | + | |
- | <mount>/dron.ogg</mount> | + | |
- | <reconnectdelay>2</reconnectdelay> | + | |
- | <reconnectattempts>5</reconnectattempts> | + | |
- | <maxqueuelength>80</maxqueuelength> | + | |
- | <encode> | + | |
- | <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps --> | + | |
- | <samplerate>44100</samplerate> | + | |
- | <channels>2</channels> | + | |
- | </encode> | + | |
- | </instance> | + | |
- | </file> | + | |
+ | ===== Poznámky ===== | ||
- | spustit paman, Devices, najit odpovidajici sink, dat Properties, a zkopirovat si radek Monitor Source. | + | Tohle je jen dočasný bordel z předchozího pokusu. Protřídit TODO... |
- | pak tento source preposleme do ices (a ten to enkodne a posle do icecastu) | ||
- | <code> | + | instalace na labkovy centos6 |
- | parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor --raw | ices /etc/ices.conf | + | |
- | </code> | + | |
<code> | <code> | ||
- | yum install pulseaudio-utils paman ices icecast | + | yum install pulseaudio-utils icecast |
+ | yum localinstall ftp://ftp.pbone.net/mirror/li.nux.ro/download/nux/dextop/el6/i386/ices-2.0.1-10.el6.nux.i686.rpm | ||
</code> | </code> | ||
- | seznam sinku | + | seznam sinku na starsi verzi pactl |
<code> | <code> | ||
Line 197: | Line 376: | ||
alsa_input.pci-0000_00_1b.0.analog-stereo | alsa_input.pci-0000_00_1b.0.analog-stereo | ||
</file> | </file> | ||
- | |||
- | <code> | ||
- | parec -d alsa_input.pci-0000_00_1b.0.analog-stereo --raw | ices /etc/ices.conf | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
===== Links ===== | ===== Links ===== | ||
* [[http://icecast.org/]] | * [[http://icecast.org/]] | ||
+ | * [[http://icecast.org/ices/docs/ices-2.0.2/inputs.html]] Nastavení Ices2 vstupů | ||
* [[https://openwrt.org/]] | * [[https://openwrt.org/]] | ||
+ | * [[https://rudd-o.com/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users]] | ||