Linux E X P R E S

Facebook

VLC a streamování DVB-T v domácí síti

player-icon_1.jpg

VLC media player svými schopnostmi vybočuje z řady multimediálních přehrávačů. Jedná se o open source projekt na jehož vývoji intenzivně pracuje mnoho lidí z celého světa. Přehrávání běžných multimediálních souborů mu nečiní problém, dnes si však pomocí VLC zprovozníme streamování DVB v domácí síti.


V úvodu návodu vás raději upozorním na několik skutečností:

  • GUI programu je samozřejmě vhodné pro přehrávání a lze jej použít i pro základní streamování,
  • ani ve verzi 2.0.8 vám GUI nikterak nedopomůže k pokročilému streamování (snad další verze), jakým je například provoz DVB na síti – pokročilé streamy ovládnete rychle a pohodlně pomocí základních textových editorů (gedit, kwrite) a příkazového řádku,
  • vzdálené ovládání VLC je sice možné přes web a telnet , ale tyto funkce jsou možnostmi omezené a je lepší použít externí aplikace.

Neodradil-li jsem vás úvodem o nedokonalosti VLC, získáte tímto návodem povědomost jednoduchého ovládání streamů v domácí síti. Uvedeným způsobem streamuji DVB-T v domácích podmínkách necelý rok téměř bez problémů.

Předpoklady pro tento návod:

  • fungující domácí síť – nezáleží na tom, zda je použito aktivního prvku (router, switch), nebo se jedná o ad-hoc propojení mezi počítači, 
  • znalost hesla uživatele a IP adresy počítače (serveru), ze kterého VLC vysílá,
  • zprovozněný DVB-T tuner – možnost, jak zprovoznit tuner, naleznete zde,
  • nainstalované aplikace na serveru (klidně i počítač v pracovně) – VLC, w-scan, OpenSSH, screen; na klientech – VLC, PuTTY.

Přehrávání DVB-T obsahu (lokálně)

VLC nedokáže automaticky prohledat frekvence tuneru a naladit TV/rádio stanice. Je potřeba mu k frekvencím dopomoci, například použitím utilitky w-scan, nebo ručním zadáním. Z tohoto plynou v podstatě dvě možnosti sledování DVB-T obsahu.

Nyní však otevřete příkazový řádek a zadejte:

w_scan -L > dvb-t.xspf

Získáte přehledný seznam skladeb pro aplikaci, jehož obsahem jsou všechny nalezené TV/rádio stanice. Načtením tohoto seznamu (Média>Otevřít soubor>dvb-t.xspf ) máte možnost sledovat jednotlivé programy. EPG sledovaného programu naleznete pod volbou Nástroje>Průvodce programem.

Seznam skladeb s názvy jednotlivých stanic je velmi obtížné vytvořit jiným způsobem, natož stvořit jej ve VLC samotném. Provoz tohoto seznamu skladeb skrývá drobný neduh. Chcete-li mít celkový přehled o vysílaných pořadech pomocí EPG, je nutné zhlédnout stanice, o jejichž pořady máte zájem (není nahrán celý multiplex). Informace z navštívených stanic se přidají do Průvodce programem.

Druhou možností sledování DVB obsahu je ruční zadání frekvence, které získáte z již vytvořeného seznamu skladeb. Postačí kliknout pravým tlačítkem myši na názvu stanice a zvolit Informace. V dolní části okna naleznete řádek Umístění, na jehož začátku (je skrytý, neboť je zde mnoho parametrů) naleznete frekvenci multiplexu (např. dvb-t://frequency=570000000). Tato podoba je shodná se zadáváním do příkazového řádku (hodnota v Hz), v GUI se ale frekvence zadávají v hodnotách kHz.

Z menu vyberte Média>Otevřít zachytávací zařízení. Následující obrázek vám pomůže s nastavením (jen frekvenci nahraďte zjištěnou hodnotou).

nastaveni_dvb

Tuner /dev/dvb/adaper0 – označuje první zapojený tuner (druhý bude adapter1 atd.).

Pokročilé možnosti – není nutné vyplňovat, VLC si tyto volby doplní automaticky.

Zobraz více možností – není potřeba upravovat, nastavuje se zde velikost vyrovnávací paměti a přidáním parametrů do spodního řádku je možné ovlivnit přístup k DVB obsahu.

Stiskem tlačítka Přehrát dojde k naladění celého multiplexu a zobrazení stanice, která má v tomto multiplexu nejnižší PID (identifikace programu). Nyní postup opakujte a zadejte další, vám dostupné frekvence. Po přehrání poslední zadané frekvence, bude váš Seznam skladeb podobný tomuto.

seznam_skladeb_frekvence

Již to není tak přehledný seznam, jako v prvním případě. Při pokročilém streamování nám však bude nápomocen, proto jej uložte jako „multiplex.xspf“ (Média>Uložit seznam skladeb). Při ukládání je vhodné zadávat název seznamu i s příponou (nespoléhejte na filtr formátů nad tlačítky Zrušit/Uložit). Další možné formáty pro seznamy skladeb jsou M3U, M3U8 a HTML.

Prohlížení jednotlivých stanic z tohoto seznamu skladeb je nyní možné pomocí menu Přehrávání>Program (nahrán je celý multiplex, nikoliv jednotlivá stanice z prvního seznamu). EPG je dostupné pro všechny stanice multiplexu.

okna_aplikace

Spuštění z příkazového řádku

Pomocí příkazového řádku je možné aplikaci ovládat jednoduše, ale hlavně s nastavením, kterého jen velmi těžko dosáhnete v ostatních rozhraních.

vlc dvb-t.xspf

Spustí v GUI seznam skladeb, který máte z aplikace w-scan.

cvlc dvb-t.xspf

Provede to samé, jen nebude spuštěno GUI (dojde k otevření okna s obsahem stanice s nejnižším PID).

vlc dvb-t://frequency=778000000:bandwidth=8

Načte celý multiplex na uvedené frekvenci a spustí přehrávaní.

Základy streamování DVB

VLC dokáže streamovat DVB obsah do sítě několika způsoby. Nám však v domácích podmínkách postačí http, neboť je s ním spjato nejméně problémů.

Pro zpřehlednění je vhodné použít příklad konfigurace domácí sítě:

  • Domácí server, nebo například počítač v pracovně – odsud bude VLC vysílat do sítě. Má pevně nastavenou IP adresu (zde 10.0.0.25). Pokud chcete VLC na tomto stroji ovládat dálkově, potřebujete znát přihlašovací údaje pro účet, na kterém bude VLC provozováno, a nainstalované OpenSSH a screen.
  • Dva notebooky a jeden tablet (počty jsou jen pro náš příklad sítě) – stroje pro sledování obsahu DVB streamu. Nainstalován VLC. IP adresy jsou přidělována pomocí DHCP. Pro vzdálené ovládání VLC na serveru doporučuji doinstalovat/stáhnout PuTTY (cca 400Kb).
  • Wifi router – aktivní prvek sítě s IP adresou 10.0.0.138 (nepodstatné), který řídí komunikaci v domácí síti. Povolen DHCP server s rozsahem 10.0.0.1 – 10.0.0.32.  

Otevřete si textový editor (např. gedit) a vložte do něj následující řádky.

vlc dvb-t://frequency=778000000:bandwidth=8:dvb-adapter=0 --ts-es-id-pid
--programs=513,514,770,773,2050 --sout
'#duplicate{dst=std{access=http,mux=ts,dst=:8080/1},select="program=513",
{dst=std{access=http,mux=ts,dst=:8080/2},select="program=514",
{dst=std{access=http,mux=ts,dst=:8080/3},select="program=770",
{dst=std{access=http,mux=ts,dst=:8080/4},select="program=773",
{dst=std{access=http,mux=ts,dst=:8080/5},select="program=2050"}' --ttl 3

Než soubor uložíte pod názvem „dvb778“ do svého domovského adresáře, poupravte tyto parametry (dosaďte skutečné hodnoty):

frequency=

--programs=xxx,xxx (PID = identifikace programu - tato čísla získáte v GUI volbou Nástroje>Informace o kodeku, ale většinou jsou pro vysílané stanice stejné na různých frekvencích)

"program=xxx"

Dále je vhodné pozměnit adresy streamu z dst=:8080/1 na dst=:8080/nova nebo dst=:8080/prima atd. Nebude tak docházet k chybám při streamování z více tunerů.

Malý rozbor příkazu neuškodí:

vlc dvb-t://frequency=778000000:bandwidth=8:dvb-adapter=0
  • – spustí ve vlc tuner číslo 1 ( dvb-adapter=0 je první tuner v systému) na uvedené frekvenci
--ts-es-id-pid
  • – parametr, který v dvb signálu hledá identifikaci programu (PID)
--programs=513,514,770,773,2050
  • – parametr určující o jaké programy (PID) z přijímaného multiplexu máme zájem
--sout
  • – parametr označující požadavek na vysílání streamu
#duplicate
  • – určuje, jak bude s přijímaným vstupem zacházeno (duplicate se používá pro zařízení, z nichž se nemohou číst data vícekrát současně)
{dst=std{access=http,mux=ts,dst=:8080/1},select="program=513"
  • – nastavení protokolu (access=http), formátu dat (mux=ts) a adresy (dst=:8080/1) pro stream programu s PID 513 (nova)
--ttl 3
  • – určuje počet aktivních prvků sítě, které stream přežije (3 = stream přežije průchod přes dva routery, switche)

Možností, jak ovlivnit a šířit stream, je mnoho. Cílem tohoto návodu není obeznámit vás se všemi možnostmi nastavení streamování. Pro další informace se podívejte na stránky dokumentace aplikace VLC, nebo zkuste hledat u hodného strýčka jménem Google.



Po uložení souboru a ukončení VLC, máte-li jej spuštěný, si otevřete příkazový řádek a zadejte (bash je v mnoha distribucích jako výchozí shell – příkazový řádek):

bash dvb778

Spustí se vám VLC s přednastavenými hodnotami streamování DVB obsahu. Nelekejte se, pokud vám ve VLC nenaskočil obraz a zvuk, znamená to úspěšné zprovoznění streamu celého multiplexu.

V naší fiktivní síti nyní dojde k zobrazení stanice Nova Cinema, pokud na ostatních počítačích v síti zadáme ve VLC (Média>Otevřít síťový proud) adresu http://10.0.0.25:8080/2.

Vzdálené ovládání a pokročilé streamování

Vzdálené ovládání je ve VLC zatím v plenkách. Je zde sice přítomno webové rozhraní a telnet, ale obě varianty provoz nikterak neulehčují. Zatím stále platí, že pokud chcete občas změnit obsah DVB streamu, je nejvhodnější ukončit VLC a spustit jej s novým nastavením. Pro tyto úkony je jednodušší použít externích aplikací. Pro vzdálené ovládání příkazového řádku vám doporučuji PuTTY (drobná aplikace, i pro Windows). S PuTTY je možné ovládat nejen VLC, ale celý vzdálený počítač a komunikace mezi počítači probíhá zabezpečeně (SSH). Předpokladem k úspěšnému navázání spojení je nainstalován OpenSSH na počítači (serveru), kde požadujeme spouštět VLC pro streamování. Ukážeme si variantu provozu s jedním DVB tunerem a dvěma DVB tunery, kdy jeden z nich bude vysílat stále stejný multiplex a druhý bude vysílání měnit dle požadavků.

Server – 1 tuner

  • nainstalováno VLC, OpenSSH, screen

Vytvořte adresář „vlc-dvb“ ve svém domovském adresáři. Sem uložte soubory nastavení pro jednotlivé frekvence. Na začátku každého souboru použijte příkaz „cvlc“ místo příkazu „vlc“.

Po uložení všech vám dostupných frekvencí by adresář „vlc-dvb“ mohl obsahovat podobné soubory:

dvb570      //čt
dvb746      //prima love
dvb778      //nova

Následující skript zkopírujte, poupravte hodnotu „soubor“ a uložte do svého domovského adresáře pod jednoduchým názvem (např. pro dvb570 název „ct“ adt.). Postup opakujte pro každý soubor v adresáři vlc-dvb.

#!/bin/bash
#
# Konopik Vladislav 
#    (VLKODLAK)
#      @ 2012
#
# zjisti PID pokud jiz byl skript spusten
PID=$(ps aux | grep VLC_TV_NET | grep -v grep | awk {'print $2'})
# nastaveni cesty k souboru pro VLC
soubor=/home/vlk/vlc-dvb/dvb570
# spusteni screenu s vlc streamem
# - dalsi spusteni skriptu vypne fungujici stream a
#   znovu jej spusti s novym nastavenim (proto tolik verzi tohoto skriptu)
if [ "$PID" = "" ]; then
echo "SPOUSTIM - screen pro vlc"
screen -dmS VLC_TV_NET /bin/bash
sleep 1
echo "SPOUSTIM - vlc stream z tuneru"
screen -S VLC_TV_NET -X exec bash $soubor
echo "  STREAM JE VYSILAN"
else	
echo "UKONCUJI - stary screen pro vlc"
kill $PID
sleep 1
echo "SPOUSTIM - novy screen pro vlc"
screen -dmS VLC_TV_NET /bin/bash
sleep 1
echo "SPOUSTIM - vlc stream z tuneru"
screen -S VLC_TV_NET -X exec bash $soubor
echo "  STREAM JE VYSILAN"
fi
#
# konec skriptu
#

Další skript nikterak neupravujte a rovnou jej uložte pod názvem „stop“ do domovského adresáře.

#
#!/bin/bash
#
# Konopik Vladislav 
#    (VLKODLAK)
#      @ 2012
#
# zjisti PID pokud existuje a ukonci vlc stream
PID=$(ps aux | grep VLC_TV_NET | grep -v grep | awk {'print $2'})
if [ "$PID" = "" ]; then
echo "VLC pro stream nebylo spusteno"
else	
echo "UKONCUJI - vlc stream"
kill $PID
fi
#
# konec skriptu
# 

V mém případě přibylo celkem 7 souborů. V adresáři vlc-dvb : dvb570, dvb746, dvb778 a v domovském adresáři : ct, prima, nova a stop.

Klient – 1 tuner

  • nainstalováno VLC, OpenSSH, screen

Spusťte PuTTY. Do kolonky Host Name zadejte IP adresu serveru. Connection type ponechejte na SSH. Poté klikněte na Default Settings a uložte toto nastavení pomocí tlačítka Save.

Přesuňte se na záložku Connection>Data a vyplňte jméno uživatele na serveru, kde budete provozovat VLC. Přesuňte se zpět na záložku Session, klikněte na Default Settings a Save.

PuTTY již máte nastavené a při dalším spuštění budete zadávat jen heslo k účtu na serveru.

bash nova //spustí multiplex 778MHz 
 
bash ct //vypne vlc a znovu jej spustí s multiplexem 570MHz  

bash prima //vypne vlc a znovu jej spustí s multiplexem 746MHz  

bash stop //ukončí vlc

Samozřejmě můžete PuTTY po provedení některého z příkazů zavřít a začít sledovat obsah ve VLC. A to je prý příkazový řádek v Linuxu složitý.

Server – 2 tunery

Mnou oblíbená kombinace, než se jeden z DVB-T tunerů odebral do křemíkového nebe.

V kombinaci dvou tunerů budete potřebovat více souborů s nastavením VLC. Jména souborů použijte například „dvb570a1“ pro první tuner a „dvb570a2“ pro druhý tuner. Obsahem jsou soubory totožné, až na položku  dvb-adapter=0. Tuto položku je potřeba pro druhý tuner (soubor dvb570a2) změnit na  dvb-adapter=1.

Skript pro provoz dvou tunerů je trochu jiný. Položka soubor1 je určena pro nastavení prvního (stále vysílajícího) tuneru. Tato položka by měla odkazovat na stejný soubor, i když budete používat více verzí tohoto skriptu. Položka soubor2 slouží pro změnu vysílaného obsahu.

Pokud tedy chcete stále vysílat ČT, bude mít soubor1 zadanou cestu k dvb570a1 a soubor2 bude nastaven na dvb746a2 (jméno skriptu např. prima). V druhém skriptu bude soubor1 opět dvb570a1 a soubor2 tentokráte dvb778a2 (jméno skriptu např. nova).

#!/bin/bash
#
# Konopik Vladislav 
#    (VLKODLAK)
#      @ 2012
#
# zjisti PID pokud jiz byl skript spusten
PID1=$(ps aux | grep VLC_TV_NET_1 | grep -v grep | awk {'print $2'})
PID2=$(ps aux | grep VLC_TV_NET_2 | grep -v grep | awk {'print $2'})
# nastaveni cesty k souborum pro VLC
# - pro 1 tuner (hlavni stream)
soubor1=/home/vlk/vlc-dvb/dvb570a1
# - pro 2 tuner (vedlejsi stream)
soubor2=/home/vlk/vlc-dvb/dvb746a2
# spusteni screenu s vlc pro hlavni stream
# - dalsi spusteni skriptu tento hlavni stream neukonci
#   jen upozorni na jeho provoz
if [ "$PID1" = "" ]; then
echo "SPOUSTIM - screen pro hlavni vlc stream"
screen -dmS VLC_TV_NET_1 /bin/bash
sleep 1
echo "SPOUSTIM - vlc stream z 1 tuneru"
screen -S VLC_TV_NET_1 -X exec bash $soubor1
echo "  TUNER 1 VYSILA"
else	
echo "VLC-STREAM Z 1 TUNERU JE STALE V PROVOZU"
fi
# spusteni screenu s vlc pro vedlejsi stream
# - dalsi spusteni skriptu vypne vedlejsi stream a
#   znovu jej spusti s nastavenim v souboru2
if [ "$PID2" = "" ]; then
echo "SPOUSTIM - screen pro vedlejsi vlc stream"
screen -dmS VLC_TV_NET_2 /bin/bash
sleep 1
echo "SPOUSTIM - vlc stream z 2 tuneru"
screen -S VLC_TV_NET_2 -X exec bash $soubor2
echo "  TUNER 2 VYSILA"
else
echo "UKONCUJI vedlejsi vlc stream"
kill $PID2
sleep 1
echo "SPOUSTIM - screen pro vedlejsi vlc stream"
screen -dmS VLC_TV_NET_2 /bin/bash
sleep 1
echo "SPOUSTIM - vlc stream z 2 tuneru"
screen -S VLC_TV_NET_2 -X exec bash $soubor2
echo "  TUNER 2 VYSILA"
fi
#
# konec skriptu 
# 

„Stop“ skript pro dva tunery

#!/bin/bash
#
# Konopik Vladislav 
#    (VLKODLAK)
#      @ 2012
#
#zjisti PID pokud existuje a ukonci vlc stream
PID1=$(ps aux | grep VLC_TV_NET_1 | grep -v grep | awk {'print $2'})
PID2=$(ps aux | grep VLC_TV_NET_2 | grep -v grep | awk {'print $2'})
if [ "$PID1" = "" ]; then
echo "VLC pro hlavni stream nebylo spusteno"
else	
echo "UKONCUJI - vlc stream z 1 tuneru"
kill $PID1
fi
if [ "$PID2" = "" ]; then
echo "VLC pro vedlejsi stream nebylo spusteno"
else	
echo "UKONCUJI - vlc stream z 2 tuneru"
kill $PID2
fi
#
# konec skriptu
# 

Klient – 2 tunery

Se serverem se opět jednoduše spojte pomocí PuTTY. Zadáte-li:

bash nova   //spustí se multiplex 570MHz na tuneru č.1
            //spustí se i multiplex 778MHz na tuneru č.2
bash prima  //nechá spuštěný multiplex 570MHz na tuneru č.1
            //vypne vlc a znovu jej spustí s multiplexem 746MHz na tuneru č.2 
bash stop   //ukončí vlc pro oba tunery 

Dnes jsem vám ukázal jednu z možností provozování DVB-T streamu na domácí síti. Možná není úplně ideální, ale přináší nejméně problémů a požadavků na obsluhu (webové rozhraní zamrzá, pro telnet je zapotřebí zadávat mnoho příkazů atd.). Přeji vám příjemnou zábavu při sledování DVB-T obsahu na domácí síti.

Diskuze (15) Nahoru