Několik poznámek úvodem:
- Pro nastavení streamu je nejvhodnější používat základní textový editor (gedit, kwrite atd.), ve kterém si daný příkaz jednoduše připravíte (zkopírujete) nebo poupravíte a poté jej vložíte do příkazového řádku k vykonání. Není na tom nic těžkého a dostanete z aplikace maximum.
- GUI je pro nastavení složitějších streamů nevhodné. Je sice možné v tomto rozhraní nastavit i velmi složitý stream, ale než se ke všemu proklikáte a dopíšete potřebné parametry, vyzkoušíte pomocí textového editoru a příkazového řádku několik variant streamu.
- Ne všechny formáty multimédií jsou vhodné pro streamování. Některé formáty je nutné před samotným vysláním do sítě překódovat, což značně zatěžuje procesor. Zvažte proto, je-li opravdu potřeba takovýto formát streamovat, nebo raději zpřístupníte uživatelům tato data v domácí síti například pomocí ftp nebo smb.
Příklady se vztahují k VLC verze 2 a otestovány jsou ve verzích 2.0.3 (Debian), 2.0.8 (Mint).
Stream samotný může být tak jednoduchý, že je možné jej zadat i pomocí GUI rozhraní.
vlc hudba.mp3 --sout '#std{access=http,mux=ts,dst=:8080/hudba}'
Pokročilý stream, zabírající několik řádků, však v GUI rozhraní raději ani nezkoušejte sestavit (textový editor a příkazový řádek představují mocný nástroj Linuxu).
vlc dvb-t:// --dvb-frequency 746000000 --dvb-bandwidth 8 --dvb-adapter 0 --ts-es-id-pid --programs=772,774,1025,1026,5633 --ttl 3 --sout-udp-caching 1500 --sout '#duplicate{dst="transcode{vcodec=mp2v,vb=600,scale=0.5,acodec=mpga,ab=128,channels=2,
samplerate=48000,deinterlace}:duplicate{dst=std{access=http,mux=ts,dst=:8080},
dst=std{access=udp,mux=ts,dst=224.0.0.0,sap,name=Ocko}}",select=program=1025,
dst="transcode{vcodec=mp2v,vb=600,scale=0.5,acodec=mpga,ab=128,
channels=2,samplerate=48000,deinterlace}:duplicate{dst=std{access=http,mux=ts,dst=:8081},
dst=std{access=udp,mux=ts,dst=224.0.0.1,sap,name=OckoGold}}",select=program=1026,
dst=std{access=http,mux=ts,dst=:8082},select=program=772,
dst=std{access=http,mux=ts,dst=:8083},select=program=774,dst=std{access=http,mux=ts,
dst=:8084},select=program=1025,dst=std{access=http,mux=ts,dst=:8085},select=program=1026,
dst=std{access=http,mux=ts,dst=:8086},select=program=5633}'
Pokud na vás jdou mdloby po zhlédnutí zápisu pokročilého streamu, ničeho se nelekejte. Po přečtení tohoto a následujícího dílu o streamování získáte znalosti pro pochopení i sestavení takto pokročilých streamů. Začněme však pěkně od základů.
Nápověda VLC
Každý modul se nastavuje pomocí několika parametrů. Pro výpis dostupných modulů a jejich parametrů vám poslouží následující příkaz.
vlc -H > vlcnapoveda
Ve vašem domovském adresáři vznikl soubor vlcnapoveda s popisem všech modulů a parametrů pro nastavení. Po prohlédnutí tohoto souboru budete možná zaskočeni rozsáhlostí nápovědy. Nelekejte se, není potřeba znát všechny parametry, používat budeme jen některé. Hledání potřebného parametru v tomto souboru je zdlouhavé, proto se častěji používá nápověda pro jednotlivé moduly ve tvaru vlc -p <název_modulu> --advanced.
vlc -p standard --advanced
Vypíše všechny parametry pro modul standard.
Další nápovědou (pouze v angličtině) vám může být uživatelské fórum a wiki pro VLC, nebo zkuste dotaz v internetovém vyhledávači.
Moduly pro streamování
standard – základní modul pro práci s multimédii, jehož výstupem může být soubor nebo odeslání do sítě (stream). Převážně se používá zkrácený zápis std
rtp – real time protokol je vystavěn nad udp a umožňuje streamovat na unicast i multicast adresy
es – elementary streams je určen pro oddělení jednotlivých složek streamu (video, audio, titulky)
transcode – modul pro překódování zdroje dat. Používá se pro změnu kodeku nebo aplikování některého z filtrů (text, logo, zkreslení atd.)
duplicate – nejčastěji se používá u zařízení (DVB, DVD, kamery atd.), ke kterým je vícenásobný přístup pro čtení dat problematický, nebo přímo nemožný
display – zobrazuje obsah na obrazovce stroje, odkud se vysílá
Zdroje dat pro streamování
Zdrojem dat nemusí být jen soubor. Aplikace je schopna pracovat s mnoha zařízeními (DVD, BlueRay, DVB-T/C/S, API V4L atd.), jež jsou dostupná ve vašem systému.
vlc film.mpg
soubor nacházející se v domovském adresáři (výchozí adresář, není-li uvedena absolutní cesta k souboru)
vlc dvdsimple:///dev/dvd
DVD obsah, u kterého dojde k přeskočení menu. Vhodný doplněk pro DVD je libdvdcss. Stáhnout balíček pro váš systém můžete z ftp://ftp.videolan.org/
vlc cdda:///dev/cdrom
audio CD
vlc dvb-t://
tuner pro terestriální vysílání, obdobně se používá dvb-s:// pro satelitní a dvb-c:// pro kabelové vysílání
vlc v4l://
zařízení komunikující pomocí API V4L
vlc screen://
zachytává dění na ploše – používejte raději s modulem transcode, protože pořízené video o délce 30 sekund a 50 fps bez překódování má velikost přes 1 GB
Zdrojem dat může posloužit i datové úložiště nebo již probíhající stream (ftp://, udp://, http:// atd.).
Příkaz vlc je možné zaměnit za cvlc, nechcete-li při streamování spouštět GUI.
Standard - nastavení
Modul Standard se používá pro vysílání nebo ukládání multimediálních dat. Pro nastavení slouží několik parametrů, které se vzájemně ovlivňují (např. pro udp lze použít jen TS kontejner).
std{access=,mux=,dst=}
access – určuje výstup zdroje
- – file: výstup do souboru, kontejner TS, PS, Ogg, ASF, AVI
- – udp: stream na unicast nebo multicast adresu, kontejner TS
- – http: stream přes http protokol, kontejner TS, PS, Ogg, ASF
- – mmsh: stream přes MMS protokol, který je zapouzdřen do http, kontejner ASFH (kontejner je – – stejný jako ASF, jen je poupraven pro použití s mms zapouzdřeným do http)
mux – druh kontejneru pro stream
- – ts: transport stream varianta formátu MPEG2, která se používá pro vysílání digitální televize
- – ps: formát MPEG2 souborů (.mpeg)
- – ogg: kontejner z projektu Xiph
- – asf: používá se pro kodeky od firmy Microsoft (při vysílání pomocí mms přes http se používá asfh)
- – avi: používá se pouze pro ukládání (např. pro screen:// nebo cdda://)
- – mp4: jen pro MPEG4 soubory a pouze pro ukládání
dst – cíl vysílaného streamu
Nastavení cíle je ovlivněno nastavením parametru access.
- – file: cílem je absolutní cesta s názvem ukládaného souboru
- – udp: cílem je unicast nebo multicast adresa a port
- – http, mmsh: cílem je většinou port (není-li uvedena IP, naslouchá VLC na všech rozhraních)
Přehlednou tabulku závislostí mezi access, mux, dst a jednotlivými kodeky naleznete na stránce streaming-features.
Standard – příklady
access=file
Spolupracuje se všemi zmíněnými kontejnery.
vlc hudba1.mp3 --sout '#std{access=file,mux=ts,dst=pokus}'
Vytvoří soubor pokus s obsahem hudba1.mp3.
vlc hudba2.mp3 --sout-file-append --sout '#std{access=file,mux=ts,dst=pokus}'
Do již vytvořeného souboru pokus přidá obsah souboru hudba2.mp3.
- --sout-file-append - přidá výstupní data na konec souboru, proto došlo ke sloučení obsahu souborů hudba1.mp3 a hudba2.mp3 v souboru pokus.
vlc dvdsimple:///dev/dvd --sout-all --sout '#std{access=file,mux=ps,dst=film.mpg}' vlc://quit
Příkaz vykonal zálohu DVD filmu do souboru film.mpg se všemi zvukovými stopami a titulky.
- dvdsimple:// – zajistí přehrávání bez menu (velmi důležité, neboť by se VLC pokoušelo neustále přehrávat jen menu filmu)
- /dev/dvd – absolutní cesta k zařízení (proto jsou celkem tři lomítka)
- --sout-all – globální parametr, díky kterému budou ze zdroje vysílány všechny dostupné proudy (u DVD všechny zvukové stopy a titulky)
- vlc://quit – speciální parametr pro ukončení VLC (bez tohoto parametru bude VLC zálohovat DVD neustále dokola)
vlc dvdsimple:///dev/dvd --audio-language eng --sub-language cz --sout '#std{access=file,mux=ps,dst=film.mpg}' vlc://quit
Záloha filmu bude obsahovat anglickou zvukovou stopu a české titulky.
- --audio-language <hodnota> – dvou až třímístný kód země pro výběr jazyka zvukové stopy (cz, cze, en, eng atd.), více hodnot oddělujte čárkami (zadání 'none' zabrání změně jazyka)
- --sub-language <hodnota> – dvou až třímístný kód země pro výběr jazyka titulků
vlc cdda:///dev/cdrom --cdda-track 2 --sout '#std{access=file,mux=ogg,dst=cdhudba}' vlc://quit
Uložena bude druhá skladba z hudebního CD
- --cdda-track <číslo> – ze zdroje bude přehrána pouze vybraná skladba
- mux= – v příkladu je použito Ogg kontejneru, ale použít lze i kontejner AVI
vlc screen:// --screen-fps 50 --sout '#std{access=file,mux=avi,dst=zaznamplochy}'
Vznikne objemný soubor (30 sekund záznamu = 1 GB dat při rozlišení 1024×768) obsahující dění na celé pracovní ploše, vyjma zachycení pohybu myši.
--screen-fps <číslo> – udává hodnotu snímků za vteřinu (u některých verzí VLC jsem se setkal s nefunkčností záznamu, pokud bylo fps nastaveno pod 5)
mux= – použít lze i ASF kontejner (velikost se příliš nezmění, kvalita ale zřejmě zhorší – subjektivní dojem)
vlc screen:// --screen-fps 25 --screen-top 100 --screen-left 300 --screen-height 480 --screen-width 600 --sout '#std{access=file,mux=avi,dst=zaznamplochy}'
Soubor bude obsahovat záznam výřezu plochy
- --screen-height <číslo> – výška výřezu plochy v pixelech
- --screen-width <číslo> – šířka výřezu plochy v pixelech
- --screen-top <číslo> – levý horní roh výřezu je posunut o zadané pixely od horního okraje obrazovky
- --screen-left <číslo> – levý horní roh výřezu je posunut o zadané pixely od levého okraje obrazovky
- --screen-follow-mouse – sleduje pohyb myši a výřez tak lze posouvat, byť myš samotná není ve videu zachycena
access=udp
Spolupracuje pouze s TS kontejnerem.
vlc hudba1.mp3 --ttl 3 --loop --sout '#std{access=udp,mux=ts,dst=224.0.0.0}'
Stream bude odeslán pomocí udp na multicast adresu 224.0.0.0. Pro přehrávání streamu zadejte adresu udp://@224.0.0.0
- --ttl <číslo> – počet aktivních prvků sítě (router), které vysílaný paket přežije
- --loop – globální parametr pro neustálé opakování
vlc film.mpg --sout-udp-caching 3000 --ttl 3 --sout '#std{access=udp,mux=ts,dst=224.0.0.0}'
Film bude před odesláním na multicast adresu načten do vyrovnávací paměti.
- --sout-udp-caching <číslo> – velikost vyrovnávací paměti v ms (1000 = 1s)
vlc film.mpg --sout-udp-caching 3000 --ttl 3 --sout '#std{access=udp,mux=ts,dst=224.0.0.0,sap,name=film}'
Pro udp je možné u standard modulu použít oznamování pomocí SAP. Stream lze opět přehrát zadáním adresy udp://@224.0.0.0 nebo v Seznamu skladeb využijte volby Místní síť>Network streams (SAP)>film.
vlc dvdsimple:///dev/dvd --ttl 3 --sout-all --sout '#std{access=udp,mux=ts,dst=224.0.0.0,sap,name=dvd film}'
Uživatel, který si přehraje stream zadáním již známé adresy (nebo pomocí SAP), si bude moci díky parametru --sout-all vybrat jazyk nebo titulky ze zdrojového DVD přímo ve svém přehrávači.
access=http
Spolupracuje s TS, PS, Ogg, ASF kontejnery.
vlc hudba1.mp3 --sout '#std{access=http,mux=ts,dst=:8080/hudba}'
Pro přehrávání streamu zadejte adresu http://ip_odkud_se_vysílá:8080/hudba, nebo pro ověření funkčnosti můžete na počítači, odkud vysíláte stream, zadat http://localhost:8080/hudba.
vlc hudba1.mp3 --sout-http-user jarda --sout-http-pwd soukrome --sout '#std{access=http,mux=ts,dst=:8080/hudba}'
Stream nyní přehrajete pouze se znalostí přístupových údajů.
- --sout-http-user <jméno> – nastaví uživatelské jméno
- --sout-http-pwd <heslo> – nastaví heslo pro stream
vlc cdda:///dev/cdrom --loop --sout '#std{access=http,mux=ogg,dst=:8080/cd}'
Streamem se stane celé hudební CD, které přehrajete zadáním adresy
http://ip_odkud_se_vysílá:8080/cd
- --loop – globální parametr pro neustálé opakování
vlc dvdsimple:///dev/dvd --sout-all --sout '#std{access=http,mux=ps,dst=:8080/dvd}'
Stream filmu z DVD média bude opět obsahovat všechny jazykové verze a titulky.
- i zde lze použít TS kontejner jako v příkladech s udp
vlc screen:// --screen-fps 25 --screen-height 100 --screen-width 100 --screen- follow-mouse --sout '#std{access=http,mux=asf,dst=:8080/plocha}'
Takovýto stream je sice možný, ale bez překódování je nesmyslný.
- oproti nastavení v příkladu access=file, lze použít jen kontejner ASF
- bez překódování dochází k vysoké zátěži sítě
access=mmsh
Spolupracuje pouze s ASFH kontejnerem.
Stream pomocí mmsh je možné přehrát v aplikacích od Microsoftu.
vlc hudba.mp3 --loop --sout '#std{access=mmsh,mux=asfh,dst=:8080/hudba}'
Stream přehrajete zadáním adresy
Windows Media Player mms://ip_odkud_se_vysílá:8080/hudba
VLC mmsh://ip_odkud_se_vysílá:8080/hudba
vlc film.wmv --sout '#std{access=mmsh,mux=asfh,dst=:8080/film}'
Stream filmu přehrajete obdobným způsobem jako soubor hudba.mp3.
vlc screen:// --screen-fps 25 --screen-height 100 --screen-width 100 --screen- follow-mouse --sout '#std{access=mmsh,mux=asfh,dst=:8080/plocha}'
Streamování výřezu plochy jako u příkladu access=http. Povšimněte si použitého kontejneru. Kvůli mmsh je potřeba použít variantu asfh na rozdíl od asf u http výstupu.
RTP – nastavení
Real time protokol vysílá stream obdobně jako modul standard pomocí udp protokolu. Navíc umožňuje vystavení souboru SDP popisujícího parametry vysílání. Uživatel tak zadá adresu k souboru SDP a přehrávač naladí vysílaný stream. Častěji se však SDP používá v kombinaci se SAP. U rtp je možné použít jen kontejnery TS a PS.
rtp{dst=,port=,ttl=}
dst= cílová ip adresa (unicast i multicast)
port= cílový udp port
ttl= hodnota určuje počet aktivních prvků sítě, které vysílaný paket přežije
RTP – příklady
vlc film.mpg --sout '#rtp{dst=224.0.0.0,port=5004,ttl=2}'
K přehrání streamu dojde zadáním adresy rtp://@224.0.0.0:5004
vlc film.wmv --sout-rtp-caching 3000 --sout '#rtp{dst=224.0.0.0,port=5004,ttl=2,sdp=sap,name=film}'
Stream lze přehrát zadáním adresy nebo použitím SAP oznamování.
- --sout-rtp-caching <číslo> – velikost vyrovnávací paměti v ms
vlc dvdsimple:///dev/dvd --audio-language eng --sub-language cz --sout '#rtp{dst=224.0.0.0,port=5004,ttl=2,sdp=sap,name=dvd}'
Již dobře známý stream DVD média. Taktéž lze použít parametry --loop, --sout-all.
Všechny příklady týkající se streamování přes udp a rtp jsou směrovány na multicast adresu, která je v rozmezí 224.0.0.0 – 239.255.255.255. Pro domácí (lokální) použití jsou rezervovány rozsahy 224.0.0.0/24 a 239.0.0.0/8.
ES – nastavení
Modul ES se nastavuje stejně jako modul Standard. Navíc však obsahuje možnost rozdělení streamu na samostatně vysílanou (ukládanou) obrazovou a zvukovou složku pomocí rozšíření parametrů o -audio a -video.
es{access=,mux=,dst=} nebo
es{access-video=,mux-video=,dst-video=,access-audio=,mux-audio=,dst-audio=}
ES – příklady
vlc film.mpg --sout '#es{access-video=http,mux-video=ts,dst- video=:8080/video,access-audio=http,mux-audio=ts,dst-audio=:8080/audio}'
Stream filmu bude obsahovat na jedné adrese pouze video a na druhé pouze audio.
vlc film.mpg --sout '#es{access-video=udp,mux-video=ts,dst- video=224.0.0.0,access-audio=file,mux-audio=ts,dst-audio=zvuk_z_filmu}'
Na udp adresu je odeslána video složka a audio je ukládáno do souboru.
To je dnes vše
První díl máte úspěšně za sebou. Příště si ukážeme zbývající moduly transcode, display a duplicate.