2012年7月8日日曜日

epgrec BS/CSチャンネル変更追従(DVB)

CSは何かチャンネル変更が頻繁に起こるみたい。
chardev版は多分色々やる人がいるだろうけど、
DVB版でepgrec使う人はそんなにいないだろうから、自分で何とかする必要がある。

チャンネル情報は、s2scanでスキャンすればとってこれる。

s2scan -a 2 -b > bs_channels.txt
BS朝日1:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:151
BS朝日2:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:152
BS朝日3:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4010:153
BS−TBS:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1049480|DTV_ISDBS_TS_ID=0x4011:161
...

s2scan -a 2 -c > cs_channels.txt
TBSチャンネルHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:296
テレ朝チャンネルHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:298
朝日ニュースターHD:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1613000|DTV_ISDBS_TS_ID=0x6020:299
ザ・シネマ:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1653000|DTV_ISDBS_TS_ID=0x7040:227
ホームドラマCH:DTV_DELIVERY_SYSTEM=9|DTV_FREQUENCY=1653000|DTV_ISDBS_TS_ID=0x7040:294
...

取ってきたファイルを/usr/local/etcに置くことにして、
とりあえず以下3つに対処が必要。
それぞれs2scanで取ってきたデータを使うように変更すればいいんじゃないか。

  • tune
  • epgdump
  • epgrec
tune/epgdump

どっちもcで書かれてて、チャンネルテーブルをコード直書きで定義しているだけなので、
s2scanで作ったファイルを読んでテーブルを置き換えればいい。
ただ、tuneはCSも読めるように改造する必要がある。

newtune.c
readchannels.c

epgdumpの方は、上のreadchannelsをリンクして、
ひととおりテーブルが読み終わった後にすげ替えればいい。

475     pStas = calloc(1, sizeof(STATION));
476     pStas->tsId = svtcur->transport_stream_id ;
477     pStas->onId = svtcur->original_network_id ;
478     pStas->svId = svtcur->event_id ;
479     pStas->ontv = arg_onTV ;
480     pStas->name = svtcur->servicename ;
481     staCount = 1;
482   }
483   read_channels_epgdump(arg_onTV, &pStas, &staCount);
484
485   fprintf(outfile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
486   fprintf(outfile, "<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n\n");
487   fprintf(outfile, "<tv generator-info-name=\"tsEPG2xml\" generator-info-url=\"http://localhost/\">\n");

epgrec

epgrecもテーブルがあるだけなので、同じようにファイルを読んで置き換えればいいはずだけど、
正直phpは分からん。 文字コードの扱いがうまくいってない気がするけど、とりあえず動く状態。

readchannels.php

config.phpの$BS_CHANNELS_MAP, $CS_CHANNELS_MAPを作り終わった後に読み込んですげ替えればいい。

include_once( INSTALL_PATH . '/readchannels.php');

ontvjapan.comの番号はとくに意味ないみたいなのでBSは4000番台, CSは5000番台にした。

チャンネル番号はすべてプログラム番号に変えて、プログラム番号を受け取ったらtuneの方で対応する。
なので、BS/CSの取得チャンネルは以下のように変更。

// BS/CSでEPGを取得するチャンネル
// 通常は変える必要はありません
// BSでepgdumpが頻繁に落ちる場合は、受信状態のいいチャンネルに変えることで
// 改善するかもしれません

define( "BS_EPG_CHANNEL",  "211"  );    // BS
define( "CS1_EPG_CHANNEL", "CS55"  );   // CS1
define( "CS2_EPG_CHANNEL", "CS300" );   // CS2
チャンネルがガラッと変わるので、mysqlの方は旧チャンネルのデータを落とした。
どんなコマンドを実行したかは忘れた。

追記:とりあえずまとめて以下
http://tthhfugapiyo.blogspot.jp/2014/06/epgrecdvb.html

0 件のコメント:

コメントを投稿