Ačkoli se TVheadend používá zejména pro příjem digitální televize DVB-T a DVB-S, lze do programu přidat prakticky libovolné množství dalších zdrojů obrazu a zvuku. V případě, že vlastníme některou z digitálních kamer umožňující přenos obrazu pomocí RTSP, lze takový zdroj obrazových dat do TVheadend přidat.
Ačkoli není na internetu problém získat popis funkcí programu a postup nastavení, přidání dalších zdrojů, které nemají přímou souvislost s televizním vysíláním může být oříškem.
Následující popis se bude týkat přidání IP kamery poskytující obrazová data přes RTSP. Předpokladem je funkční instalace TVheadend a IP kamera připojená do sítě LAN.
Postup integrace IP kamery se skládá z následujících kroků:
- Přidání IPTV sítě,
- vytvoření multiplexu obsahující obrazová data,
- namapování služby,
- nastavení EPG.
Přidání IPTV sítě
Ač se jedná o zdroj, který nesouvisí s DVB, budeme pokračovat podobně jako bychom přidávali DVB služby.
V okně Konfigurace > DVB Vstupy > Sítě klikneme na tlačítko Přidat a vybereme typ IPTV Network.
V následujícím dialogu vyplníme Název sítě. Ten může být libovolný. V mém případě je použit text Camera. Ostatní pole mohou zůstat nezměněna.
Vytvoření multiplexu obsahující obrazová data
V tomto kroku přistoupíme k definování vlastního zdroje obrazu.
Důležitým předpokladem je fungující IP kamera s možností zobrazení video obrazu pomocí RTSP. Tuto skutečnost vyzkoušíme např. programem VLC, ve kterém otevřeme příslušný síťový proud. Například obraz mé IP kamery je dostupný přes následující URL: rtsp://<ip adresa kamery>:554/user=admin&password=&channel=1&stream=0.sdp?real_stream.
Vedle služby TVheadend bývá dostupný také program FFMPEG, který slouží k manipulaci s multimediálním obsahem. Právě ten nám bude obrazová data převádět do formátu, kterému rozumí TVheadend.
V okně Konfigurace > DVB Vstupy > Muxy klikneme na tlačítko Přidat a vybereme síť, kterou jsme vytvořili v předchozím kroku.
Volbu EPG scan nastavíme na Zakázat. To proto, že síťový proud žádné EPG informace nebude obsahovat.
Nyní nás zajímá obsah pole URL. Právě zde uvedeme příkaz, který síťový proud převede do správného formátu. Nemusíme se bát, že by při práci neúměrně zatěžoval procesor našeho počítače. Neprovádí se prakticky žádná manipulace, jako např. transkódování.
Následující příkaz provede veškeré potřebné operace:
1 |
pipe:///usr/bin/ffmpeg -loglevel fatal -rtsp_transport tcp -i rtsp://ip_adresa_kamery:554/user=admin&password=&channel=1&stream=0.sdp?real_stream -codec copy -bsf:v h264_mp4toannexb,dump_extra -metadata service_provider=Pocaply -metadata service_name=PocaplyCAM01.HD -f mpegts pipe:1 |
Část příkazu rtsp://ip_adresa_kamery:554/user=admin&password=&channel=1&stream=0.sdp?real_stream
nahradíme za URL, přes které je přístupný síťový poud.
Pokud je použitý videokodek H.264, použijeme u parametru -bsf:v
nastavení h264_mp4toannexb
. Poukud se jedná o H.265 (HEVC), použijeme hevc_mp4toannexb
.
Vhodné je nastavit určitá metadata výsledného produktu. Jako service_provider jsem zadal umístění kamery, service_name obsahuje název programu, tak jej uvidíme v TVheadend a klientech (např. Kodi). Tento název je také důležitý v případě, že budeme používat vlastní EPG (Elektronický průvodce programem). EPG může obsahovat další informace o konkrétní IP kameře, jako je popis umístění, dostupnost, atd.
Vhodné je na systému, kde je TVheadend nainstalován, provést test na příkazovém řádku. Pro test vynecháme parametr -loglevel fatal
a URL ohraničíme uvozovkami:
1 |
/usr/bin/ffmpeg -rtsp_transport tcp -i "rtsp://ip_adresa_kamery:554/user=admin&password=&channel=1&stream=0.sdp?real_stream" -codec copy -bsf:v h264_mp4toannexb,dump_extra -metadata service_provider=Pocaply -metadata service_name=PocaplyCAM01.HD -f mpegts pipe:1 >cam_out.ts |
Pokud ffmpeg
okamžitě neskončí, po cca 30 s stiskneme Ctrl+C. Jestliže má výsledný soubor cam_out.ts nenulovou velikost, můžeme příkaz použít.
U parametru Jméno muxu zadáme pojmenování našeho multiplexu. Volba jména je čistě na nás.
Parametr -rtsp_transport tcp
určuje, že bude síťový proud přenášen pomocí TCP. Ve výchozím stavu, tedy bez použití tohoto parametru, je použito UDP. V mém případě docházelo v případě UDP při přenosu přes VPN k značné degradaci videa. Za použití TCP tento problém zmizel.
Pokud se podíváme na URL RTSP, část stream=0.sdp u mé IP kamery slouží k výběru video proudu. Na výběr jsou dva, přičemž jejich nastavení se provádí dodaným software. Ve výchozím stavu je stream=0.sdp v HD kvalitě a stream=1.sdp v SD kvalitě. S tím souvisí také příslušný datový tok, který je v případě SD mnohem menší.
Namapování služby
Nyní máme vytvořeny síťové zdroje a potřebujeme už pouze vytvořit/namapovat služby/programy.
V okně Konfigurace > DVB Vstupy > Sítě označíme vytvořenou síť a klikneme na tlačítko Vynutit scan.
Hodnota ve sloupci # Služeb by měla být stejná jako # Muxů. To proto, že každý multiplex obsahuje pouze jednu službu/program.
V okně Konfigurace > DVB Vstupy > Služby by měly být zobrazeny naše nově definované služby. Po jejich označení, a stisku tlačítka Mapuj vybrané, se zobrazí dialog, který slouží pro jejich namapování na programy.
Nastavení EPG
Zdroj EPG nemusíme nastavovat. Pouze v případě, že chceme programy obohatit o další informace, použijeme EPG.
Vytvoříme soubor /usr/bin/tv_grab_file_cam, který bude obsahovat kompletní EPG pro naše programy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/bin/bash if (( $# < 1 )) then echo ' <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE tv SYSTEM "xmltv.dtd"> <tv source-info-url="http://brichacek.net/" source-info-name="IP Camera" generator-info-name="XMLTV/$Id: manual,v 1.0 2017/02/03 15:21:41 rmeden Exp $" generator-info-url="http://www.xmltv.org/"> <channel id="Camera.PocaplyCAM01.SD"> <display-name>PocaplyCAM01.SD</display-name> </channel> <channel id="Camera.PocaplyCAM01.HD"> <display-name>PocaplyCAM01.HD</display-name> </channel> <programme start="20170101003000 -0200" stop="20301231010000 -0200" channel="Camera.PocaplyCAM01.SD"> <title lang="cs">Kamera Pocaply CAM01 (SD)</title> <desc lang="cs">Test kamery SD</desc> <date>20170101</date> <category lang="en">Camera</category> </programme> <programme start="20170101003000 -0200" stop="20301231010000 -0200" channel="Camera.PocaplyCAM01.HD"> <title lang="cs">Kamera Pocaply CAM01 (HD)</title> <desc lang="cs">Test kamery HD</desc> <date>20170101</date> <category lang="en">Camera</category> </programme> </tv>' exit 0 fi printf "tv_grab_cam (camera EPG)\n" |
a nastavíme jej na spustitelný:
1 |
[root@linux ~]# chmod +x /usr/bin/tv_grab_file_cam |
Po restartu TVHeadend bude přidán mezi zdroje EPG:
Zde také provedeme jeho aktivaci.
Soubor vrací EPG ve formátu XML. V příkladu je uvedeno nastavení dvou kanálů s programy. Každý kanál = služba. Hodnota atributu channel_id souvisí s názvem naší služby, jak je uvedena při definici multiplexu, příkazu ffmpeg. Pokud nejsou hodnoty shodné, je nutné provést ruční namapování:
Závěr
Pokud vše proběhlo bez problému, můžeme v našem oblíbeném HTS klientovi zkusit zobrazit obraz snímaný naší IP kamerou.
S vytvořenými programy se pracuje stejně jako s programy DVB.
EPG obsahuje pouze jediný pořad, který má trvání od 1. 1. 2017 do 31. 12. 2030:
This has help me a lot, thank you very much!
Zdravím a děkuju za návod. Mám otázku, dá se do jednoho muxu nějak dostat víc streamů?
Popravdě, podobný požadavek jsem neřešil, ale dle mého názoru to tak jednoduché není. Nicméně to není potřeba, jen se musí vytvořit více jednotlivých streamů.
Např. v případě DVB-T je ke klientovi přenášen pouze vybraný stream, nikoli celý mux, proto takový požadavek pro kamery postrádá smysl.