Dekódování satelitních TV kanálů
Hned úvodem si ostře omezíme vstupní podmínky, abychom ušetřili čas čtenářům hledajícím návod na nelegální příjem placených a proto kódovaných TV programů. Dekódovat budeme jedině s pomocí legální karty. Dokonce se nebudeme ani zabývat speciálním HW CAM modulem na satelitní nebo přídavné kartě pro vložení dekódovací karty. Takové řešení, ač právně nejčistší, je ve skutečnosti značně omezující, protože dovolí sledovat nebo nahrávat jen jeden jediný TV kanál. V našem případě si vystačíme s programátorem Phoenix/Smart Mouse za několik stokorun, připojeným na sériový nebo USB port. Tento programátor použijeme jako běžnou čtečku SmartCard tedy čtečku čipových karet. Přestože existují i různé levné varianty čteček čipových karet, nemám je vyzkoušené, a proto zatím nemohu doporučit.
Klasický Phoenix programátor připojený do sériového portu
Tento Phoenix programátor/čtečka SC bude spolupracovat s obyčejnou („budget“) DVB-S kartou a speciálním softwarem, které zajistí to vlastní rozšifrování systému podmíněného přístupu Cryptoworks. Tímto systémem u nás kódují tři největší poskytovatelé českých/slovenských TV programů ze satelitu. Ač zkušenosti mám jen s kartami CSLink (dříve Gital), jsem si jistý, že SkyLink (dříve Trade&Technology) bude fungovat stejně – alespoň do doby, než systém Cryptoworks vypnou (tedy minimálně snad do konce roku 2012). Satelitní UPC rovněž funguje stejně (taky Cryptoworks), ale nezkoušel jsem to, jejich kartu nemaje. Těším se, až někdo otestuje nový systém Irdeto PIsys (CAS-3), který v současné době CSLink i SkyLink přecházejí. Uvidíme v létě.
Čipová karta pro Cryptoworks
Rovnou upozorňuji, že tohle téma je v MythTV konferenci kruté tabu – tamější programátoři, většinou z USA, už dávno vzdali svobodu projevu a pod strachem z DMCA o těchto věcech nejen mlčí, ale aktivně brání jejich diskutování v mailing listech, protože by to dle jejich obav mohlo uvrhnout celý MythTV projekt do temnoty a potíží se správci Velkého obsahu, úřady a soudy. Proto jsem rád, že mohu tady napsat snad ještě svobodně, jak už 4 roky legálně dekóduji a sleduji české TV programy z družice Astra na pozici 23,5 st. východně pomocí SoftCAM (softwarového modulu pro podmíněný přístup).
SmartReaderPlus – čtečka čipových karet připojená do USB, funguje dobře
Software na emulování CAM a dekódování systému Cryptoworks je několik druhů. Nebudu zastírat, že jsem nikdy neřešil a tedy nevím, jestli byl dřív newcs, newcamd, camd3, mgcamd, scam či slepice nebo vejce. Pro mě je rozhodující, že na rozdíl od většiny programů bez dostupného zdrojového kódu, s nejasným původem a nejistým obsahem je možné použít plně open source řešení nazvané aktuálně open-sasc-ng.
Open-sasc-ng
„Open“ ve jménu tohoto software značí otevřený vývoj, což je od prosince 2006, kdy autor, vystupující na DVBNetwork fóru „DVB-Software Linux“ pod nickem NooneImportant otevřel zdrojový kód všem a zpřístupnil ho v SVN. A „ng“ (Next Generation) je tento software od srpna 2006, kdy NooneImportant dokázal vyvinout DVB loopback – virtuální DVB rozhraní, které věrně simuluje skutečnou DVB kartu, na kterou je napojeno přes user-space démona. Video+audio z tohoto virtuálního DVB adaptéru už vychází dekódované, takže stačí jednoduše překonfigurovat v aplikacích jméno DVB zařízení a vše funguje. V minulosti bylo nutné ručně přidávat háčky na volání sasc
do jednotlivých aplikací, což bylo velmi otravné a bez šance na to, že by lidem jednoho dne fungovala binární distribuce MythTV (třeba Mythbuntu) bez patchování a kompilování. Od doby Sasc-ng dekódování funguje transparentně, bez úprav aplikací.
Postup zprovoznění open-sasc-ng je, že si na míru svému linuxovému kernelu zkompilujeme modul „dvbloopback“, který se napojí na reálný DVB adaptér a data mezi nimi bude posílat přes user space dekódovacího démona (vlastní sasc-ng). Kernel modul při zavádění požádáme o vytvoření tolika virtuálních DVB zařízení, kolik fyzických chceme dekódovat. Následně mezi sebou fyzické a virtuální adaptéry propojíme pomocí sasc-ng a jeho parametru -j
. Např. na fyzický /dev/dvb/adapter0/
připojíme virtuální /dev/dvb/adapter1/
spuštěním sasc-ng -j 0:1
. Vlastní MythTV (či jinou DVB aplikaci) potom přenastavíme tak, aby místo /dev/dvb/adapter0/frontend0
pracoval s oním virtuálním /dev/dvb/adapter1/frontend0
.
Mimochodem, zde se nám hodí poznatky z minulého článku o kočírování udev a pevných číslech DVB karet, které je ovšem potřeba doplnit o jednu vlastnoručně zjištěnou věc: dvbloopback modul nedokáže vytvořit virtuální adaptér dál než na prvním volném čísle, i když mu přikážete parametrem adapter_nr
číslo jiné. Proto doporučuji parametr za dvojtečkou pro sasc-ng parametr -j
dávat vždy podle čísel skutečně vytvořených adaptérů, aspoň dokud tu chybu někdo neopraví. Takže když jsem v minulém článku své dvě satelitní karty pevně usadil na čísla 5 a 6 a prvních pár (adapter0 až adapter4) si nechal volných pro strýčka Příhodu, tak dvbloopback modul mi vytvoří adaptéry na prvních volných pozicích, tj. 0 a 1. No a tak teď používám parametry -j 5:0 -j 6:1
a MythTV pracuje s virtuálními kartami adapter0 a adapter1.
Je tu vlastně ještě jedna poměrně elegantní možnost, jak se čarování s udev vyhnout, pouze pokud ale máme každou kartu jinou. sasc-ng umí reálné karty pro parametr -j
identifikovat i jmény, které na požádání rád vypíše:
# sasc-ng -i 5: ST STV0299 DVB-S 6: Conexant CX24116/CX24118 7: Afatech AF9013 DVB-T
Podle dokumentace by mělo jít použít mapování virtuálních adaptérů na fyzické nějak takto: sasc-ng -j "ST STV0299 DVB-S":0 -j "Conexant CX24116/CX24118":1
, čímž bychom se zbavili závislosti na pevné pozici DVB adaptérů a tím i udev konfigurace. Ovšem tohle jsem ještě nezkoušel…
Tento DVB loopback kernel modul je jako většina ostatních modulů velmi citlivý na změny v jádře. Proto ho musíme zkompilovat oproti verzi kernelu, který aktuálně používáme. Kompilace kernelového modulu vyžaduje zdrojové kódy jádra, které aktuálně používáme (viz uname -r
), takže si je nainstalujeme. Pro můj Linux kernel verze 2.6.30 přivolám jeho zdrojový kód a zkonfigurované hlavičkové soubory v Debianu následujícími třemi příkazy (uživatelé jiných distribucí postupují analogicky):
# aptitude install -t lenny-backports linux-headers-2.6.30-bpo.2-686 # aptitude install -t lenny-backports linux-source-2.6.30 # cd /usr/src && tar xjf linux-source-2.6.30.tar.bz2
Tak máme hlavičkové soubory i zdrojové kódy jádra, takže stáhneme open-sasc-ng z SVN repozitáře:
# svn co http://opensvn.csie.org/opensascng # cd opensascng/open-sasc-ng/
Zkonfigurujeme pro kernel, který používáme a přeložíme kernelový modul:
# ./configure --dvb-dir=/usr/src/linux-source-2.6.30 # make module
Výsledkem je dvbloopback/module/dvbloopback.ko
. Modul nakopírujeme k ostatním modulům aktuálního kernelu:
# cp dvbloopback/module/dvbloopback.ko /lib/modules/`uname -r`/misc # depmod -a
Přidáme mou úpravu pro konfigurovatelný sériový port a přeložíme samotný sasc-ng:
# wget http://tvpc.cz/sasc-cam-opt.diff # patch -p0 < sasc-cam-opt.diff # make # ./sasc-ng --help
Výsledkem je program sasc-ng
. Ten nakopírujeme třeba do /usr/local/sbin/
a protože má běžet pořád, jako démon, začneme vymýšlet startovací skript. Určitě se dá inspirovat skriptem nacházejícím se přímo v SVN repozitáři: contrib/sascd.initd
. Uživatelům operačního systému Debian doporučím přímo debian/init.d
skript. Oba skripty čtou uživatelské nastavení ze souboru /etc/default/sascn-ng
, jehož příklad je v debian/default
. Moje aktuální verze /etc/default/sasc-ng
vypadá následovně:
# počet DVB adaptérů ADAPTERS=2 # jejich čísla (adapter_nr parametr) ADAPTER_NR=0,1 # volby pro sasc-ng démona DAEMON_OPTS="-j 5:0 -j 6:1 --sid-filt 16 --sid-allpid --sid-nocache -d 0 --cam-budget --cam-dir /etc/sasc-ng --cam-opt --serial=/dev/ttyS0"
Používám dvě DVB-S karty (na číslech 5 a 6, viz minulý článek), proto nastavuji ADAPTERS=2
. Parametry -j 5:0 -j 6:1
mapují virtuální adaptéry na reálné. Klíčový parametr je --cam-opt
, který byl přidán mým patchem (viz kompilace) a který vezme následující parametr (v mém případě tedy --serial=/dev/ttyS0
) a tento předá do SC pluginu (který zajišťuje komunikaci se SmartCard čtečkou). Ten „vnitřní“ --serial
parametr tedy řekne SC pluginu, aby hledal Phoenix programátor na prvním sériovém portu.
Pokud máte modernější verzi programátoru Phoenix, který už je připojený na USB port a emuluje-li tam sériový port, pak by mělo stačit upravit výše zmíněný parametr na --serial=/dev/ttyUSB0
. Poznámka za 500: pro Phoenix s čipem pl2303 to bohužel neplatí, emulace sériového portu v aktuálních Linux kernelech současnému SC pluginu nedostačuje.
Phoenix programátor do USB s pl2303 – v Linuxu nefunguje emulace sériového portu – nebrat!
V /etc/sasc-ng/
cestě určené parametrem --cam-dir
jsou očekávané konfigurační soubory, ale jednoduché lokální dekódování přes SC plugin nic konfigurovat nepotřebuje. Pokud máte zájem, tak ve zdrojových kódech najdete i adresář obsahující příklady konfiguračních souborů: sc/PLUGINS/src/sc-src/examples/
.
Jelikož se jedná o softwarové dekódování, zatěžuje nám to hlavní procesor. Pro zajímavost jsem pokusně změřil náročnost tohoto dekódování na mém Athlon X2 5200+ procesoru běžícím na 1000 MHz (díky CPU „ondemand“ governoru). Při nahrávání jednoho programu ve standardním SD rozlišení si proces ‚sasc-ng‘ vzal 9 % času CPU (dle ‚top‘) a ‚mythbackend‘ proces pak 3 %. Pro 3 současně nahrávané programy si sasc-ng vzal 27 % (mythbackend pak 9 %) a pro 5 současně nahrávaných pořadů pak už 54 % času procesoru (mythbackend: 13 %). Čili je vidět, že to roste v podstatě lineárně, takže pokud plánujete nahrávat mnoho kódovaných kanálů současně, patřičně dimenzujte výkon procesoru.
Zajímavější bude do budoucna příjem a nahrávání kanálů v HD, ten mám ale kódovaný jen jeden – ČT HD. Při nahrávání si vezme 17 % CPU pro sasc-ng (mythbackend pak zůstane na svých 3 %). Pokud má někdo kartu SkyLink, kde může přijímat už dnes těch kódovaných kanálů v HD třeba 5 naráz, tak ten už by si s 1000 MHz nevystačil… Je dobré to vzít v potaz jak při recyklování starého železa pro backend, tak i při navrhování nového stroje, kde by třeba dnes oblíbený pasivně chlazený Atom mohl při nahrávání více HD kanálů zažívat i horké chvilky.
Počeštění MythTV
Na závěr seriálu o MythTV bych ještě rád zmínil, že aktuální MythTV 0.22 je (s výjimkou pluginů) kompletně počeštěn. Práci na překladu jsem zahájil už před pěti lety a později jsme pokračovali s Tomášem Klimkem a Petrem Sršněm. Petr nakonec tu mravenčí práci představující stovky hodin v Qt Linguistu (přes 4000 řetězců) dokončil včas před podzimním vydáním. Nyní bychom rádi v tomto českém překladu opravili překlepy a jiné chybky pro rychle se blížící vydání MythTV 0.23 a později začali pracovat i na překladech MythTV pluginů.
Proto pokud víte o nějakých chybách v překladu, nahlaste nám je na tvpc.cz – buďto v Jabbim místnosti, nebo v mythtv-cz mailing listu. Stejně tak uvítáme každou pomocnou ruku na to překládání. Na tvpc.cz máme i vlastní SVN repozitář, takže je možné na překladu jednoduše spolupracovat.
Závěr
Tímto se prozatím s věrnými čtenáři loučím. Smyslem seriálu o MythTV bylo představit mocné multimediální linuxové řešení, které dokáže přinést mnoho potu, nadávek a nových zkušeností při konfigurování a velké rodinné pohody při používání. Zároveň jsem chtěl ustavit určitou společnou platformu (viz tvpc.cz), kde si lidé mohou vyměnit zkušenosti, nabrat inspiraci a dodat odvahy v dalším souboji. K MythTV se rád na Root.cz budu nepravidelně vracet, například při příležitosti vydání nových verzí či jiných přelomových událostech.