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 III

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

player-icon_1.jpg

V předchozích dílech jste získali znalosti pro jednoduché i pokročilé streamování multimediálních dat. Veškeré příklady, které jsem vám ukázal, mají drobný neduh. Každý z nich spustí jednu instanci VLC. Dnes se s vámi podělím o znalost provozu několika streamů v jediné instanci aplikace pomocí VideoLAN Manageru (VLM), který je součástí VLC, a navíc umožňuje jednu specialitku v podobě „streamu na přání“ (VOD).


Broadcast

VideoLAN Manager rozlišuje dva druhy streamů:

  • broadcast – volba pro stream, který může spouštět/zastavovat pouze správce nastavující vysílání a klient nemá žádnou kontrolu nad ovládáním streamu
  • vod – volba pro stream, který správce definuje, ale klient jej spouští

Konfigurační soubor pro VLM obsahuje podobný zápis a používá se pro něj přípona vlm.

new stream1 broadcast enabled
setup stream1 input hudba.mp3
setup stream1 output #std{access=http,mux=ts,dst=:8080}
control stream1 play

Takovýto zápis je totožný s příkazem:

vlc hudba.mp3 --sout '#std{access=http,mux=ts,dst=:8080}'

Pro načtení konfiguračního souboru slouží parametr --vlm-conf a použití je následovné:

vlc --vlm-conf konfigurace.vlm

Začátek konfiguračního souboru:

  • new – vytváří nový broadcast, vod nebo schedule element 
  • stream1 – název streamu, který musí být v celém souboru unikátní a nesmí být použito názvu "media" a "schedule"
  • enabled/disabled – zapíná použitý element, při použití disabled nelze stream nikterak spustit

Broadcast – nastavení

Parametr setup nabývá těchto voleb:

  • input – zdroj multimediálních dat
  • option – slouží pro zadání dodatečných nastavení
  • output – definuje výstupní metodu

Parametr control určuje stav streamu pomocí voleb play, stop, pauseseek.

Broadcast – příklady

new stream2 broadcast enabled loop
setup stream2 input hudba.mp3 
setup stream2 option loop
setup stream2 output #standard{access=http,mux=ts,dst=:8080} 
control stream2 play

Příklad streamu s funkcí loop

Vysílání pomocí broadcast není příliš vhodné pro jednotlivé soubory. I při použití loop funkce totiž přehrávání streamu skončí s koncem souboru a poté je nutné stream znovu naladit. Broadcast se proto více používá v kombinaci s časovým plánem (schedule) nebo pro zdroje se stálým tokem dat (např. DVB).

new stream3 broadcast enabled
setup stream3 input dvb-t://frequency=746000000:bandwidth=8:dvb-adapter=0
setup stream3 option ts-es-id-pid
setup stream3 option programs=772,774,1025,1026,5633
setup stream3 output #duplicate{dst=std{access=http,mux=ts,dst=:8080},
 select="program=772",dst=std{access=http,mux=ts,dst=:8081},
 select="program=774",dst=std{access=http,mux=ts,dst=:8082},
 select="program=1025",dst=std{access=http,mux=ts,dst=:8083},
 select="program=1026",dst=std{access=http,mux=ts,dst=:8084},
 select="program=5633"}
control stream3 play

Zápis nastavení pro broadcast stream DVB-T signálu

Možná vás právě napadlo používat VLM pro elegantní přeladění vysílaného obsahu DVB-T, kdy u jedné frekvence nastavíte control na hodnotu play a u ostatních frekvencí na hodnotu stop. Takovýto počin však není funkční ani ve VLC 2.0.8. Ve většině případů docházelo při zastavení streamu DVB-T signálu k zamrznutí celé aplikace a místo spuštění streamu s jinou frekvencí bylo nutné vynucené ukončení VLC (kill).

Schedule – nastavení

Vysílání v zadaný čas (schedule) je dostupné pouze pro broadcast stream.

Parametr setup nabývá těchto voleb:

  • date – nastavuje první spuštění streamu ve formátu:

rok/měsíc/den–hodina:minuty:vteřiny

  • period – nastavuje prodlevu pro opětovné spuštění streamu ve formátu:

rok/měsíc/den–hodina:minuty:vteřiny

  • repeat – nastaví počet opakování streamu
  • append – vykoná příkaz, který většinou spustí nebo zastaví stream, ale použít lze jakýkoliv příkaz VLM

VLM nepoužívá kalendářní měsíce, ale počítá měsíc jako 30 dní.

Schedule – příklady

new stream4 broadcast enabled 
setup stream4 input video.mpg 
setup stream4 option sout-udp-caching=3000 
setup stream4 option ttl=3 
setup stream4 output #std{access=udp,mux=ts,dst=224.0.0.0,sap,name=video} 

new plan1 schedule enabled 
setup plan1 date 2013/10/8-17:45:00 
setup plan1 period 0/0/1-0:0:0 
setup plan1 repeat 5 
setup plan1 append control stream4 play

Příklad streamu s nastaveným časovým plánem bude poprvé spuštěn 10. října 2013 v 17:45 a poté bude repríza streamu po následujících pět dní ve stejný čas (period 0/0/1-0:0:0).

V minulých dílech jsme hodnoty globálním parametrům předávali pomocí mezery (např. --sout-udp-caching 3000). Ve VLM zadáváme globální parametry bez počátečních pomlček a hodnotu jim předáváme pomocí "=" (sout-udp-caching=3000).

new stream3 broadcast enabled
setup stream3 input dvb-t://frequency=746000000:bandwidth=8:dvb-adapter=0
setup stream3 option ts-es-id-pid
setup stream3 option programs=772,774,1025,1026,5633
setup stream3 output #duplicate{dst=std{access=http,mux=ts,dst=:8080},
 select="program=772",dst=std{access=http,mux=ts,dst=:8081},
 select="program=774",dst=std{access=http,mux=ts,dst=:8082},
 select="program=1025",dst=std{access=http,mux=ts,dst=:8083},
 select="program=1026",dst=std{access=http,mux=ts,dst=:8084},
 select="program=5633"}

new start_dvb schedule enabled 
setup start_dvb date 2013/10/8-18:00:00 
setup start_dvb period 0/0/1-0:0:0 
setup start_dvb append control stream3 play

new stop_dvb schedule enabled 
setup stop_dvb date 2013/10/8-23:30:00 
setup stop_dvb period 0/0/1-0:0:0 
setup stop_dvb append control stream3 stop

Příklad televizního streamu, který se poprvé spustí 10. října 2013 v 18:00 a tentýž den se ve 23:30 vypne:

  • chybějící nastavení repeat způsobí vykonávání časového plánu donekonečna (stream se bude zapínat a vypínat každý den ve stejnou dobu – period 0/0/1-0:0:0)
  • takovéto spouštění a zastavování DVB streamu nezpůsobuje zamrznutí aplikace jako ruční zastavování pomocí GUI/web/telnet rozhraní

VOD

Video On Demand (video na přání) se vysílá pomocí protokolu RTSP, který dává uživateli možnost řídit (spouštět, pozastavit, zastavit) přijímaný stream. Chcete-li nabízet streamy v podobě VOD, je nutné spustit VLC s podporou protokolu RTSP pomocí parametrů --rtsp-host a --rtsp-port.

vlc --rtsp-host 10.0.0.25 --rtsp-port 5554 --vlm-conf konfigurace.vlm

Výchozí nastavení RTSP ve VLC naslouchá na všech rozhraních na portu 554. IP uvedená v příkladu je síťová adresa počítače, odkud se bude vysílat.

U VOD nelze použít funkcí loop, control a nenastavuje se výstup zdroje. Tak jako je broadcast vhodný pro stream ze zařízení, je vod vhodné pro streamování multimediálních souborů.

new stream5 vod enabled
setup stream5 input film.mpg

Takovýto stream na přání spustíte zadáním rtsp://10.0.0.25:5554/stream5

VOD umí bezproblémově pracovat jen s formáty kompatibilními s TS a PS kontejnery.

To není vše!

Tímto jsem téměř vyčerpal své znalosti, nikoliv však možnosti aplikace. V seriálu uvedené příklady jsou otestovány na verzích 2.0.3 a 2.0.8 v systému Debian 7.1 a Mint. V době psaní byla uvolněna nová stabilní verze VLC 2.1.0, která přináší některá vylepšení streamování (nové kodeky, protokol atd.). Pro podrobnější informace doporučuji navštívit oficiální stránky projektu, kde naleznete i originální dokumentaci.

Nahoru

Odkazy

Příspěvky

Jak ve VLC streamovat multimédia – díl III
Jan 4. 12. 2013, 23:19:06
Odpovědět  Odkaz 
Dakujeme, za naozaj hodnotny a informaciami nabity clanok (serial) !!!
Vyznat sa v tom vsetkom a k tomu si dat aj tu namahu to spisat pre ostatnych, dole klobuk ...
Jak ve VLC streamovat multimédia – díl III
Míra 6. 12. 2013, 08:55:50
Odpovědět  Odkaz 
S VLC se potýkám pár týdnů jelikož testuji kontinuální streamování jednotlivých videoklipů - viz. http://klik-tv.net/. Pořád to není ono a při přechodu na nový klip se stream trochu kousne. VLC jakoby neumí jednotlivé klipy spojit do jednoho proudu bez přerušení. Nejvíce je to vidět při zapouzdření do flv, který se pak přehrává na webu ve Flowplayeru. Bud rád za každou radu, která by mi pomohla vylepšit moje vysílání.
Vladislav Konopík Re: Jak ve VLC streamovat multimédia – díl III
Vladislav Konopík 6. 12. 2013, 14:13:56
Odpovědět  Odkaz 
Z takto strohým popisem se rady zřejmě nedočkáte. Zkuste uvést verzi softwaru a zápis nastavení streamu. Třeba Vám poté pomůže nějaký čtenář, který řešil něco podobného, případně se mohu pokusit zprovoznit Vaše nastavení na svém hardwaru a daný problém řešit lokálně.
Re: Re: Jak ve VLC streamovat multimédia – díl III
Míra 6. 12. 2013, 18:03:41
Odpovědět  Odkaz 
Děkuji za vaši reakci. Budu velice rád, když to moje počínání budu moci s někým prokonzultovat :) Před tím, než jsem se pustil do streamu, jsem vlc znal pouze jako přehrávač. Informace jsem lovil na netu kde se dalo a experimentoval jsem.

Základ je playlist.
Streamy spouštím ve Windows souborem bat. Vlc mám v poslední verzi.

1. stream - z playlistu, neveřejný,
:sout=#transcode{vcodec=mp2v,vb=900,scale=1,acodec=mpga,ab=192,samplerate=44100,afilter=gain,sfilter=marq:logo,soverlay}:http{mux=ts,dst=:číslo portu/} :file-caching=600

2. stream - flv pro Flowplayer na webu, větší kvalita
:sout=#transcode{vcodec=h264,vb=800,fps=15,width=854,height=480,acodec=mp3,ab=128,channels=2,samplerate=44100,afilter=gain,sfilter=marq:logo,soverlay}:duplicate{dst=std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:číslo portu/stream.flv}

3 stream - flv pro Flowplayer na webu, nežší kvalita, zde neberu jako zdroj playlist ale ip adresu prvního neveřejného streamu. Je to hlavně kvůli titulkům a logu.
:sout=#transcode{vcodec=h264,vb=500,fps=15,width=428,height=240,acodec=mp3,ab=128,channels=2,samplerate=44100}:duplicate{dst=std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:číslo portu/stream2.flv}

Je to možná trochu krkolomné, ale funguje to.
Spuštěním souboru bat se spustí 3x vlc a v každém jede jeden stream, podle toho jak jsem to rozepsal.
Problém je při přechodu na další klip. Trochu se to vždy zasekne a flowplayer načítá další klip. Někdy začne dřív hrát hudba než naskočí obraz. KLipy v playlistu jsou v kodeku h264, zvuk jako mp3 192Kbps.
Ideální by bylo kdyby playlist šel v streamu jako souvislý proud, bez načítání jednotlivých klipů.
Pokud by někdo chtěl napsat mimo tuto diskuzi, tak lze na tento mail klik@klik-tv.net .
Vladislav Konopík Re: Re: Re: Jak ve VLC streamovat multimédia – díl III
Vladislav Konopík 9. 12. 2013, 12:22:45
Odpovědět  Odkaz 
Popravdě řečeno, trochu jsem se v tom ztratil :-). Zkusím to tedy popsat tak, jak to pochopil můj selský rozum.

1) vlc spouští playlist obsahující soubory stejného formátu (h.264) a slouží jako zdroj dat pro další streamy
- překódování playlistu do mp2v kontejneru není zbytečné (odstraní to problém s mnoha různými soubory formátu h.264 - převážně se to týká rozlišení)
- jen bych popřemýšlel o nastavení rozlišení streamu již v tomto překódování

(protože používáte pro nastavení streamu GUI, uvádím i zápis pro toto rozhraní)

:sout=#transcode{vcodec=mp2v,vb=2048,width=854,height=480,acodec=mpga,ab=128,channels=2,samplerate=44100}:http{mux=ts,dst=:8080/tv} :sout-keep

- vyšší datový tok pro MPEG2 formát vaše cpu téměř nezaznamená (dlouholetá podpora v instrukcích cpu), ale zlepší kvalitu výstupu
- ab=192 je zbytečné, neboť jej pak stejně nepoužíváte


2) vlc načítá stream ve formátu MPEG2 (ts kontejner) a šíří jej dále jako FLV pro Flowplayer
- zde jsem se ztratil u modulu duplicate (není potřeba jej použít), zápis může být takto: (to samé i ve třetí instanci vlc)

:sout=#transcode{vcodec=h264,vb=800,fps=15,width=854,height=480,acodec=mp3,ab=128,channels=2,samplerate=44100,afilter=gain,sfilter=marq:logo,soverlay}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081}

- nebo v případě použití již nastaveného rozlišení v prvním streamu a modulu duplicate, může být zápis takovýto:

:sout=#duplicate{dst="transcode{vcodec=h264,vb=900,fps=15,scale=1,acodec=mp3,ab=128,channels=2,samplerate=44100,afilter=gain,audio-sync,sfilter=marq:logo,soverlay}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/velky_stream}",dst="transcode{vcodec=h264,vb=500,fps=15,scale=0,5,acodec=mp3,ab=128,channels=2,samplerate=44100,afilter=gain,audio-sync,sfilter=marq:logo,soverlay}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/polovicni_stream}"

- tímto nastavením není potřeba spouštět i další vlc
- audio-sync zajistí synchronizaci zvukové a video složky, což by mohlo, ale taky nemusí, zamezit problému zvuku bez obrazu

Ohledně zasekávání při načítání dalšího klipu se mi problém nepodařilo řádně identifikovat, natož odstranit. Vypadá to však na používání cache.
Vlc má defaultně nastaveno -file-caching na 0,3s (máte nastaveno 0,6), pro výstup streamu používá 1,5s (v nastavení - Proudový výstup/Stream output muxer caching) a nějakou cache bude mít i Flowplayer. Možná je problém právě zde, ale i při různých nastaveních velikosti cache se stream choval stále stejně (k zásekům docházelo vyjímečně). Rozhodně nedoporučuji cache vypínat.

Pokud přesto potřebujete plynulost spuštěného streamu, momentálně mě napadá jen jedna možnost. Předpřipravit si stream pomocí parametru --sout-file-append (viz první díl tohoto seriálu odstavec Standard - příklady / access=file). Můžete tak ze všech klipů vytvořit jediný soubor (i již překódovaný) a ten poté streamovat. Uživatelé Vašeho streamu stejně nemají možnost jednotlivé klipy přeskakovat (http to neumožňuje), pokud však nepoužíváte pokročilé skripty, které by mě zajímaly.

Avšak, pokud vše funguje, klidně to tak ponechejte. Žádnou záludnost (až na duplicate) jsem v tomto nastavení nespatřil. Snad Vám tato reakce k něčemu poslouží.
Jak ve VLC streamovat multimédia – díl III
Míra 29. 12. 2013, 10:51:27
Odpovědět  Odkaz 
Děkuji moc za rady. Streamy jsem upravil. Opravdu si moc vážím toho, že jste se mým příspěvkem zabýval :)
Jak ve VLC streamovat multimédia – díl III
Lamicka 25. 07. 2014, 13:09:13
Odpovědět  Odkaz 
Dobry den,

vedel by autor jak duplikovat mosaic a restreamovat ho dale? Vytvoril jsem si vlm konfiguraci, kdy mam nekolik rtsp streamu v jednom okne=vlc mosaic. Ted bych potreboval tuto mosaic konfiguraci streamovat dale do site klientum pres udp ci http to je jedno. Jak na to?

Odpovědět

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