V komerčních nabídkách poskytovatelů internetového připojení můžeme nalézt i možnost sledovat televizní nebo rozhlasové stanice přes IP. V takovém případě není nutné vlastnit televizní přijímač, přičemž konkrétní multimediální obsah „naladíme“ na našem notebooku nebo chytrém telefonu. Podobný zdroj DVB-T programů si ale můžeme v domácím prostředí zpřístupnit z naší televizní antény. K tomu nám slouží několik softwarových nástrojů, které jsou spuštěny na jednoduchém počítači umístěném v půdním prostoru našeho obytného domu.
Kromě sledování televizního a rádiového obsahu můžeme využívat i plánované nahrávání s možností pozdějšího přehrání.
Obsahem tohoto článku je jednoduché nastavení nástroje TVheadend a jeho využití jak pro přímé sledování, tak i zmíněné nahrávání pořadů.
Prvotním předpokladem zůstává kvalitní příjem vysokofrekvenčního televizního signálu DVB-T vlastní anténou. Pro jeho zpracování použijeme jakýkoli USB DVB-T adaptér s podporou linuxu a jednodeskový počítač – např. Raspberry Pi. Místo počítače lze s úspěchem využít i WiFi router s instalovanou distribucí OpenWRT. O výkon tohoto zařízení se prakticky nemusíme zajímat, protože nástroj TVheadend neprovádí žádné přepočítávání přijímaného toku dat. Zjednodušeně, z přijatého signálu vybere příslušnou část, kterou ve stejné podobě přepošle klientskému zařízení, na kterém je spuštěno webové rozhraní nebo nainstalován kompatibilní software.
O tom, jak jsem testoval takové systém i s praktickými ukázkami se lze dočíst v článku Přenos DVB-T kanálů po IP.
Máme zde ale jedno omezení, a tím je, že pokud používáme pouze jeden USB DVB-T adaptér, lze sledovat pouze jeden digitální multiplex. Přesněji, několik uživatelů může sledovat jakýkoli program v rámci jednoho přijímaného multiplexu, a to včetně probíhajícího nahrávání. Pokud bude chtít některý z uživatelů sledovat televizní program, který je vysílán v rámci jiného multiplexu, nebude mu vyhověno. Důvodem je, že DVB-T přijímač může být naladěn pouze na jeden přijímaný kmitočet – multiplex. Existují samozřejmě přijímače, které obsahují např. dva přijímače, ty se však v systému tváří odděleně. Můžeme si ale pomoci připojením druhého, třetího nebo ntého USB DVB-T adaptéru.
Instalace TVheadend
Jak je již zmíněno výše, nástroj TVheadend lze spustit pod operačním systémem GNU/Linux, kde se chová jako standardní služba. Instalace je závislá na konkrétní distribuci a její průběh lze nalézt na internetu.
V případě Arch Linux je nástroj umístěn v repositáři AUR. Pokud se rozhodneme využít zařízení s OpenWRT, můžeme si potřebný software přeložit ze zdrojových kódů sami nebo stáhnout distribuční verzi.
Následné spuštění TVheadend je také závislé na konkrétní distribuci.
Při instalaci bývá v operačním systému vytvořeno uživatelské konto hts pod kterým je služba spouštěna. Toto konto je součástí skupiny video. Veškeré konfigurační soubory a databáze (seznam multiplexů, služeb, kanálů a nahraných pořadů) jsou ukládány v textovém formátu do adresáře ~hts/.hts/
. Není tedy problém s jejich následným čtením a případně úpravou.
Nastavení TVheadend
Konkrétní postup instalace a spuštění TVheadend závisí na našem operačním systému. V případě nastavení je tato operace víceméně podobná. Změny jsou pouze mezi jednotlivými verzemi TVheadend. Následující popis se bude týkat stabilní verze 4.0, nicméně podobně můžeme postupovat i v případě nestabilní a testovací 4.1. Verzi 4.1 nalezneme v repositáři GIT.
Po spuštění nyní už služby TVheadend zadáme do internetového prohlížeče URL skládající se z IP adresy zařízení, kde běží TVheadend, a HTTP portu 9981, kupříkladu http://10.11.1.254:9981
.
Pokud je služba správně spuštěna, zobrazí se modrá obrazovka s oknem Electronic Program Guide.
Kontrola USB DVB-T adaptéru
Chceme-li předejít zdlouhavému hledání problémům s DVB-T adaptérem v systému, podíváme se, zda je tento v systému přítomen a načteny příslušné ovladače.
Opět je důležité zmínit, že DVB-T adaptér musí být podporován jádrem naší distribuce.
Výpis USB zařízení připojených k zařízení:
1 2 3 4 |
[root@linux ~]# lsusb ... Bus 001 Device 004: ID 2013:024f PCTV Systems nanoStick T2 290e ... |
případně:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
[root@linux ~]# lsusb -v ... Bus 001 Device 004: ID 2013:024f PCTV Systems nanoStick T2 290e Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x2013 PCTV Systems idProduct 0x024f nanoStick T2 290e bcdDevice 1.00 iManufacturer 1 PCTV Systems iProduct 2 PCTV 290e iSerial 3 00000010SJ8Q bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 55 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x03ac 1x 940 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x03ac 1x 940 bytes bInterval 1 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 can't get debug descriptor: Resource temporarily unavailable Device Status: 0x0000 (Bus Powered) ... |
Na výpisech je patrný USB DVB-T adaptér PCTV Systems nanoStick T2 290e. Na dalších obrázcích bude ale zobrazen Realtek Semiconductor Corp. RTL2838 DVB-T. To proto, že jsou výpisy a obrázky pořizovány z různých systémů.
Výpis připojených, rozpoznaných a dostupných adaptérů:
1 2 3 4 5 6 7 8 9 10 11 |
[root@linux ~]# ls -lR /dev/dvb/ /dev/dvb/: celkem 0 drwxr-xr-x 2 root root 120 22. úno 15.40 adapter0 /dev/dvb/adapter0: celkem 0 crw-rw---- 1 root video 212, 1 22. úno 15.40 demux0 crw-rw---- 1 root video 212, 2 22. úno 15.40 dvr0 crw-rw---- 1 root video 212, 0 22. úno 15.40 frontend0 crw-rw---- 1 root video 212, 3 22. úno 15.40 net0 |
Bohužel nejsme schopni rozlišit o který adaptér se jedná. Pokud nás to zajímá, máme k dispozici výpis jaderného cyklického bufferu – logu:
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 |
[root@linux ~]# dmesg ... [ 22.942836] Linux video capture interface: v2.00 [ 23.344056] em28xx: New device PCTV Systems PCTV 290e @ 480 Mbps (2013:024f, interface 0, class 0) [ 23.356300] em28xx: DVB interface 0 found: isoc [ 23.669904] em28xx: chip ID is em28174 [ 24.147161] em28174 #0: EEPROM ID = 26 00 01 00, EEPROM hash = 0x6ee355da [ 24.155656] em28174 #0: EEPROM info: [ 24.160879] em28174 #0: microcode start address = 0x0004, boot configuration = 0x01 [ 24.581359] em28174 #0: No audio on board. [ 24.587228] em28174 #0: 500mA max power [ 24.592658] em28174 #0: Table at offset 0x39, strings=0x1aa0, 0x14ba, 0x1ace [ 24.871985] em28174 #0: Identified as PCTV nanoStick T2 290e (card=78) [ 24.880245] em28174 #0: dvb set to isoc mode. [ 24.960283] usbcore: registered new interface driver em28xx [ 25.004130] em28174 #0: Binding DVB extension [ 25.142600] tda18271 4-0060: creating new instance [ 25.172445] TDA18271HD/C2 detected @ 4-0060 [ 25.534662] DVB: registering new adapter (em28174 #0) [ 25.547562] usb 1-1.2: DVB: registering adapter 0 frontend 0 (Sony CXD2820R)... [ 25.578002] em28174 #0: DVB extension successfully initialized [ 25.585464] em28xx: Registered (Em28xx dvb Extension) extension [ 25.748465] em28174 #0: Registering input extension [ 25.947090] Registered IR keymap rc-pinnacle-pctv-hd [ 25.970269] input: em28xx IR (em28174 #0) as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/rc/rc0/input0 [ 26.007234] rc0: em28xx IR (em28174 #0) as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/rc/rc0 [ 26.043553] em28174 #0: Input extension successfully initalized [ 26.051225] em28xx: Registered (Em28xx Input Extension) extension ... |
Orientace v logu však vyžaduje znalosti jak linuxu (jádra), tak hardwarové výbavy USB DVB-T adaptéru. Nás zajímají konkrétně řádky obsahující jak identifikaci zařízení PCTV Systems PCTV 290e/Sony CXD2820R, tak označení v /dev/dvb/
– adapter 0 frontend 0.
1 2 3 4 |
[ 23.344056] em28xx: New device PCTV Systems PCTV 290e @ 480 Mbps (2013:024f, interface 0, class 0) [ 23.356300] em28xx: DVB interface 0 found: isoc ... [ 25.547562] usb 1-1.2: DVB: registering adapter 0 frontend 0 (Sony CXD2820R)... |
Sony CXD2820R je čip, který je využíván adaptérem PCTV Systems PCTV 290e.
Zajímá-li nás, zda adaptér přijímá nějaký DVB-T signál, nainstalujeme a spustíme nástroj w_scan
. Viz Přenos DVB-T kanálů po IP.
Nastavení USB DVB-T adaptéru v TVheadend
Pokud je adaptér v systému správně detekován, pokročíme k jeho nastavení v TVheadend.
Nastavení se provádí v krocích:
- Vytvoření sítě,
- případné vytvoření multiplexů – automatické/ruční,
- přiřazení vytvořené sítě zařízení,
- vyhledání služeb (služby jsou kanály, které však ještě takto nejsou označeny),
- namapování vyhledaných služeb na kanály.
V záložce Configuration > DVB Inputs > TV Adapters vidíme seznam adaptérů, které jsou připojeny k zařízení. V tuto chvíli nemusíme adaptér povolovat ani vybírat příslušnou síť. Tento krok je pouze informativní.
Síť si ale vytvoříme na další záložce Networks.
Klikneme na tlačítko Add a vybereme typ DVB-T network. Jméno sítě můžeme zvolit dle našeho uvážení. Tento název se bude později nastavovat v seznamu adaptérů. Pre-defined muxes nastavíme na Czech Republic: cz-All. V tom případě se pro prohledávání zvolí veškeré multiplexy dostupné v České Republice. Pokud budeme chtít zadávat přijímané multiplexy ručně, nemusíme vybírat žádnou volbu.
Network Discovery slouží pro automatické přidávání dalších přijímaných multiplexů v závislosti na jejich oznamování sítí DVB-T (jedná se o vlastnost DVB-T). Opět, pokud budeme multiplexy zadávat ručně, pravděpodobně volbu nezatrhneme. O jejich seznam se ale budeme muset v budoucnu starat ručně.
Idle scan muxes určuje, zda mají být definované multiplexy během nečinnosti TVheadend (doba kdy nebudeme televizi sledovat nebo nebude probíhat plánované nahrávání) prohledávány za účelem nalezení nových kanálů.
Jestliže máme k zařízení připojeno více USB DVB-T adaptérů, doporučuji definovat multiplexy pro tyto adaptéry ručně. Pro každý adaptér vytvořit vlastní síť a nezávislou skupinu multiplexů. Tím omezíme riziko, kdy dva uživatelé sledující programy ze stejného multiplexu zaberou dva fyzické adaptéry.
V záložce Muxes se nachází seznam multiplexů, se kterými bude TVheadend pracovat. V případě, že jsme při vytváření sítě nastavili volbu Pre-defined muxes, je zde automaticky vytvořeno množství multiplexů dostupných v konkrétní zemi.
V opačném případě musíme příslušné multiplexy vytvořit ručně. K tomuto účelu můžeme použít výstup z již zmíněného nástroje w_scan
– potřebujeme konkrétní kmitočty dostupných multiplexů.
Nyní opět k záložce TV Adapters.
V tomto kroku povolíme (Enable) příslušný USB DVB-T adaptér a vybereme konkrétní síť. Doporučuji vybrat volby Initial Scan a Idle Scan.
Potvrzením tlačítkem Save začne TVheadend zpracovávat nastavení.
Po kliknutí na malou dvojitou šipku v okně vpravo dole je zobrazen log služby. Je zde patrné skenování jednotlivých multiplexů. V záložce Muxes můžeme tento průběh sledovat ve sloupci Scan Result.
Služby a kanály
Vyhledávání služeb je zdlouhavou záležitostí a může trvat několik desítek minut. Určitě se nesnažíme tuto operaci uspěchat.
Na dalším obrázku vidíme seznam nalezených služeb. Pokud vidíme několik služeb se stejným názvem, je to správně, protože jsou dostupné z několika multiplexů. Nyní potřebujeme služby namapovat na příslušné kanály. Pouze kanály jsou zobrazeny při sledování TV. K tomu slouží tlačítko Map All/Map services. Na zobrazeném dialogu je vhodné zatrhnout volbu Check availability.
Na dalším obrázku jsou služby namapovány na kanály. Duplicitní kanály jsou záměrně vynechány.
Na záložce Configuration > Channel/EPG můžeme vidět nově vytvořené kanály. Ty však nejsou setříděny. Setřídění provedeme tlačítkem Assign number na konkrétním kanálu. Provedením této operace na dalším kanálu je přiřazeno další číslo v pořadí.
Pokud máme nainstalovaný např. přehrávač VLC, můžeme zkusit některé z kanálů přehrát.
A nyní zpět k naší první záložce, Electronic Program Guide, na které je k jednotlivým kanálům přiřazen název právě probíhajícího programu a jeho stav.
I zde je možné sledovat přenášený multimediální obsah.
Při práci služby TVheadend může být zajímavé sledovat datový tok mezi zařízením a USB DVB-T adaptérem, případně sílu signálu. Tyto informace nalezneme na záložce Status.
Nahrávání pořadů
Funkce nahrávání pořadů je vítanou výhodou služby TVheadend. Při jejím používání musíme pečlivě zvážit, zda naše zařízení/počítač, disponuje dostatečně velkým diskovým prostorem. Pokud používáme WiFi router, bude nutné připojit externí úložný disk. Velikost jednoho pořadu může dosahovat až několik GB prostoru.
Je nutné brát v úvahu, že v době nahrávání je DVB-T adaptér vyhrazen tomuto procesu a nelze využít možnost sledování jiného kanálu z jiného multiplexu. Toto omezení je stejné jako sledování TV více uživateli najednou.
Nahrávání pořadů lze ovládat z grafického rozhraní TVheadend nebo z klientské aplikace (např. Kodi).
Následující text se věnuje nastavení nahrávání na diskový prostor mimo běžné umístění TVheadend. To je vhodné zejména v případě, že chceme nahrané pořady sdílet po síti, např. přes SMB (Windows) nebo NFS (UNIX/linux). Pokud tuto možnost nepoužijeme, nebudeme se dále nahrávání věnovat. V opačném případě musíme mít znalosti práce s operačním systémem GNU/Linux.
Mé externí datové úložiště je připojeno do systému v adresáři /data/
. Pro ukládání pořadů, a jejich sdílení, je vytvořen adresář /data/share/public/Videa/DVR
. Mód této složky nastavíme na 777, tedy přístup pro čtení i zápis všem uživatelům zařízení.
TVheadend budeme nastavovat v záložce Configuration > Recording > Digital Video Recording Profiles.
Recording system path nastavíme na naši cestu /data/share/public/Videa/DVR
. Aby byl multimediální obsah dostupný všem, nastavíme File permissions na hodnotu 0666 a Directory permissions na 0777. Protože budou nahrané pořady sdíleny i pro operační systém Windows, zatrhneme volbu Use Windows-compatible filenames.
Sdílení pro Windows a Unix
Nastavení sdílení je podobné jako v článku Instalace Syncthing v Arch Linux a globální sdílení složek.
Následující příklad uvádí nastavení sdíleného adresáře /data/share/public
, který je vlastněn uživatelem d-share. Příslušná část souboru /etc/samba/smb.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#============================ Share Definitions ============================== [Verejne] comment = Verejna sdilena data path = /data/share/public available = yes browsable = yes public = yes read only = no guest ok = Yes force user = d-share force group = d-share create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755 |
Podobným způsobem jako v případě SMB můžeme sdílet soubory přes NFS. Důležité je si v tomto případě uvědomit, že nelze zadat jméno uživatele d-share, ale musíme zadat jeho číslo (UID) a číslo skupiny (GID).
Nyní vytvoříme/změníme soubor /etc/exports.d/nfs.exports
a vložíme definici sdíleného adresáře:
1 |
/data/share/public 0.0.0.0(rw,no_subtree_check,nohide,all_squash,anonuid=993,anongid=993) |
Po restartu služeb SMB – samba a NFS bude adresář dostupný ze sítě.
V případě, že bude obsah sdíleného adresáře měněn uživateli, tzn. např. vymazání souborů po síti, dojde k nekonzistenci mezi adresářovou strukturou a databází služby TVheadend. Ničeho se ale nemusíme obávat, protože námi ručně přidané soubory nebudou v TVheadend vidět a vymazané se přesunou ze záložky Digital Video Recorder > Finished Recordings do Digital Video Recorder > Failed Recordings. Pokud tedy možno, s nahrávkami pracujeme pouze přes rozhraní TVheadend.
Timeshift
„Přeskakování“ v čase během právě přehrávaného pořadu je možné aktivovat v záložce Configuration > Timeshift. Tak jako v případě nahrávání pořadů i funkce timeshift je v režii zařízení, kde je služba spuštěna. Nikoli tedy na zařízení, na kterém je program uživatelem zobrazován. Zařízení proto musí disponovat příslušným výkonem, velikostí paměti RAM a případně diskovým prostorem.
Nastavení přístupů
V některých situacích je vhodné omezit přístup ke službě TVheadend. Každý uživatel může mít vlastní profil s nastavením různých vlastností. To vše nalezneme na záložce Configuration > Access Entries (Tvheadend verze 4.0) nebo Configuration > Users >Access Entries (Tvheadend verze 4.1).
Avahi/zeroconf
TVheadend automaticky informuje službu Avahi o svém běhu. Avahi slouží k notifikaci okolních zařízení v síti o službách dostupných z konkrétního zařízení. Pokud používáme program, který umí tyto notifikace zpracovávat, je jimi řízen. Nemusíme se tedy starat o jejich nastavování. Takovým programem je např. multimediální centrum Kodi.
Sledování pořadů
Aktuálně vysílané pořady nebo jejich záznamy můžeme sledovat v samotném webovém rozhraní TVheadend nebo kompatibilními programy. Mezi ty patří zejména VLC a Kodi. Právě Kodi umožňuje bezproblémový přístup k šířenému multimediálnímu obsahu. Nejprve je však nutné ve Windows a v linuxu nainstalovat příslušný zásuvný modul. V OS Android je v Kodi přítomen v základní instalaci.
Datový tok
Při sledování pořadů se nemusíme bát že by datový tok dosahoval nepředstavitelných hodnot. U kvality DVB-T SD (mpeg2) i DVB-T2 FullHD (HEVC – h.265) dosahuje přibližně 2,5 – 4,2 Mbps. Hodnoty se pohybují v závislosti na aktuální kompresi videa.
Další možnosti příjmu TVheadend
TVheadend není určen k pouze příjmu standardu DVB-T/DVB-T2, ale i dalších včetně satelitních DVB-S/DVB-S2. Jejich nastavení probíhá podobným způsobem, nicméně mé praktické zkušenosti pokrývají pouze DVB-T/DVB-T2.
Závěr
Nastavení a provoz služby TVheadend umožňuje bezproblémový příjem a distribuci digitální televize a rozhlasu normy DVB-T. Je vhodným doplňkem domácí WiFi infrastruktury neomezující se pouze na použití klasických televizních přijímačů.
Stále je ale nutné mít na paměti, že sledování televizních pořadů a rozhlasu je podmíněno platbou koncesionářských poplatků. A to i v případě TVheadend.
Související
Radiové obvody a jejich vlastnosti – rozhraní
Přenos DVB-T kanálů po IP
Jednoduchý střih a konverze pořadu nahraného z DVB-T v GNU/Linux
Pingback: Přidání IP kamery do TVheadend | brichacek.net
Pingback: Arch Linux on Orange Pi Zero | brichacek.net
Dobrý den,
návod je perfektní, tvheadend na Debianu používám už dlouho, ale v openwrt se mi rozchodit nepovedl. Dokonce jsem nenašel ani žádný kloudny návod. Můžete popsat i instalaci na openwrt. Diky.
Tvheadend používám pouze v Archlinux. V OpenWRT jsem jej nikdy nezkoušel, ale asi by neměl být větší problém aplikaci rozchodit. OpenWRT ale používám pouze na HW WRAP, který nemá USB, takže mě ani tato možnost nikdy nezajímala. WRAPy používám pouze jako WiFi brány.
Pingback: TVheadend – Kodi s DVB-T2 tunerem – ElvisEK | Linux, Apple, Websites, Security
Pingback: Aktivní anténní 4-cestný rozbočovač pro DVB-T/DVB-T2/CATV/DAB s ADA4304-4 a USB hubem TUSB4041I | brichacek.net