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


Anketa: Měli bychom založit subfórum Tvheadend?
Nemáte dostatečná oprávnění, abyste mohl(a) hlasovat v této anketě.
Ano
83.33%
10 83.33%
Ne
16.67%
2 16.67%
Celkem 12 hlas(ů) 100%
* Hlasoval(a) jste pro tuto možnost. [Zobrazit výsledky]

Hodnocení tématu:
  • 2 Hlas(ů) - 3 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Tvheadend a internetová rádia
#1
Lightbulb 
Již pár dní se snažím přijít na kloub internetovým rádiům v Tvheadend backendu a po několika sezeních jsem dospěl do jakési beta-verze praktického používání na instalaci Kodi v podobě LibreELEC 8.0.1. Možná to bude pro někoho zajímavé, proto se o to chci podělit.

Jen bych měl předeslat, že vím, že se dají internetová rádia přijímat daleko jednodušeji několika způsoby, že existují i doplňky pro internetová rádia, ať už ty obecnější (IPTV Simple Client) nebo specializované (např. Play.cz). Sám jsem jich do teď celou řadu používal, ale po zkušenostech, kdy jsem zjistil, že stejně točím dokola několik málo stanic a že nepotřebuji stovky stanic, jsem se rozhodl preferovat řešení, které mi internetová rádia zařadí pod standardní funkci Rádio s jednotným způsobem ovládání a možností využít i takové funkce jako je nahrávání a/nebo timeshift (tady bych chtěl upozornit, že přes veškerou snahu se mi funkci timeshift nepodařilo zprovoznit). EDIT: To už neplatí, v současné době timeshift funguje bez problémů.

Roura

Streamy na internetová ráda se nedají do Tvheadend backendu zadávat přímo, vždy je nutné prohnat je přes rouru a ffmpeg. Existuje několik obecných schémat, jak takový příkaz vypadá, já jsem na základě zkušeností řady uživatelů dospěl k následujícímu obecnému schématu. Nejsem příliš velká odborník na ffmpeg, přiznávám, že některé option mi nejsou úplně jasné, ale důležité je, že to funguje!

pipe://ffmpeg -loglevel fatal -i STREAM -vn -acodec copy -flags +global_header -strict -2 -metadata service_provider=PROVIDER -metadata service_name=SERVICE -f mpegts -mpegts_service_type digital_radio pipe:1

kde je třeba při praktické aplikaci místo dále uvedených symbolických jmen zadat:
  • STREAM: internetový stream, např. pro Evropu 2: http://icecast3.play.cz/evropa2-128.mp3
  • PROVIDER: libovolné textové označení providera (bez mezer). Já tam většinou umisťuji stejný text jako ve STREAM, abych pak na obrazovce v Kodi, když si dám zobrazit Informace o PVR, viděl adresu streamu.
  • SERVICE: libovolné textové označení služb (bez mezer). Já tam většinou umisťuji text názvu stanice.
Pro uvedenou Evropu 2 pak takový zápis (v mém případě) vypadá následovně:

pipe://ffmpeg -loglevel fatal -i http://icecast3.play.cz/evropa2-128.mp3 -vn -acodec copy -flags +global_header -strict -2 -metadata service_provider=http://icecast3.play.cz/evropa2-128.mp3 -metadata service_name=Evropa2 -f mpegts -mpegts_service_type digital_radio pipe:1

Stručně řečeno, vždy když budete chtít v Tvheadend použít adresu streamu internetového rádia z internetu, musíte ji „obložit“ podle uvedeného příkladu. Podle typu streamu se může měnit parametry pro -acodec. Já momentálně používám prosté kopírování streamu tedy "-acodec copy" (dík za upozornění @marhycz, který mě poučil. Původně jsem používat překódování do aac, tedy "-acodec aac", které je zbytečné, protože Kodi umí přímo dekódovat i mp3.

Parametrizace TVheadend backend

Vytvoření sítě

Existují dvě možnosti, jak internetová rádia do Tvheadend backendu dostat. Vždy je třeba definovat v části Konfigurace -> DVB Inputs -> Network novou síť. Ta může být buď IPTV Automatic Network nebo IPTV Network. Rozdíly nejsou zásadní, ale pro práci poměrně důležité.

IPTV Automatic Network

Tato síť dokáže, po zadání odkazu na existující m3u8 playlist (ten si musíte připravit předem) z tohoto playlistu vygenerovat pro každou stanici jeden mux.
[attachment=2492] [attachment=2493]

IPTV Network

U této sítě se žádný odkaz na definici streamů nedefinuje. Pokud ji použijeme, musíme si každý mux poctivě vytvořit ručně a parametry streamu do něj zadat.

Mux-y

Ať už budou vytvořeny automaticky nebo je budete vytvářet ručně (Konfigurace -> DVB Inputs -> Muxy), bude to hlavní, co určuje vazbu na internetový stream uvedeno v položce URL. V případě automatického vytvoření se tam přenesou hodnoty ze souboru m38u, v případě ručního vytvoření je tam zadáte ručně.
[attachment=2494] [attachment=2495]

m3u8

Soubor má tradiční strukturu, s jednou změnou. Místo internetového streamu musí obsahovat kompletní řetězec, počínaje pipe://… Jak takový soubor může vypadat, uvidíte v přiloženém souboru.
[attachment=2496]

EPG

EPG se samozřejmě v internetových streamech nepřenáší. Mám v plánu dostat ho alespoň do některých strem-ů z wepg.cz. Zatím jsem se k tomu nedostal, ale neočekávám v tom nějaký zvláštní problém. Kromě toho, samozřejmě, že těch EPG nebude asi mnoho. Myslím, že jsem tam zatím viděl jen Evropu 2…

Loga

V mém provozovaném Tvheadend backendu odkazuji na loga stanic přes názvy služeb, takže není problém do adresáře, kde jsou loga umístěna přidat nová s odpovídajícími názvy. Funguje to očekávaně a bez problémů.

Ukázky z Kodi

Hlavní obrazovka (skin Estuary Easy – moje vlastní modifikace) vybraná položka Rádio:
[attachment=2497]

Radio kanály, je vidět seznam, v horní části jsou DVB-T rádia, která mají EPG, takže jsou u nich vidět i právě vysílané programy. Je vidět že se nahrávají celkem tři programy, jeden z DVB-T (CRo JAZZ), dva z internetových streamů (CRo SEVER, Blaník). Zároveň se jeden (Blaník) současně i přehrává:
[attachment=2498]

Stránka přehrávané stanice, navoleny Detaily o PVR. Jsou vidět zobrazené obsahy z m3u8 souboru (Služba a Poskytovatel):
[attachment=2499]

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

Jak už jsem napsal, jsem ve fázi "beta-testování". Tzn. mám to v provozu na produktivním systému. LibreELEC 8.0.1 + Tvheadend backend provozuji na Asrock Beebox (4 jádro Intel J3160, 4 GB RAM - zdánlivě zbytečně moc, ale já mám do RAM směrován Timeshift).

Zatím jsem přišel na několik problémů, nevím, zda jsou způsobeny moji neznalostí nebo prostě jen tím, že tak je to tak v Tvheadend zařízeno:
  • Z jedné sítě může být současně přehráván pouze jeden mux – to pokládám za hodně velké omezení. Je možné, že je to jen důsledek špatně nastavených parametrů. Budu v tomto směru ještě laborovat. Jsem přesvědčený, že se mi to při prvních testech tak nechovalo, ale ruku do ohně za to nedám. 1 Zatím jsme to obešel tím, že mám nainstalovány dvě automatické sítě, odkazují se do stejného m3u8 souboru. Není problém nainstalovat těch sítí víc. Programy z jednotlivých stanic se samozřejmě sloučí, takže v Kodi je vidíte jen jednou. EDIT: Počet současně přehrávaných muxů na jedné síti není nijak v Tvheadend omezen. Samozřejmě je vhodné počet omezit, pokud se obáváte přílišného zatížení komunikace. K tomu složí parametry sítě Maximální počet vstupních streamů: a/nebo Maximální šířka pásma (Kbps):. Oba parametry se dají použít současně.
  • Nefunguje timeshift, při prvních testech mi to snad taky fungovalo (ale opět, nejsem si tím 100% jistý). Budu se tomu snažit taky přijít na kloub. EDIT: Jak už bylo napsáno výše, timeshift v současné době funguje.
  • Přepínání programů nefunguje nijak bleskově. Backend má sice nastaveno prediktivní ladění, ale to se zřejmě s ohledem na výše uvedené omezení neuplatní. Ale není to bůhvíjak strašné, řádově sekundy…
A na závěr…

Byl bych rád, pokud by se nám podařilo na téma Tvheadend rozjet diskusi i na tomto fóru. A nejen k tomu dnešnímu tématu, i když to mě osobně teď zajímá asi nejvíce. Zajímají mě zkušenosti s tím, čemu jsem se dnes věnoval a taky bych přivítal nějaké rady a nápady na toto téma.

Popis není úplně detailní, takže rád odpovím na případné dotazy. Ale každý, kdo Tvheadend používá asi bude vědět, jak s tím naložit. Pokud ne, klidně se ptejte...  6

Přemýšlím, zda by nestálo za to založit pro Tvheadend zvláštní subfórum. Těch příspěvků, které se tomuto skvělému kousku SW věnují je i tady už docela dost. Co říkáte?

EDIT 2017-05-07 21:41 Na základě upozornění @marhycz jsem změnil parametr volání ffmepg. Není třeba překódovat streamy mp3, takže místo původního "-acodec aac" je nyní "-acodec copy". Opravil jsem to i v příkladu přiloženého m3u8 souboru.

EDIT 2018-05-06 23:09 Na základě upozornění @otava5 a @mobilemanic jsem opravil některé nepřesnosti, které vznikly v rané fázi používání Tvheadend.
 
Citovat
#2
Je to suprově popsané a nevěděl jsem, že do toho jde rvát něco živě transkódované přes ffmpeg, to je fakt dobrý Big Grin :)

to subfórum je skvělý nápad, protože všichni tu řeší jak lovit na internetu streamy(nemyslím teď rádia, dyť ty se vysílají volně Big Grin ), přitom si mohou udělat svůj IPTV server v podstatě sami a legálně. A přes všechny backendy co jsem zkoušel (mediaportal, nextpvr, argus tv, dvbviewer) má tvheadend nejblíže k tomu "it just works" ta propracovanost je oproti jiným opravdu znát. Takže za mě je to skvělý nápad :)

To přepínání jinak není bleskové podle mě kvůli tomu, že to proháníš tím ffmpegem a transkóduješ to v něm do jiného audio formátu, takže ten audio stream se převede do jiného formátu a až pak to jde k tobě.

Což znamená nedělal bych transkódováni, protože Kodi podle mě přehraje mp3 a nemusí to mít v AAC a dělal bych jenom remux. To se jenom vezme ten audio stream a 1:1 se obalí do jiného kontejneru. V tomhle případě mpeg-ts co už tvheadend vezme.

Lip se to pochopí na videu. Máš kontejner jako .mp4, .mkv,.. a kodek jako H.264,mpeg-2, H.265 .. a remux je, když bych vzal například z mp4 souboru ve kterém by byl h.264 stream a jenom ho "přebalil" do .mkv kontejneru, který také umí h264 stream. -> nijak neupravuji video samotné, neměním kvalitu, datový tok, video samotné je netknuté. Proto můžeš na torrentech (když si stahuješ legální kopii filmu, který už máš doma koupený Big Grin ) narazit na film, který ma v názvu REMUX, což je jen přebalené video z Blu-ray disku z .m2ts do .mkv většinou.

Takže abych to shrnul a nesnažil se vysvětlit jak to funguje, použil bych parametr "-acodec copy" jestli si pamatuju dobře z mé znalosti ffmpegu Big Grin nějakou vteřinu by to mohlo dát, ale stále se tam provádí o operaci navíc než přímé přehrání streamu.
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
#3
@marhycz Jo jo... Tvheadend se mi po 6 letech života s MediaPortal taky jeví jako nejlepší volba. Když bude zájem o subfórum, požádám admina o založení. 

K ffmpeg. Mám pocit, že jsem prosté kopírování audio streamu zkoušel hned na začátku a nefungovalo to. Ale je možné, že to v té chvíli nefungovalo kvůli něčemu jinému, a já to na to pak už zapomněl. Vyzkouším to ještě jednou. Díky za upozornění.
 
Citovat
#4
Jako hlavní asi je, že ten tvheadend je čistě jenom server, a hlavně na linuxu. Většina ostatních backendů jsou zároveň i klienti, takže je to dělané spíše pro ně, anebo jako Argus TV jsou psané pro Windows a to zkrátka moc stabilní nebylo.

Já jsem tohle v Tvheadendu nezkoušel, takže to bylo jenom co mě napadlo od boku.
Ale kouknu na to pak taky, třeba něco najdu :)

Možná zkus to kopírování streamu na stream, který už teda je rovnou v aac kodeku a změř si, jestli se to zlepšilo :)
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 Zkusil jsem tedy do parametrů ffmpeg dát pouze kopírování streamu a funguje to. Rychlost přepínání se ale bohužel nijak nezrychlila. Cca 4-5 vteřin.
 
Citovat
#6
Tak aspoň to je teď v lepší kvalitě :) Ale nevím jestli to vůbec půjde nějak zrychlit. Zkrátka zkus si v Kodi pustit přes doplněk rádio, to jsou tak 2s max, takže další 2s jsou na ten ffmpeg no :/
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
#7
@marhycz Chvíli jsme si s tím pohrál, zapínal a vypínal "prediktivní ladění" a pozoroval to na backendu i v systému. Přepnutí na backendu jde prakticky okamžitě  se stiskem klávesy, ffmpeg se spustí s nepatrně drobným zpožděním, ale stream se na serveru objeví skutečně až po cca 4 vteřinách. Pokud se při sekvenčním přepínání dostanu pod čas, kdy backend ještě přijímá následující stream v pořadí (je to vidět jak na backendu, tak v systému - v té chvíli běží dva procesy ffmpeg), tak je přepnutí skoro tak rychlé jako na DVB-T rádiu, kolem 2 vteřin.
 
Citovat
#8
No proto to už moc dolů nepůjde. To přepnutí je okamžité, to znamená kdy tvheadend začne "ladit", tvheadend vydá příkaz okamžitě, ale ten ffmpeg se musí spustit jako další proces a pak tomu ffmpegu trvá většinu toho času, než zpracuje určitou část streamu a předá to zpátky tvheadendu a to jsou ty zbývající vteřiny no.

To instantní přepnutí je právě když už běží ten další stream přitom predektivním ladění, což znamená tvheadend už ten ffmpeg spustil dříve a je připravený.
Takže jediný způsob by asi byl přijímat všechny kanály najednou Big Grin překódovat, nebo přebalovat všechny streamy 24/7

možná z toho vyhoď "-loglevel fatal", takže to nebude muset zapisovat do systémového journalu, ale to jsou asi milisekundy.
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
#9
ten ffmpeg je pomalý, protože musí načíst kus streamu, aby provedl analýzu co je vlastně vevnitř (aby věděl, jak to zpracovat) a pak teprve začne pouštět ven... a to kolik si toho načte si určuje sám, tak to trvá déle, než by člověk chtěl...

jde to omezit vstupními parametry -analyzeduration 0 a -probesize x, kde x je množství dat (asi v B nebo b) kolik načíst na analýzu. pozor, parametry jsou oba vstupní.

pokud to visí na ffmpegu, mohlo by to pomoct...
 
Citovat
#10
To je výborné! nečekal jsem, že to jde takhle ohnout. To jsi dobrej, že jsi to našel :))

Čeká to asi teda vždycky až se dokončí oba, takže když je ta duration na nule, tak to bude čekat jenom na ten probesize, to je fakt dobrý! :)
Čtu, že probesize má hodnotu 32 až INT_MAX, což mi připomíná kompilátory, takže to jsou Bajty. To můžeš začít taky klidně s 1024. Stále to bude omezené spíš datovým tokem streamu než internetem. Při 128kb MP3 streamu tohle nastavení zabere 1/16 vteřiny,
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
#11
@marhycz @mobilemanic Díky za náměty. Vyzkoušel jsem, ale beze změny. Pokud se to nějak urychlí, tak to není nijak postřehnutelné.
 
Citovat
#12
Zdravím. Díky za návod vše funguje jak má ale.... Proč třeba jsem zkoušel nahrávat Radio 1 a výsledný soubor má koncovku ts když je tam přikaz "copy"??? Díky
 
Citovat
#13
@otava5 Tady by to asi chtělo začít teorií o datových kontejnerech a streamech. Já v tom ale nejsem odborník... Vysvětloval mi ti @mahrycz v tomto vláknu o něco výše, dobře si o tom početeš i tady.

Stručně řečeno, ta přípona .ts udává, že je to audio z kontejneru mpeg-ts, se kterým umí pracovat Tvheadend. V něm má v našem případě zabalený datový proud (stream) zakódovaný kodekem mp3 (úplně správě je to mpeg2 Layer III, o tom si zase něco přečeteš tady). Ten příkaz pipe://ffmepg... tedy vloží stream mp3 (proto je tam to copy, protože se nepřekódovává) do kontejneru ts (proto je tam to mpegts), se kterým umí pracovat tvheadend server, který pak při nahrávání vytváří a ukládá celý kontejner a pojmenovává ho podle zvyklostí příponou .ts.
 
Citovat
#14
Nevadí hlavně že to umí nahrávat a převedu to ve VLC.... Patří ti velké díky toto mi v Kodi chybělo..... :-)
 
Citovat
#15
JiRo: Aha, tak to pak zřejmě čeká ještě na něco dalšího, tak to asi nevím...
 
Citovat
#16
@mobilemanic No, těžko říct na co. Zatím jsem se s tím smířil, ono to zase tak hrozné není. Až budu mít čas a chuť, tak to ještě zkusím propátrat. Každopádně ještě jednou díky za pomoc a nasměrování.
 
Citovat
#17
Kolik net streamu lze zaznamenávat současně( né že bych to využil jen zvědavost)? Lze při záznamu net streamu přehrávat třeba ze Stream Cinema film aniž by se poškodit záznam???
 
Citovat
#18
@otava5 Kolik streamů? To nelze takhle říci. Záleží to na aktuální rychlosti/kapacitě připojení , na tom jak ho případně využije to přehrávání z Cienmy (nebo čehokoliv dalšího). Obecně platí, že ten mp3 stream je výrazně méně náročný (10x i vícekrát). Takže pokud ti jede video ze Cinemy v pohodě, tak se tam ještě nějaký mp3 stream určitě vejde.

BTW Jen nezapomeň, že pokud chceš současně zpracovávat více streamů mp3,  musíš mít více sítí (z jedné sítě můžeš současně zpracovávat pouze jeden stream). Není to žádný problém, z každé sítě můžeš odkazovat na ten samý m3u8 soubor, vyrobí ti to samozřejmě tolikrát víc muxů, kolik sítí budeš mít. V programech se to ale zase spojí dohromady.

A ještě jedna zajímavost. Právě jsme vyzkoušel nastavit příjem CRo RADIOZURNAL jak z DVB-T tak z Internetu. Funguje to skvěle, v programech se to spojilo dohromady. Vím, nemá to asi praktické uplatnění, ale zajímalo mě, jestli si s tím Tvheadend poradí.
 
Citovat
#19
JiRo: s více zdroji s TVH poradí, jen je tam problém, nefunguje správně timeout sítě nebo jsem zatím nepřišel na to,kde mi to vázne... Příklad: 1.zdroj 3sec, pokud se nepřipojí včas zkusit druhý zdroj, 6.sec... A o třetí zdroj se pak už ani nepokusí i když by měl... Pokud první dvě sítě mají timeout 1sec, tak se pokusí i o třetí zdroj, ale to je maximum... Možná nějaký dluhodobý bugUndecided nebo to někde přebíjí nějaký jiný timeout, ale nevím jaký.
 
Citovat
#20
@mobilemanic Tak takhle jsme o tom nepřemýšlel, že by se hledal zdroj v další síti, pokud se v té dané neozve do timeout-u. Já mám timeout sítě ponechaný default, a to je tuším 15 sec, takže s tím problém není.
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)