přejít na obsah přejít na navigaci

Linux E X P R E S, Jak ve VLC streamovat multimédia – díl I

Jak ve VLC streamovat multimédia – díl I

player-icon_1.jpg

VLC je celý vystavěn na systému modulů, které mu dodávají vysokou pružnost při používání. Aplikaci lze pohodlně používat nejen k přehrávání běžných multimediálních souborů, ale i pro odesílání takovýchto dat do sítě. Pro streamování (odesílání multimediálních dat do sítě) je v aplikaci přítomno několik modulů a tento seriál vám pomůže při jejich nastavení.


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.

Nahoru

Odkazy

Příspěvky

"překlep"
Ravise 15. 10. 2013, 18:38:40
Odpovědět  Odkaz 
Pod nadpisem Nápověda je řádek
"vlc -H &gt; vlcnapoveda"
I když to většina zdejších čtenářů pochopí, někoho může převedení znaku na entitu zmást.
Lukáš Jelínek Re: "překlep"
Lukáš Jelínek 15. 10. 2013, 19:47:04
Odpovědět  Odkaz 
Díky za upozornění, opraveno.
Jak ve VLC streamovat multimédia – díl I
LukyBrno 16. 10. 2013, 20:58:15
Odpovědět  Odkaz 
..dík. Hezký článek !

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz