Portál AbcLinuxu, 19. říjen 2017 02:24

VLC - 4 (začínáme streamovat)

5. 9. 2006 | Jiří Poláček
Články - VLC - 4 (začínáme streamovat)  

Hlavní devizou VLC je nepochybně možnost streamování – vysílání multimediálního obsahu po síti. Následující text lehce nastiňuje široké možnosti takového počínání a podrobněji se pak věnuje základnímu vysílacímu modulu a problematice vícesměrového vysílání (multicast).

Vysílací moduly

K vysílání ve VLC slouží parametr sout, za kterým může být definice nastavení dlouhá přes několik řádků. Začneme ale jednoduchým příkladem – vysílejme libovolný videosoubor via protokol HTTP:

vlc video.avi --sout http/ts:localhost:6543

Takovéto vysílání přehrajeme již známým způsobem:

vlc http://localhost:6543

Příklad využívá zjednodušené syntaxe nastavení streamování, u kterého se automaticky předpokládá standardní modul vysílání. Plná verze zápisu toho stejného by vypadala následovně:

vlc video.avi --sout \
 '#standard{access=http,mux=ts,dst=localhost:6543}'

Ve složených závorkách jsou definována nastavení modulu, jehož jméno je před závorkami; modul standard z příkladu je pouze jedním z několika dostupných:

standard
Nebo jen std je základním výstupním modulem, data vysílá vybraným protokolem (HTTP, UDP, file atd.) ve vhodném kontejneru (TS, PS, OGG, ASF, AVI atd.), viz dále.
duplicate
Umožňuje k multimediálnímu zdroji přistupovat vícekrát, s jeho pomocí je například možné elegantně streamovat více programů digitálního televizního vysílání.
transcode
Provádí překódování vstupu, tj. myslitelné obvyklé úpravy jako změna kodeku, kvality, rozlišení či nasazení některých filtrů.
display
Přehrává vstup jako obvykle, ve spojení s duplicate je možné se na nějaký film dívat a zároveň jej vysílat dále po síti.
rtp
Vysílá po síti protokolem RTP – Real-time Transport Protocol, který je definován RFC 3550.
es
Jako zkratka od Elementary Streams; modul separuje jednotlivé složky zdroje, typicky od sebe oddělí hudební a obrazovou složku.

První várka příkladů

Jak již je v popisech naznačeno, moduly lze společně různě kombinovat, zejména je řadit do posloupností (oddělovačem je dvojtečka) a zanořovat do modulu duplicate. Ukažme si to na pár obecnějších příkladech (konkrétní volby vysílání a kódování se dozvíme později):

vlc video.avi --sout \
 '#duplicate{dst=display,dst=standard{volby vysílání}}'

Video bude přehráváno lokálně a zároveň dále vysíláno po síti.

vlc cdda:// --sout \
 '#transcode{volby kódování}:std{volby vysílaní}'

Přehrávané hudební cédéčko bude nejdříve překódováno a po té vysíláno.

vlc mojeradio.pls --sout \
 '#duplicate{dst=std{volby vysílaní},\
dst=transcode{volby kódování}:std{volby vysílaní}}'

Vysílání internetového rádia – v plné kvalitě na jedné adrese a překódované do nižší kvality na adrese druhé.

Jednotlivé moduly samozřejmě mají hromadu možností k nastavování. Na ty nejdůležitější se nyní podíváme.

Vysíláme pomocí modulu standard

Modul standard posílá multimediální zdroj jedním ze základních protokolů na místo určení – do souboru nebo po síti. Důležité jsou jeho následující parametry:

access

Definuje výstupní metodu vysílaného zdroje, tj. vhodný internetový protokol:

mux

Kontejner, v kterém jsou multimédia vysílána – dlužno mít na paměti, že některé kontejnery jsou vhodné jen pro některé kodeky a stejně tak nemusí podporovat všechny výstupní metody.

dst
Již zmiňované místo určení, jehož význam se lehce mění v závislosti na zvolené výstupní metodě. Pokud je vybrán file, dst samozřejmě udává soubor, do kterého se má ukládat; u metod udp a rtp cílovou adresu a u ostatních metod síťové rozhraní, na kterém má VLC naslouchat požadavkům ve tvaru adresa:port/cesta.

Druhá várka příkladů

Nyní již s konkrétními volbami vysílání:

vlc http://www.live.cz/radio/beat128.ogg.m3u --sout \ '#std{access=file,dst=radio.ogg}'

Uložení vysílání internetového rádia do souboru:

vlc video.avi --sout '#std{access=mmsh,mux=asfh,dst=:7880/video}'

Vysílání, ke kterému se může připojit i Windows Media Player na adrese mms://<počítač>:7880/video – bez specifikace IP či jména počítače naslouchá VLC na všech síťových rozhraních.

vlc dvdsimple:// --sout http/ts:localhost:8080 --sout-all

Globální parametr sout-all zajistí, že vysílány budou všechny dostupné proudy streamovaného filmového DVD, tj. veškeré zvukové stopy i titulky.

vlc video.avi --sout '#std{access=udp,mux=ts,dst=192.168.0.5}' --ttl 5

Směrové vysílání (unicast) k počítači s adresou 192.168.0.5 na výchozím portu 1234. Volba ttl nastavuje životnost paketu – počet aktivních prvků sítě, přes které může vysílaný proud dat projít.

vlc video.avi --sout '#std{access=udp,mux=ts,dst=239.255.0.5}'

Vícesměrové vysílání (multicast) na adresu 239.255.0.5; klienti, kteří chtějí přijímat takové vysílání, se musí k zadané adrese zaregistrovat (nepřehlédněte znak zavináč):

vlc udp:@239.255.0.5

Pro porovnání – pro příjem unicastu (na výchozím portu) stačí zadat pouze vlc udp:. Pokud se neorientujete v problematice vícesměrového vysílaní, čtěte následující odstavec.

Kterak na multicast

Vícesměrové vysílání je standardní součástí internetového protokolu IP, které se používá s transportním protokolem UDP. Multicast lze provozovat i s protokolem RTP, který je vystavěn právě nad UDP. Vysílající stanice posílá svůj obsah na dynamicky vznikající IP adresu z prostoru vyhrazeného pro tyto účely, klienti si pak mohou tutéž adresu zaregistrovat – k tomu slouží protokol IGMP – a přijímat tak vysílaný proud. Vícesměrovým šířením dat se šetří přenosová kapacita linky, neboť data od vysílací stanice putují pouze jednou, na druhou stranu vysílací stanice neví, kdo (všechno) je příjemcem jejího vysílání. Zmiňované rezervované adresy jsou z rozmezí 224.0.0.0–239.255.255.255, přičemž pro lokální použití jsou (zjednodušeně řečeno) rezervovány segmenty 224.0.0.0/24 a 239.0.0.0/8 (podrobnosti viz Internet Protocol Multicast).

Globální použití vícesměrového vysílání je prakticky omezeno na uživatele virtuální vícesměrové páteřní sítě MBONE, pro většinu z nás tak připadá v úvahu jen lokální použití. I zde však lze narazit na problémy; multicast musí podporovat operační systém (linuxové jádro), síťová karta a veškeré síťové prvky, přes které vysílání prochází – různé levné směrovače s ním mohou mít problémy, ty drahé jej zase mají ve výchozím nastavení vypnuté. Pro důkladnější prostudování problematiky viz seriál článků na Lupě, proslulé Multicast HOWTO, či pojmy ve Wikipedii Multicast, IP Multicast a IGMP.

Nastavení vícesměrového vysílání

Pro úspěšné provozování multicastu pod Linuxem je třeba věnovat pozornost následujícím položkám:

linuxové jádro
Podpora linuxového jádra samozřejmě nesmí chybět a obvykle také ve výchozím nastavení distribucí nechybí. V případě problémů přesto věnujte pozornost položkám IP:mutlicasting, IP:multicast routing v menu NetworkingNetworking Options.
síťová karta
Příznak MUTLICAST ve výpisu ip addr značí podporu vícesměrového vysílaní. U běžných ethernetových síťovek obvykle problém není, pozor však na bezdrátové síťové karty.
směrování síťového provozu

U některých konfigurací sítě může být žádoucí doplnit směrovací tabulku následujícím způsobem:

ip route add to 224.0.0.0/4 dev eth0
firewall

Také je nezbytné povolit ve firewallu protokol IGMP a všechny porty UDP, na kterých se vysílá. Používám výchozí firewall v SUSE, proto mám v /etc/sysconfig/SuSEfirewall2:

FW_SERVICES_EXT_UDP="1234"
FW_SERVICES_EXT_IP="igmp"

Analogická pravidla pro IPTABLES (bez záruky):

iptables -A INPUT -p udp --dport 1234 -j ACCEPT
iptables -A INPUT -p igmp -j ACCEPT

Oznamování vysílaného obsahu

V případě funkčního vícesměrového vysílání si můžeme dopřát i onu symbolickou třešničku na dortu v podobě oznamování obsahu, který se kde vysílá. Jako příjemce obsahu tak nemusíme znát adresu zdroje, na kterém se vysílá, postačí nám v přehrávači zapnout funkci příjmu oznamování SAP a dostupná vysílání se nám „sama naladí“

Vysílaný obsah oznámíme za pomoci služby SAP – Session Announcement Protocol – zadáním parametru sap v modulu standard. Pokud něco oznamujeme, neměli bychom zapomenout připojit popisek – to zajistí parametr name:

vlc trailer.mov --sout \
 '#std{access=udp,mux=ts,dst=:1234,sap,name="Filmová ukázka"}'

Standardní port UDP pro oznamování je 9875, takže opět pozor na nastavení firewallu.

Příště

Příští díl seriálu se bude věnovat dalším vysílacím modulům, zejména transcode pro konverzi vysílaného zvuku a videa.

Seriál VLC (dílů: 6)

První díl: VideoLAN Client - 1 (instalace a ovládání), poslední díl: VLC - 6 (správce vysílání).
Předchozí díl: VLC - 3 (filtry a titulky)
Následující díl: VLC - 5 (pokročilé streamování)

Související články

VideoLAN Client - 1 (instalace a ovládání)
VLC - 2 (přehrávání multimédií)
VLC - 3 (filtry a titulky)
Na co se často ptáme: MPlayer
Na co se často ptáme: ALSA
Jak vytvořit vlastní DVD pod Linuxem
Extra multimediální systém XMMS
GNUsound 0.6
GJay - trochu neobvyklý jukebox
KRadio
Pár postřehů k VLC
TVtime - tak trochu jiná televize
Přehrávání DVD pod Linuxem

Odkazy a zdroje

VLC

Další články z této rubriky

Linuxové foto novinky: nejen darktable 2.2 a Rawtherapee 5
Linuxové foto novinky: GIMP konečně prolomil 8bit mez
DLNA v praxi: Android
Technologie DLNA na Linuxu v praxi – PS3 Media Server
Technologie DLNA na Linuxu v praxi – 1

Diskuse k tomuto článku

5.9.2006 08:28 ch-in-A | skóre: 13 | blog: Zapisky_silencovy | Praha
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
bezva clanek, urcite se mi nekdy bude hodit....pisu si :@)
-- RTFRFC --
5.9.2006 09:22 DAve
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
Jednim slovem .. Nadhera :-)
5.9.2006 11:13 Mayo | skóre: 1
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zaujímalo by ma aký typ kontainera použiť, ak by som chcel streamovať video prevažne pre uživateľov Windows, bez toho aby sa na strane klienta musel inštalovať špeciálny kodek (alebo vlc). Teda ako streamovať video vo formáte Windows Media (asf,...)?
Jiří Poláček avatar 5.9.2006 12:18 Jiří Poláček | skóre: 47 | blog: naopak | Sivice
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Doporučuji nahlédnout do fóra na webu videolan.org; kontejner asf samozřejmě lze použít, ale kodeky WMA, WMV (myslím) VLC pod Linuxem nepodporuje.
Sudoku omrzelo? Zkuste bobblemaze! | Statistiky jsou jak bikiny. Napoví hodně, všechno ale neukážou.
5.9.2006 12:56 Mayo | skóre: 1
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Pozeral som si vlc forum, ale nenašiel som žiadny spôsob ako to vyriešiť.
9.9.2006 18:47 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)

Mrkni sem: http://forum.videohelp.com/viewtopic.php?t=259354 je to tady i se screenshoty. Mám to vyzkoušené.

Jinak vlc se nemusí ve Windows instalovat, ale stačí rozbalit zip nebo 7-zip verzi a protože se dá taky spouštět z příkazového řádku, tak se vlastně dá komplet nastavit jako bat a příjemce jen klikne na zástupce na ploše.

5.9.2006 11:18 erchamion
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc hezky clanek. Jen by mozna jeste melo byt receno, ze pro lokalni multicast je opravdu lepsi pouzivat segment 239.0.0.0/8, protoze v segmentu 224.0.0.0/24 jsou nektere adresy rezervovany (co si vybavuju takhle z voleje, tak treba 224.0.0.5 a 224.0.0.6 pouziva routovaci protokol OSPF atd.) a hrozi riziko kolize. Podrobnosti lze dohledat v RFC1700. Ale jinak fakt super clanek, mozna si to streamovani jen tak ze sportu vyzkousim... :-)
5.9.2006 22:43 zigi | skóre: 12
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
moc pekne, jen bych bel jeden dotaz:

 Potrebuju z rozhrani eth0 (verejna IP) preroutovat
multicast na eth1 (192.168.1.254) do domaci podsite..
klasicke internetove spojeni funguje pres ip_forwardig a NAT.

 Nebo dalsim resenim, ktere me napadlo, by bylo video data
prichazejici na eth0 prestreamovavat pres vlc na druhe
rozhrani eth1, ale potreboval bych trochu nasmerovat.

thx
8.9.2006 07:25 Pavel 'lingeek' Szalbot | skóre: 54 | Třinec
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Přiznám se, že mě taky zajímá, jak routovat multicastový provoz.
Math, as Barbie says, is hard.
9.9.2006 08:49 p_a_l_o
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Resim stejny problem. ISP uz mnoho mesicu vysila TV pres multicast, ale ja se za linux routerem mohu divat akorat tak z okna. Kdyz pripojim PC(OS Windows) primo, neni sledovani problem.
3.11.2006 16:46 local
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Ak by ste si precitali niektory zo spominanych serialov, pochopili by ste, ze routovat multicast traffic staticky akosi nejde. preto je na to potrebne pouzit dynamicky routing protokol, najcastejsie sa pouziva pim. jeden z free pim routrov (tusim zvlada iba sm, co ale az tak nevadi) je napriklad xorp, pouziva ho ja vasa 802.tv, pokial ma pamat neklame. odporucam spojit sa s nimi a podebatit. local
21.1.2007 22:23 Kolyk
Rozbalit Rozbalit vše VLC DVB UDP multicast
Odpovědět | Sbalit | Link | Blokovat | Admin
Narazil někdo na problém s vyčerpáním paměti při streamování DVB přes UDP multicast? Při nějaké těžko popsatelné události začne VLC vyčerpávat paměť, dokud jej nezabiju. Do té doby jede VLC bez problémů. Prosím o pomoc. Mám vlc-0.8.6 na testing debianu. Díky.
11.2.2007 23:48 poli
Rozbalit Rozbalit vše Re: VLC DVB UDP multicast
Ano, problem je bug v VLC od verze 0.8 pro DVB karty. Smula je ze to nikdo neresi. Narazil jsem na lepsi soft: getstream http://www.mulder.franken.de/getstream-poempel/
5.3.2007 15:30 Kolyk
Rozbalit Rozbalit vše Re: VLC DVB UDP multicast
Díky moc za informaci.
19.2.2007 15:44 Migel
Rozbalit Rozbalit vše Lamy
Odpovědět | Sbalit | Link | Blokovat | Admin
A co třeba nějaký článek pro začínající lamy? Já jsem z tohohle článku nepochopil nic, co tady dělají nějaké příkazy? To přece není programovací jazyk kde se píše tuna příkazů ... já chci vysílat jednuduše, abych spustil program, vybral video, dal vysílat a aby se mi to ukládalo např. na http://mojeip:8080 nebo podobně, jako to dělají webkamery
26.1.2011 15:46 EnemyXP
Rozbalit Rozbalit vše Re: VLC - 4 (začínáme streamovat)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravím, mám takový problém, streamování mi funguje, jen nemůžu zprovoznit SAP oznamování. Firewall mám vypnutý a požadavky SAP přijímám na portu 9875, ale pod protokolem IPv6. Ve VLC se mi ze SAP informací nic neukáže. Problém je asi v tom, že to posílá v IPv6, ale nedaří se mi to změnit na IPv4. Víte někdo co s tím? Díky

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.