Používáme MythTV v České republice

16. 2. 2010
Doba čtení: 9 minut

Sdílet

Dnes téměř završíme seriál o linuxovém multimediálním centru MythTV. Článek to bude navíc velmi zajímavý, protože tu bude jistý zlatý hřeb – informace specifické pro použití MythTV v České republice. Povíme si o tom, jak získat dobrý televizní program, který je pro automatické nahrávání nezbytný.

XMLTV a EPG

Kvalitní programová data (tedy jak lidově říkáme „televizní program“) jsou naprosto nezbytná pro pohodlný provoz MythTV, pro automatické nahrávání atd. Dříve, v dobách čistě analogových, bylo velmi obtížné získat dobrý zdroj těchto informací. Lidé se proto uchýlili k čtení webů s televizním programem a přepisování těchto informací do tvaru a formátu, který byl použitelný v MythTV (a dalších aplikacích). Tento široce podporovaný formát se jmenuje XMLTV a jeho popis najdete v tomto souboru.

Automatické nástroje na takové přepisování z HTML se nazývají webscrapery a projekt XMLTV jich obsahuje desítky, pro většinu zemí Evropy i jiných států světa. Bohužel funkční česká verze tam chybí z důvodů, které tu nechci příliš rozmazávat, ale souvisí to s výhrůžkami pořizovatelů dat, které náš český skript pro XMLTV používal. Google napoví víc, když se ho zeptáte na „tv_grab_cz“.

Později, s rozvojem digitálního vysílání, se i v Česku objevil EPG (elektronický programový průvodce), který čte programové informace přímo z vysílaných digitálních streamů. MythTV umí EPG data načítat a využít rovnou, pokud jsou kanály dobře naladěny a EIT je povoleno, což se povoluje hned na dvou místech – v definici TV karty a pak pro každý TV kanál zvlášť v definici TV kanálů. Můžeme si dokonce vybrat, bude-li číst EPG data pouze pokud se díváme na daný kanál (pasivní sběr EIT), anebo jestli bude MythTV sám aktivně prolaďovat kanály a načítat EIT data v době, kdy se nedíváme na nic (aktivní EIT).

Kdo chce s vysílaným EPG experimentovat mimo MythTV, může použít jednoduchý prográmek nazvaný tv_grab_dvb, který už podle názvu grabuje data z DVB a vydává je ve formě XMLTV. Získáme ho jednoduše:

# svn co http://www.darkskiez.co.uk/svn/tv_grab_dvb/trunk tv_grab_dvb
# make

Nyní stačí mít naladěn nějaký kanál, co EIT vysílá a po spuštění tv_grab_dvb se už informace sypou na stdout.

Myth a EPG

Programový průvodce v MythTV barevně odlišuje typy pořadů

Bohužel úroveň EPG informací vysílaných našimi televizními stanicemi podle mého názoru dost zaostává za výstupem programu tv_grab_cz. Nejenže vysílané EPG nepodporuje konkrétní číslo dílu a sérii seriálu, herce, režiséra a typ pořadu (např. „dětem“ nebo „sport“, což MythTV umí i hezky barevně rozlišit), ale navíc v něm chybí i pořádné názvy pořadů – např. Večerníček se nejmenuje „Večerníček“, ale je pojmenován právě hraným názvem seriálu (tedy aktuálně Méďové), takže nahrávat ho podle tohoto klasického názvu nejde. Škoda. Ke všemu v EPG nesmyslně míchají název seriálu s názvem konkrétního dílu, například „Vyprávěj, Vím, co dělám“, což opět znemožňuje nahrávat jednoduše podle názvu seriálu („Vyprávěj“). Vlastně míchají dohromady i původní a přeložený název, například „Nelítostná rasa, Fierce People“, což rozpoznávání názvů filmů pro účely nahrávání dále komplikuje.

Naopak tv_grab_cz pracující s kvalitními informacemi webu tv.sms.cz dokáže krásně rozpoznat číslo dílu a celkový počet dílů plus sérii seriálu (sám jsem tam kdysi naprogramoval převod římských čísel na arabské), vybere a rozepíše režiséra a herce, typ pořadu, cizojazyčné názvy pořadů uvede zvlášť a hlavně název seriálu je v názvu pořadu, zatímco název konkrétního dílu je v podtitulku. Díky tomu je velmi jednoduché jak nahrávání podle názvu seriálu, tak i třeba dle režiséra nebo oblíbeného herce.

Taktéž díky rozpoznání čísla dílu seriálu funguje přeplánování pořadů pro pozdější nahrávání – některé seriály se vysílají i třikrát za týden, tj. premiéra + 2 reprízy, takže plánovač nahrávání má dostatečný prostor kouzlit s plánem tak, aby i s omezeným počtem tunerů nahrál všechno, co si uživatel zamane.

Příklad správně rozlišených názvů, herců, režiséra a dalších informací – nejdříve jak mají správně vypadat informace připravené pro MythTV, tedy výstup z tv_grab_cz:

<title lang="cs">Nelítostná rasa</title>
<title lang="en">Fierce People</title>
<desc lang="cs">V každé rodině se najde cvok. Americký film.</desc>
<category lang="cs">Film</category>
<date>2005</date>
<premiere />
<credits>
    <director>Griffin Dunne</director>
    <actor>D. Laneová</actor>
    <actor>A. Yelchin</actor>
    <actor>D. Sutherland</actor>
    <actor>Ch. Evans</actor>
    <actor>K. Stewartová</actor>
    <actor>P. de la Huertaová</actor>
    <actor>B. Mankuma</actor>
    <actor>E. Perkinsová</actor>
</credits>

A teď pro porovnání tentýž pořad v EPG datech:

<title lang="cs">Nelítostná rasa, Fierce People</title>
<sub-title lang="cs">V každé rodině se najde cvok. Americký film (2005). Hrají: D. Laneová, A. Yelchin, D. Sutherland, Ch. Evans, K. Stewartová, P. de la Huertaová, B. Mankuma, E. Perkinsová a další. Režie Griffin Dunne.</sub-title>
<desc lang="cs">Patnáctiletý Finn (A. Yelchin) žije se svojí matkou Liz (D. Laneová) v New Yorku...

Jak se tak na to dívám, zřejmě by se dal pokročilý parser informací z tv_grab_cz  použít i na přeparsování a upravení informací z EPG předtím, než by byly ručně vloženy do MythTV databáze. Část informací by se z toho textu dala ještě vydolovat (herci, režisér a rok premiéry), ale ty názvy a série, stejně jako typ pořadu, se vymyslet z ničeho nebo jen tak uhádnout bohužel nedají.

Myth a EPG

Plánovač nahrávek by byl bez správně označených dílů a sérií u seriálů ztracen

Uvedu ještě jeden příklad nemožnosti parsování dílu seriálu a správného názvu – nejdřív opět jak by to mělo vypadat, tedy správný český a původní název seriálu, přesné číslo dílu, celkový počet dílů a série, výstup z tv_grab_cz:

<title lang="cs">Sex ve městě</title>
<title lang="en">Sex and the City VI</title>
<desc lang="cs">Američanka v Paříži 1/2. Závěrečná řada úspěšného amerického komediálního seriálu.</desc>
<category lang="cs">Seriál</category>
<date>2003</date>
<episode-num system="onscreen">VI (19/20)</episode-num>
<episode-num system="xmltv_ns">5 . 18/20 . </episode-num>

Pro porovnání údaje z EPG, které nejdou rozumně přeparsovat (číslo dílu by ještě snad šlo, pokud je vždy na začátku sub-title, ale série z názvu, stejně jako rozdělení názvu na původní a českou verzi, by spolehlivě udělat nejspíš nešlo):

<title lang="cs">Sex ve městě VI, Američanka v Paříži 1/2, Sex and the City VI</title>
<sub-title lang="cs">19/20 Půvabná novinářka Carrie Bradshawová ví hodně o sexu a nebojí se na to zeptat! Závěrečná řada úspěšného amerického komediálního seriálu, oceněného Zlatým</sub-title>
<desc lang="cs">Odejít ze zaběhnutého života je vždycky těžké...

tv_grab_cz

Ne ve všech zemích se používají webscrapery – např. v USA pochopili, že kvalitní XMLTV data lidé rádi zaplatí a proto tam funguje nezisková organizace spoluzaložená autory MythTV nazvaná Schedules Direct, která lidem obsáhlý televizní program prodává za malý poplatek. Kupodivu i náš výborný zdroj televizního programu tv.sms.cz nabízí programová data za poplatek, jenže bohužel v naprosto nevhodné formě přístupné pouze z nějakého omezeného programu určeného pro pouhé prohlížení a navíc nefungujícího na Linuxu. Bylo by velmi dobré, kdyby se někdo v Česku pokusil nabídnout solidní XMLTV data, podobně jako se to pokouší v sousedním Slovensku. Mezitím můžete zkusit použít starý tv_grab_cz, který jsem zahlédl na PasteBinu.

Ruční použití tv_grab_cz:

# tv_grab_cz --help
# tv_grab_cz --list

Z předlouhého seznamu si vybereme ty TV kanály, které sledujeme a zadáme je na příkazové řádce za parametry -c, přidáme počet dnů, na které chcete program získat a doplníme ho za parametr -d, parametrem -f určíme výstupní soubor a parametrem -u potvrdíme, že výsledná XMLTV data použijeme pouze pro naši osobní potřebu a v žádném případě je nebudeme distribuovat dál:

# tv_grab_cz -c ct1 -c ct2 -c nova -c prima -d 7 -f /tmp/programy.xml -u

Výsledný XML soubor teď ručně nacpeme do databáze zavoláním příkazu mythfilldatabase se správným číslem ‚sourceid‘, které získáme z tabulky ‚cardinput‘ nebo ‚channel‘ MythTV databáze mythconverg. Následující příkaz vypíše všechna čísla zdrojů (sourceid), které mají naladěný kanál ct1 (ČT1).

# echo "SELECT DISTINCT sourceid FROM channel WHERE xmltvid='ct1'" | mysql mythconverg
1
4
6

Vidíme sourceid 1, 4 a 6, takže zavoláme mythfilldatabase pro každý z nich:

# mythfilldatabase --update --file 1 /tmp/programy.xml
# mythfilldatabase --update --file 4 /tmp/programy.xml
# mythfilldatabase --update --file 6 /tmp/programy.xml

Je nezbytné předem sladit identifikaci televizních kanálů v /tmp/programy.xml (vlastně ty zkratky jmen kanálů, co jsou zadané za parametry -c na příkazové řádce výše) s XMLTV jmény v nastavení kanálů (sloupec xmltvid v tabulce channel, což se dá editovat třeba v mythtv-setup), jinak se programová data nespárují se správnými TV kanály. A nezapomeňte vypnout EIT data pro dané TV kanály (sloupec useonairguide tabulky channel), jinak ta data bude MythTV periodicky přepisovat údaji z vysílaného EPG!

Mimochodem, kdybychom měli tv_grab_cz upravený dle nového XMLTV frameworku, tak by mythbackend proces byl schopen volat si mythfilldatabase automaticky (třeba někdy v noci) a mythfilldatabase by si pak automaticky zavolal tv_grab_cz a všechno by fungovalo krásně samo. Protože ale tv_grab_cz zastaral a nebyl upraven pro nový framework XMLTV, tak je nutné volat ho takto ručně (tedy spíš z crontabu).

Výhodou tohoto ručního postupu je, že jedenkrát stáhnutý seznam TV programů naplním rovnou do několika různých video zdrojů, takže ušetřím trojité stahování programů z webu, ke kterému by jinak zřejmě došlo, pokud by se video zdroje lišily (což se u mě mírně liší, protože každá karta má naladěné trošku jiné kanály – např. DVB-S má 9 kanálů z DVB-T a k tomu 11 dalších, zatímco DVB-S2 má vše co DVB-S a k tomu ještě Novu HD) – MythTV totiž pořád ještě neumí programová data sdílet mezi stejnými kanály připojenými na různé zdroje, jestli se nepletu (je to už dlouho v seznamu uživatelských přání).

bitcoin_skoleni

Pokud budete článek číst někdy později a tv_grab_cz už vám nebude fungovat, je to proto, že je velmi citlivý na jakékoliv změny na webu, ze kterého čte televizní program. V takovém případě zkuste buďto najít novější verzi, anebo nějaký úplně jiný zdroj spolehlivých dat. Na tvpc.cz budu situaci dál sledovat a kdo ví, třeba časem přejdeme na nějakou komerční nabídku použitelných XMLTV dat, anebo vylepšíme parsování EPG EIT dat tak, že webscraping už nebude potřeba.

Příště?

Slíbený popis dekódování satelitních kanálů musím bohužel o týden odložit, protože jsem při posledních kontrolách návodu na jiné kombinaci HW a SW dospěl k neúspěchu, což si vyžádá hlubší zamyšlení. Odměnou za čekání bude snad rozšíření ověřeného HW a vyzkoušeného SW. Takže opět příště, ale tentokrát už určitě.

Autor článku

Petr Stehlík vystudoval aplikovanou informatiku a pracuje jako vývojář webových aplikací a administrátor linuxových serverů. Provozuje vlastní server tvpc.cz.