• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 5 Hlas(ů) - 3.4 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Tvheadend a IPTV
#1
Před časem jsme se tady podělil o zkušenosti z příjmu internetových rádií přes Tvheadend, viz http://www.xbmc-kodi.cz/prispevek-tvhead...tova-radia, a nyní nastal čas, udělat něco podobného s IPTV.

První, co každého napadne, proč pro IPTV používat Tvheadend, když máme jednoduchý a bez problémů fungující IPTV Simple Client. Důvod je ten, že je to právě jen klient. To znamená, že není možné například používat standardní funkce timeshift a nahrávání a vše, co je s nimi v Kodi spojené. Další důvod je, že přesunutím přijmu a zpracování IPTV streamů na Tvheadend backend vyřešíme všechno takříkajíc na jedno místě a příjem televizních programů ze streamů IPTV pak z uživatelského hlediska probíhá úplně stejně, jako z jiného standardního Tv vysílání (DVB-S, DVB_T, ...).

Většinou se předpokládá, že Tvheadend umí s IPTV streamy pracovat běžně a neměl by v tom být žádný problém. Záleží samozřejmě, o jaký stream jde. Tvheadend si dokáže poradit pouze ze streamem z ts kontejneru. Pokud takový stream nemáte, tak ho Tvheadend nedokáže přijmout. V takovém případě je pomoc snadná, podobně jako u internetových rádií (podívejte se na odkaz, který jsem uvedl výše) pomůže "přebalení streamu" do požadovaného formátu kontejneru.

Roura

Příkaz pro přebalení do ts kontejneru je v případě IPTV streamu:

pipe://ffmpeg -fflags +genpts -i STREAM -vcodec copy -acodec copy -f mpegts -mpegts_service_type digital_tv pipe:1

STREAM: váš IPTV stream z původního m3u8 souboru

Pokud chcete větší komfort a víc informací, je možné do kontejneru zabalit i další infromace, které se pak zobrazí v GUI Tvheadend případně na obrazovce v Kodi, když si dáte zobrazit Informace o PVR. Pak příkaz pro zabalení streamu vypadá takto:
 
pipe://ffmpeg -fflags +genpts -i STREAM -vcodec copy -acodec copy -metadata service_provider=PROVIDER -metadata service_name=SERVICE -f mpegts -mpegts_service_type digital_tv pipe:1

PROVIDER: libovolné textové označení providera (bez mezer), dobré je tam umístit označení providera, např. zapni.tv
SERVICE: libovolné textové označení služby (bez mezer). Já tam většinou umisťuji text jako ve STREAM, abych pak na obrazovce v Kodi, když si dám zobrazit Informace o PVR, viděl adresu streamu.

Je samozřejmě možné, že narazíte na streamy, které poté, co je proženete výše uvedenou "rourou", Tvheadend nepřijme. Pak musí nastoupit analýza streamu, případně metoda pokus-omyl, a pomocí parametrů překódování pro ffmpeg převést obsah streamu do potřebného tvaru. K tomu se vrátím někdy později. Já jsem ale zatím u drtivé většiny IPTV streamů, když už nebyly přímo ve tvaru ts kontejneru, vystačil s výše uvedenou jednoduchou rourou.

Parametrizace TVheadend backend

V této části vás odkážu na už zmiňovaný příspěvek pro příjem internetových rádií. Všechny další kroky jsou totiž shodné.  Musíte si vytvořit pomocí Konfigurace -> DVB Inputs -> Network novou síť. Ta může být buď IPTV Automatic Network nebo IPTV Network, a pak podle typu sítě buď zadat odkaz na .m3u8 soubor (u "automatické" sítě) nebo ručně vytvořit a zadat parametry pro jednotlivé MUX-y (u obyčejné sítě).

EPG a Loga

Tady se nic nezměnilo, všechno funguje stejně, jako u internetových rádií.

K EPG jen malá poznámka. Ve své instalaci jsem jen změnil zdroj EPG. Pro programy přijímané z internetu si teď EPG vytvářím sám, pomocí addon WebGrab+Plus, jako zdroj používám sms.cz. To ale s vlastní problematikou Tvheadend a IPTV nijak nesouvisí.

Ukázky z Kodi

EPG ve kterém se potkávají programy z DVB-T a z internetu. Do čísla programu 37 je zdrojem vysílání i EPG DVB-T, od čísla 61 jsou programy i EPG z internetu.
[attachment=2606] [attachment=2607]

Ukázka aktivovaného timeshift u programu z internetu. Funguje to, stejně jako nahrávání, naprosto očekávaně, bez sebemenších problémů.
[attachment=2608]

Známé problémy a nevyřešená témata

V současné době všechno funguje. Kupodivu, ani s rychlostí přepínání kanálů nejsou problémy, jako u internetového rádia. Přepnutí mezi programy cca 1-2 vteřiny.

Závěr

Pokud chcete mít mít při příjmu IPTV stejný komfort jako u běžné Tv, včetně funkce nahrávání a timeshiftu, tak je příjem IPTV přes Tvheadend určený právě pro vás. Pravda, zaplatíte za to poněkud náročnější parametrizací. Velkou výhodu pocítíte v případě, pokud provozujete více klientů. Tam naopak v případě parametrizace a správy klientů čas ušetříte. Vlastně se o klienty nebudete vůbec starat.

Edit 2017-07-03: A na to nejdůležitější jsem zapomněl. Ocení to ti, co mají v domácí síti více uživatelů. Pokud se více uživatelů rozhodne na svých klientech sledovat stejný stream, nebo také v případě, že si jeden uživatel pustí live stream, který se současně i nahrává, tak se ze zdroje z internetu samozřejmě přenáší pouze stream jeden! Rozdělí se až v Tvheadend backendu.

Edit 2018-09-09: Upravené parametry v příkazu pipe://...
 
Citovat
#2
Já jako nejvytší výhodu vidím timeouty a možnost přiřadit ke kenálu více zdrojů - lze tím vytvořit super spolehlivé řešení, kdy pokud na kanál nabalíte dva či tři IPTV zdroje, DVB-T a třeba ještě satelit, tak se prostě nestane, že by to nehrálo :) Bude to dokola zkoušet tak dlouho, dokud něco funkčního nenajde :)
 
Citovat
#3
@mobilemanic Máš pravdu. A neřekl bych, že to někdy napíšu. Právě tuto vlastnost jsem dřív nepovažoval za důležitou. Mám čtyři přijímače a přijímám DVB-T z UPC, teď si hraji s jedním DVB-T2. Hodně věcí se automaticky nahrává, sice jen s krátkou dobou expirace, ale když k tomu připočtu, že si často někdo něco nastaví ručně (a díky Tvheadend je to strašně jednoduché), tak se občas dostáváme do problému s volnými přijímači. Možnost kombinovat zdroje to pomáhá řešit. Pro většinou zdrojů z DVB-T mám i zálohu na internetu, takže jsem hlášku, že není volný přijímač, už neviděl pěkně dlouho. A podobné to bude i při přechodu na DVB-T2. Žádné odpojit jedno a zapojit druhé. Prostě teď budu přidávat DVB-T2 přijímače a jednoho dne pak zase začnu ubírat DVB-T přijímače. Jen je třeba si udělat pořádek v prioritách, což je někdy docela dilema. Už si pár uživatelů všimlo, že někdy mají lepší obraz a jindy zase horší. Kvůli zátěži internetového připojení řadím DVB-T muxy dopředu, takže pokud mám ten samý program i v HD na internetu, nedostane se na něj vždy.  6
 
Citovat
#4
@JiRo: Suprový návod s hezkým vysvětlením, třeba o restreamování jednoho kanálu :) Díky tobě a dalším tohle forum začíná mít kvalitní obsah Big Grin
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
_____
i3 Haswell + Arch Linux + Docker (Tvheadend + WG + Home-Assistant + Deconz + LetsEncrypt ) + Samba Share
Apple TV (Infuse, TvhClient), Apollo Lake Mini PC (Kodi 18.4)
 
Citovat
#5
@marhycz I díky Tobě!
 
Citovat
#6
Jde v Tvheadend změnit rozlišení (snížit), streamu, případně v nastavení Kodi?
 
Citovat
#7
borecek: Pokud máš na serveru kde je tvheadend dostatek výkonu, tak ano - lze vytvořit nový Streaming profil s nastavením Transcode => Tam je možné nastavit nový kodek, rozlišení, apod... Pak tomu uživateli v TVHeadendu nastavíš, aby používal tento profil a pojede to v předělaném rozlišení/kodeku...
 
Citovat
#8
Příjemcem jsem já, a ve full hd se mi to na telefonu seká, streamy 720 jedou v pohodě. Rád bych všechny streamy snížil právě na těch 720, pokud to tedy jde. Dík.
 
Citovat
#9
@borecek V konfiguraci Tvheadend si vybereš předdefinovaný profil nebo si vytvoříš svůj vlastní (můžeš klonovat ty předdefinované) a nadefinuješ si co potřebuješ.
[attachment=2713]

Můžeš si to hned vyzkoušel přes webové api. Například zadání http://media.jaluvci.cz:9981/playlist?pr...c-matroska ti stáhne na počítač playlist se všemi programy, které jsou pro daného uživatele povoleny (to se dá nastavit v profilu uživatele výběrem podle štítků) a streamy budou kódovány podle parametrů daného profilu (v tomto případě tedy webtv-h264-aac-matroska).

Samozřejmě překódování něco stojí a musíš počítat, že se to projeví na zatížení počítače, kde běží Tvheadend server.
 
Citovat
#10
Dik parádní návod a super Tvheadend. To ste mě zase ukázali volovinu už druhej den nespím. Už se mě povedlo rozběhat DVB-T a rádia :-D v pondělí snad přijde DVB-S2 tuner tak ještě s tím si budu moct pohrát.. Jen tu IPTV nevyzkouším pač sco sem kdysi měl podu tak nefunguje už :-D a satelit prevedenej do IPTV to nechce sežrat bych tam ty streamy musel rvát po jednom.

Pokud bude fungovat dvb-s2 jak si představuji tak mám v plánu vyřadit satelity v celým baráku a pěkně všechno spravovat z jednoho místa v Tvheadend. Tak sem zvědavej jak to bude fungovat
  • Rarpberry 3 (Libreelec 7.90.004, Openelec - 6.0.3)
  • Nvidia Shield tv (Android 6.0 - SPMC)
  • NAS (Synology DS1815)
 
Citovat
#11
Několik postřehů k mapování stop (streamů) v ffmpeg, které otevřel @mobilemanic v tématu http://www.xbmc-kodi.cz/prispevek-tvheadend-a-placena-iptv-idea-reseni v příspěvku http://www.xbmc-kodi.cz/prispevek-tvheadend-a-placena-iptv-idea-reseni?pid=29338#pid29338. Pokračuji o tomto tématu v tomto vláknu, kam to podle mne patří více... 

Testuji O2TVGO playlist vytvořenýv @Martorv Tvheadend a narazil na potřebu mapování audio streamů. Jednotlivé streamy O2TVGO jsou ve formátu Program stream. Např. pro kanál JimJam ffmpeg bez explicitního mapování vybere program s nejlepší kvalitou videa (níže je to ve výpisu ffmpeg Program 3) a v něm audio stopu anglickou, patrně proto, že má nižší číslo než česká (obě mají stejnou kvalitu). To je samozřejmě nežádoucí (zvlášť u dětského kanálu). Myslel jsem si, že prohodím jen pořadí audio stop, ale tak to nefunguje. Pokud se zadá alespoň jeden příkaz pro mapování streamů, musí se pak explicitně zadat mapování všech streamů, v tomto případě tedy i videa! Pokud ne, tak se do výstupního TS streamu vloží pouze audio streamy, což spolu s kombinací parametru ffmpeg -mpegts_service_type digital_tv způsobí, že se služba pro tento stream vůbec nevytvoří. Proto je bezpodmínečně třeba v tomto případě explicitně mapovat i video.

Originál program stream JimJam v O2TVGO:
Kód:
Input #0, hls,applehttp, from 'http://.../97-tv-tablet.m3u8':
 Duration: N/A, start: 78661.406133, bitrate: N/A
 Program 0
   Metadata:
     variant_bitrate : 400000
   Stream #0:1: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 256x144 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
   Metadata:
     variant_bitrate : 400000
   Stream #0:2(cs): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 60 kb/s (default)
   Metadata:
     comment         : Czech
     variant_bitrate : 400000
   Stream #0:0(en): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp, 44 kb/s
   Metadata:
     comment         : English
     variant_bitrate : 400000
 Program 1
   Metadata:
     variant_bitrate : 800000
   Stream #0:4: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
   Metadata:
     variant_bitrate : 800000
   Stream #0:5(cs): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 60 kb/s (default)
   Metadata:
     comment         : Czech
     variant_bitrate : 800000
   Stream #0:3(en): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp, 44 kb/s
   Metadata:
     comment         : English
     variant_bitrate : 800000
 Program 2
   Metadata:
     variant_bitrate : 1400000
   Stream #0:7: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 720x404 [SAR 1:1 DAR 180:101], 25 fps, 25 tbr, 90k tbn, 50 tbc
   Metadata:
     variant_bitrate : 1400000
   Stream #0:8(cs): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 93 kb/s (default)
   Metadata:
     comment         : Czech
     variant_bitrate : 1400000
   Stream #0:6(en): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp, 57 kb/s
   Metadata:
     comment         : English
     variant_bitrate : 1400000
 Program 3
   Metadata:
     variant_bitrate : 2450000
   Stream #0:10: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
   Metadata:
     variant_bitrate : 2450000
   Stream #0:11(cs): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 93 kb/s (default)
   Metadata:
     comment         : Czech
     variant_bitrate : 2450000
   Stream #0:9(en): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp, 57 kb/s
   Metadata:
     comment         : English
     variant_bitrate : 2450000

Aby to tedy dobře zafungovalo, je třeba do řetězce vstupních parametrů ffmpeg zadat v tomto případě sekvenci:

-map 0:10 -map 0:11 -map 0:9

Pořadí příkazů map pak v případě audio streamů určuje pořadí výstupních audio streamů, tzn. český (11) je první a anglický (9) druhý.

Zarazilo mě, proč si český stream nevybral přehrávač sám. Patrně proto,  že ve vstupním Program stream není jazyk definovaný. Jazyky streamů jsou tam sice v položce comment uvedeny, ale to zřejmě pro automatickou funkci výběru jazyka nestačí.  Pokusil jsem se identifikaci i název jazyků stop do streamů vnutit, použil jsem v různých kombinacích a variantách identifikace a číslování streamů příkazy typu:

-metadata:s:a:0 lang=cze -metadata:s:a:0 title="Czech"

ale na straně Kodi to nemělo žádný efekt. Stále se při přepínání audio stopy zobrazí jen správně formát (stereo), ale název jazyka stopy nebo její označení chybí.

Má někdo s tímto zkušenosti?
 
Citovat
#12
Rozšířené parametry IPTV playlistu - řádek #EXTINF:

Ne úplně všechny funkce Tvheadend jsou dokonale zdokumentovány. Při svých pokusech s IPTV jsem narazil na problematiku potřeby předávání parametrů z playlistů do parametrů MUX-ů a z nich do služeb i vytvořených programů. Popis a dokumentace je (či byla) velmi skoupá (i když se to postupně snad začíná zlepšovat), a tak nastoupila metoda pokus - omyl, doplněná cíleným hledáním. Vycházel jsme z obecnějších pravidel tvroby playlistů (použité např. u IPTV Simple Client), protože jsme předpokládal, že se patrně tvůrci Tvheadend jimi budou řídit. Postupně jsem dospěl ke zjištěním, se kterými vás chci seznámit.

Obecný tvar prvního řádku definice zdroje IPTV je následující:

#EXTINF:-1 parametr1="hodnota1" parametr2="hodnota2" ...[,jméno_programu]

v současné době jsou definovány tyto paramatery s významem hodnoty:
  • m3u-name - jméno_programu. Je to alternativa k možnosti zadání jména programu, následujícím za čárkou v závěru řádky. Přenese se do příslušného MUX-u, položky Název služby: a bude dále použito jako default název programu přiřazenému této službě.
  • tvh-chnum - číslo programu. Zadaná hodnota se přičte hodnotě položky parametrů sítě Počáteční číslo programu:. Aby se číslo použilo, nesmí být v parametrech sítě povolen parametr Ignorovat čísla programů od poskytovatele:. V opačném případě bude použito sekvenční číslování kanálů podle pořadí v playlistu.
  • tvg-logo - odkaz (URL) na soubor icony kanálu. Přenese se do příslušného MUX-u, položky URL ikony:. Pokud není zadáno, použije se ikona, resp. cesta k ní, zadaná v základním nastavení TVH
  • tvh-tags - štítky daného programu (oddělovač při zadání více štítků pro jeden kanál je znak "|"). Přenese se do příslušného MUX-u, položky Štítky programů:. Podle parametrů štítku v TVH a nastavení PVR u klienta, je možné vybrané štítky použít jako identifikátory skupin programů.   
  • group-title - to samé jako předchozí
  • tvg-id - identifikace použitého EPG pro daný kanál. Tímto způsobem nelze odkázat na EIT (OTA). Přenese se do příslušného MUX-u, položky Název EPG:. Nemusí se zadávat, pokud je název programu shodný s identifikátorem EPG získaného interním nebo externím graberem
  • tvh-epg - volba způsobu načítání EPG. Přenese se do příslušného MUX-u, položky EPG scan:. Pro IPTV má smysl hodnota =0.
 
Citovat
#13
Mám Raspberry Pi3 a v něm nainstalovaný Tvheadend.

Dokáži vygenerovat soubor guide.xml pomocí WebGrab+Plus, ale nevím jak EPG načíst v Tvheadendu.

V prvním příspěvku vidím, že to jde, ale já s tim nehnu.

Díky za nakopnutí správným směrem.
Raspberry Pi3B LibreELEC  - 8.2.5 (vše mi funguje na 100%, ale jen do chvíle než mě napadne, že je třeba to vyladit...)
 
Citovat
#14
@Honza_: Tady je celkem hezký návod přímo ze stránek WebGrab+
http://www.webgrabplus.com/documentation.../tvheadend
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
_____
i3 Haswell + Arch Linux + Docker (Tvheadend + WG + Home-Assistant + Deconz + LetsEncrypt ) + Samba Share
Apple TV (Infuse, TvhClient), Apollo Lake Mini PC (Kodi 18.4)
 
Citovat
#15
Děkuji za nasměrování, ale nedokáži správně upravit odkaz na soubor guide.xml v souboru /storage/.kodi/addons/service.tvheadend42/bin/tv_grab_file

SSH mi píše:

LibreELEC:~ # /storage/.kodi/userdata/addon_data/service.tvheadend42/bin/tv_grab_file
/storage/.kodi/userdata/addon_data/service.tvheadend42/bin/tv_grab_file: line 11: can't open 1: no such file
/storage/.kodi/userdata/addon_data/service.tvheadend42/bin/tv_grab_file: line 11: 0: not found


soubor guide.xml
mám v /storage/.kodi/userdata/addon_data/service.webgrabplus/guide.xml

co mám tedy zadat do druhého řádku v souboru tv_grab_file
Raspberry Pi3B LibreELEC  - 8.2.5 (vše mi funguje na 100%, ale jen do chvíle než mě napadne, že je třeba to vyladit...)
 
Citovat
#16
Já používám xmltv.socket, do cronu dám jednou denně socat a je to spolehlivé... Kdyby byl zájem najdu celý příkaz :-)
 
Citovat
#17
Zájem by byl.
Na čem ti to jede?
Nevím jestli to bude fungovat v Libreelec.
Nějaké příkazy se socat jsem zkoušel, ale vyhazovali chybu ... něco s unixem.

Už se s tím peru docela dlouho a nemůžu na to přijít.
Raspberry Pi3B LibreELEC  - 8.2.5 (vše mi funguje na 100%, ale jen do chvíle než mě napadne, že je třeba to vyladit...)
 
Citovat
#18
Normalni linux, debian a ubuntu mam vyzkouseny... Sockety pujdou, jen je otazka jestli je tam ten socat... Ale mozna by sel dointalovat jestli tam neni?

Prikaz najdu...

//edit: tak já tam EPG cpu tudy:
Kód:
0 0 * * * root /usr/bin/curl http://xxxx/xmltv.xml | /usr/bin/socat unix-connect:/home/hts/.hts/tvheadend/epggrab/xmltv.sock STDIO
 
Citovat
#19
Zdravím.
Mám problém po změně tokenů se mi druhý den naskenuje jen půlka muxů.....Až asi po šestém vynuceném scanu se objeví všechny.....Vím je tam "vyhledávání muxů při nečinosti" ale přijde mi že to zatěžuje a možná traffic,ale funguje......
Lze nějakým shell přikazem provést třeba 6x po sobě scan třeba ve 4h ráno přes cron?
Setkal se s tím někdo....
Ano mám síť v "buketech" včetně automappingu......
::: 3x Beelink Mini MXIII-II - CE 9.2 v NAND (1x private TVH server) ::: 1x Mi Box S - Android TV ::: Správce DB SCC :::
 
Citovat
#20
Jestli to není tím, že to skenuješ všechno naráz...

Máš v Service ID u těch kanálů jiné ID než 1? Pokud poskytovatel všechno žene přes výchozí nastaveni ffmepgu, tak je všude serviceid 1 a to by šlo pŕednastavit v Networks a už by se nikdy sken provádět nemusel...
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)