2011年9月18日日曜日

更新停止

引越しを前提にこっちで作業性確認中

引越ししました。
epgrecブランチ(もしくはフォーク)「epgrec UNA」を公開!
人柱募集中です。

2011年9月11日日曜日

いまこんなかんじ

番組表
三重テレビとEテレがマルチ編成になっているのが分かる。

番組表上での予約表示
灰色になっている番組は、自動予約禁止になっている。




公開だがもう少しかかリそう。
・マルチ編成対応を試験運用中
・公開にあたりインストールや環境変化への対応が必要
・追従処理のNHK対応が完了していない。くたばれNHK

あと気になる点だが
・衛星波まわりは、受信環境がないためEPG処理を筆頭に色々漏れがあると思う。
・まれにEPG歯抜けがepgdumpでの処理段階で発生する。SDTが抽出できない場合やEITも途中での歯抜けがあるようだ。何が原因なのか不明というか追求していない。
・自動キーワードのパラメーター変更UIがない。(phpMyAdminで済ましている)

2011年8月12日金曜日

epgrec 地デジ・マルチ編成チャンネル対応

epgdumpは、Rec10版に今まで行った変更を適用した。

epgrecは、config.phpのチャンネル設定仕様を弄らない方向で対応した。
xml取り込み時のeit[schedule]とeit[pf]のマージ処理がマルチチャンネルに対応していなかったため手間取った。これで衛星波も対応したはず。
デバッグは、まだ行っていない。チャンネルDBの内容が変化するため環境復旧が厄介になるからだ。
デバッグは時間の取れる日曜の夜になりそうだ。

2011年7月30日土曜日

録画直前のEPG更新(時間追従処理) その4

昨日と今日、NHKの高校野球に絡む予約でデバッグを行ったがうまく行かない。
EIT[schedule]が更新されず、またEIT[pf]の次番組情報も未定なため以降の番組が中止なのか繰り下がりなのか判断できないからだ。やっぱりNHKは鬼門だ。

今のままでは中止と繰り下がりの両方に対応できないのでとりあえずaribの仕様にある未確定期間のEPG二重化を検討する。かなりの大改修になるので出来れば避けたかったが仕方がない。
あと他にも仕様を見落としているのかもしれないのでaribの資料を見直さなければ

2011年7月23日土曜日

EPG放送局変動対処パッチ

番組表の異常 で述べた症状への対処パッチをあげる。
ただし本当に放送局名変更があった場合にその局のEPGが更新されなくなる副作用があるので注意すること。
放送局名変更があった場合は、放送局名をDB上で直接変更するかこのパッチを一時的に戻しgetepg.phpを動かせばよい。

本問題は、PT2での正常受信が確保できない限り根治しない。
このパッチは、あくまで対処療法である。


*** storeProgram.inc.old.php 2010-09-04 21:08:26.074996000 +0900
--- storeProgram.inc.php 2011-07-22 23:09:27.217377015 +0900
***************
*** 65,73 ****
     }
    }
    else {
!    // 存在した場合も、とりあえずチャンネル名は更新する
     $rec = new DBRecord(CHANNEL_TBL, "channel_disc", $disc );
     $rec->name = $ch->{'display-name'};
    }
    }
    catch( Exception $e ) {
--- 65,81 ----
     }
    }
    else {
! /*   // 存在した場合も、とりあえずチャンネル名は更新する
     $rec = new DBRecord(CHANNEL_TBL, "channel_disc", $disc );
     $rec->name = $ch->{'display-name'};
+ */
+    // チャンネル名の更新ではない場合に被害が大きいのでログを残して終了する
+    $rec = new DBRecord(CHANNEL_TBL, "channel_disc", $disc );
+    if( $rec->name != $ch->{'display-name'} ){
+     reclog( 'getepg::チャンネル名が違います('.$disc.' [OLD]'.$rec->name.' -> [NEW]'.$ch->{'display-name'}.')', E_ERROR );
+ //    $new_name = $xmlfile.'.'.date("Y-m-d H:i:s", time());
+ //    rename( $xmlfile, $new_name );
+     return; //信頼できないデータなので終了
    }
    }
    catch( Exception $e ) {

2011年7月20日水曜日

新実装箇所のバグつぶし

前回の
>使用上では問題はないが重複による予約漏れのログ出力がされなくなったので原因を究明中
は、新規予約と重複する既存予約との優先度判定のDBクリエ生成にバグがあった。
当方がPHPの仕様に不明であることによるバグかと思っていたがかなり間抜けなバグだった。

他に番組表で予約表示をチューナー毎に色分けするように改修したときに予約表示をバックグラウンドからボーダーに変更した為、縦方向での表示ズレが発生していたのを修正した。また既存予約のチューナーが変更された場合に番組表をリロードするようにした。

2011年7月15日金曜日

自動録画キーワードへの優先度の追加

チューナー番号の割り振りに不満が有ったのでそれを修正がてらついでに長らく放置していた自動録画キーワードへの優先度の追加を実装した。

使用上では問題はないが重複による予約漏れのログ出力がされなくなったので原因を究明中

2011年7月11日月曜日

番組表の異常

番組表で不特定の局が別の局に変わってしまう事象に遭遇された方がいると思う。
これは、epgrecやepgdumpのバグではなくrecpt1での録画が別の局に変わってしまう事で発生する。
recpt1にバグがあるかは不明だがOSやマザーボードとメモリ・電源の相性など別の要因を疑う必要がありそうだ。
過去にWindowsでPT2と特定メーカーのマザーは相性が悪いという話があったがLinuxでも注意が必要かもしれない。

2011年5月24日火曜日

番組追従用epgdump

当方が現在使用しているのをデグレした物をアップした。
diffではなく差分ファイルのアーカイブなので既存の物と入れ替えてコンパイルして欲しい。
デグレ内容は、「英数字記号の半角化」「conv_title_subtitle()の全面改修」「【新】などの情報文字列を番組名から番組詳細へ移動」の3点で既知のバグやepgrec側の摺り合わせが必要なので削除

現行のepgrecでも使用できるはずだがフロントエンド側で対応しないかぎり機能向上は、まったくしないので現時点では参考程度と考えるように
またタイムスタンプ表記を"yymmdd hhmmss"から"yy-mm-dd hh:mm:ss"に変更したのでepgrec以外のフロントエンドでは問題が出る可能性がある。

http://2sen.dip.jp/cgi-bin/dtvup/source/up0655.zip (コメント編集中にリターン押しちゃった orz)
(eit[p/f]の扱いでバグがある。向こうのブログにあるepgrec UNA用epgdumpで修正されている)

-05/25 追記-
readme.txtを一部補足修正(ここだけでw)
>またコマンドラインの最後に"-pf"を付加することでeit[pf]のみを出力
これは、4秒分ぐらいのTSファイルで出力できるのでEPG受信時間の大幅な短縮が出来る。

>仮に対応させても予約直前にEPG更新を行わないと番組追従は出来ませんのでご注意を
「予約録画の開始直前にEPG更新を行わないと番組編成が臨時変更されたときの番組追従は出来ません」に修正
(06/07追記)あとEPG更新はイカに録画開始時刻に近づけるかが肝心なのでepgrecの予約3分前縛りを無くさないと追従に失敗する場合がある。

2011年5月15日日曜日

世界卓球

2戦全勝
テレ東系は、延伸判断とEPG更新が速いみたいですね

やっぱりギリギリまで更新しないNHKが鬼門だなあ

2011年4月12日火曜日

ちょっと横道にズレてみる

あのfoltiaが、「foltia ANIME LOCKER」として市販された。
のだが内包しているツール群のライセンスは大丈夫なのかね?
どこまで使ってるか知らないが「ARIB STD-B25 仕様確認テストプログラム」はセーフだけどrecpt1とepgdumpはGPL。tss.pyは不明
そういえばepgdumpのセグフォは、修正したのだろうか?販売の形を取っている以上あのままじゃ話にならないので対策したか新しく作り直したのだろう。
もし前者なら是非ともGPLに則ってソースを公開してほしい。 EPG画面を見る分にはepgdumpのジャンル出力バグが残っているみたいだしw

しょぼカル周りがやばいよね
ここって編集人のヤル気がない地域はデータが無いし有っても更新されない。foltiaALにその辺の説明がないのでトラブルになるんとちゃうかな・・・
これを機に編集人が増えて情報が充実してくれるなど善い方向にいってくれればいいけど編集のトラブルも増えそうだ・・・
トラフィックも増えそう。市販ソフトが個人鯖に負担を強いるのもどうかと思う。
それと「しょぼカル」そのものが逝かれたときは、どうなるんだろうね

あと番組追従もやばい
オリジナルfoltiaだと しょぼカルからの自動録画は、EPGを使用しないので しょぼカルが編集されないと録画を失敗する。この問題は、ToDoに入っているけどまだ対策されていない。
EPGからの予約もEIT[pf]を意識したEPG取得をしていないなら番組延長にともなう追従は漏れが出るだろうな
ここのところは、foltiaALどうなってるんだろうね

2011年3月27日日曜日

録画直前のEPG更新(時間追従処理) その3

今までepgdumpとepgrec双方で行っていたEIT[スケジュール]とEIT[現在/次]のマージをepgrecだけで行うように変更した。
これに伴いepgdumpの出力をEIT[現在/次]とEIT[スケジュール]をタグで区別する形で分離して出力するように改修した。また放送休止を正しく判断するために途中から取得した分のEPGについては時系列が連続していない物を破棄するようにした。

録画直前のEPG更新に関しては3分前にEIT[スケジュール]とEIT[現在/次]を取得して1分前にEIT[現在/次]のみを取得するように変更した。

地上DのEPG受信時間だがARIB規定のディフォルト周期が60秒になっているためepgrecの設定値60秒では歯抜けが発生している。EPG周期は±30%のブレを許容している事を踏まえるとEPGを全部取得するには現状の60秒から80秒に変更した方がよいだろう。
ただしEPG周期は、任意で変更できるため局によっては80秒でも歯抜けが発生する。

時間追従処理のデバッグは、ある程度すすんだが途中で意気消沈・・・
高校野球で続きをやればいいのだが気乗りしない。

2011年2月23日水曜日

他所で・・・

某所で重複予約パッチが発表された。
リンクは、「epgrec 重複」でググれ。いまなら期間を1週間にすれば先頭に出てくる。

軽くソースを見てみたが異種チューナーの混在さえしなければ問題ないようだ。
ただし録画中の番組との隣接重複を解消するときに後続番組の開始を遅らせる仕様になっているので注意して欲しい。

ちなみに動作確認はしてないので自己責任でお試しあれ

2011年2月16日水曜日

EPG更新の所要時間短縮 その3

録画直前のEPG更新の方が一段落したのでなげ(ry保留していたgetepgの改修を再開した。
前回、問題となったDB更新時の負荷を軽減させるためxml化以降の処理を並列処理するのをやめ再直列化させた。これにより負荷率は、75%ぐらいに落ちついた。また地デジ8チャンネル分のEPG更新所要時間は、9分から3分半に短縮された。条件についてはその2を参照して欲しい。
しばらく使用して問題なければこのまま採用しよう。

明日は、国会中継があるようなので録画直前のEPG更新のデバッグが出来そうだ。

2011年2月8日火曜日

録画直前のEPG更新(時間追従処理)その2

今日の国会中継が中止かつ延長の可能性ありのフラグが立っていたため国会中継と後続の番組をいくつか予約してみた。
国会中継は、午後の部が3分延長したが直後の番組の録画開始時間が更新されていなかった。
他の番組は変化なし 直後がニュース気象情報だったのでここで変動を吸収されてしまった。
といった感じで追従そのものは失敗に終わったが前回残し忘れていた生TSが取れたしepgdumpとepgrecの改修点がいくつか見つかったので善しとする。

あとARIBにて「地上デジタルテレビジョン放送運用規定」を見つけた。おかげで追従処理そのものを見直さなければならない事がわかった。
「少なくとも放送30秒前にEPGを更新」は、まだ何とかなる。
でも「事前にEPGを更新せずいきなり放送」は、録画コマンド(recpt1など)でEIDの変動を監視してないと対処できんな・・・
そもそも運用規定といいながら緩すぎるだろこれ・・・ 放送局の裁量に任す部分が多すぎる。

明日も国会中継があるようだが改修箇所が多いので間に合わないだろう。
木曜にも国会中継があればそれまでには何とかなるかな?

2011年2月4日金曜日

録画直前のEPG更新(時間追従処理)

知っている方もいると思うがデジタル放送波のEPGは、7日分一括の「スケジュール」と今放送している番組とその次の番組の2番組分の「現在/次」 の2種類ある。
スポーツ延長についてのメモで行った調査により 「スケジュール」が時間追従してない事が分かったため録画直前の単チャンネルEPG更新を地上波については、epgdumpを改造して「現在/次」 情報を出力させそれで行うよう変更した。衛星波についても「現在/次」 情報付加が必須なので対応できると思う。
この変更により受信時間が1分から2秒(2秒周期なので4秒)に短縮されるという別の恩恵にも与れる。
ただし「現在/次」情報の更新が実際の運用でどのタイミングでされるか不明なため、いつ訪れるか分からないテストの機会まで結果が出せないでいる。
仕様書を見る限りリアルタイムで更新されいるようなので大丈夫だと思うが・・・

あと予定していた予約個別(予約カスタマイズ・自動キーワード)での隣接禁止指定と自動キーワード予約に開始終了時刻シフトの追加を完了した。
なお自動キーワードのパラメーター変更UIは、面倒なのでphpMyAdminで済ますことにした。

2011年1月29日土曜日

細々とした改造と予定

番組表と予約一覧にて予約表示をチューナー毎に色分けするように改修した。
ただし番組表からの予約時に既存予約のチューナーが動的に再振り分けされるのを表示に反映していない。当面は、ブラウザーのリロードでしのぐつもりだがコードで対応しないとダメかな・・・

放送波のEPGは、1番組にジャンルが複数指定されている場合があるので頭から3つまで取り込めるようにepgdumpとepgrecを改修した。
また予約一覧と番組検索で表示番組の日時の番組表へジャンプできるようにした。

今後の予定としては、予約個別での隣接禁止指定や自動キーワード予約に開始終了時刻のシフト追加を考えている。

2011年1月26日水曜日

スポーツ延長についてのメモ

昨日のサッカーが延長したので4分毎に1分間録画の予約を入れてモニターしてみた。

・放送波のEPG更新が試合終了後1時間ぐらいされなかった
・放送中番組と次番組の情報を参照しないとダメなようだ
・上記の理由からrecpt1などの録画コマンドかepgdumpの改造が必要

2011年1月22日土曜日

epgdump ジャンル出力不具合パッチ

epgdumpが出力したxmlファイルを眺めていると「その他」ジャンルのサブジャンルに未定義な値が出力されていた。
そこで epgdumpのソースを見てみるとサブジャンル対応でいじったときに「大丈夫かいな」と思っていたところがやはりバグだった。
epgrecのサブジャンル対応時に特定のジャンルがDBに登録されていないのを不審に思っていたんだよな

パッチは以下に


--- ./org/eit.c 2009-11-18 12:23:01.000000000 +0900
+++ eit.c 2011-01-22 15:45:11.388454332 +0900
@@ -531,7 +531,7 @@
       if((eith.original_network_id == original_network_id) && (eith.transport_stream_id == transport_stream_id)){
        cur = searcheit(eittop, eith.service_id, eitb.event_id);
        if(cur != NULL){
-        cur->content_type = (unsigned char)(contentDesc.content[0] >> 4);
+        cur->content_type = *((unsigned char *)contentDesc.content) >> 4;
 #if 0
         fprintf(stdout, "%s:", cur->title);
         fprintf(stdout, ",%02x%02x", (unsigned char)contentDesc.content[0], (unsigned char)contentDesc.content[1]);

2011年1月21日金曜日

EPG更新の所要時間短縮 その2

地上波しか受信していないため地上波3チューナー(PT2+FSUSB2)でデバッグを行った。
使用CPUは、atom D525 録画鯖としてはごく平均的な底辺CPU
3受信だけなら何ら問題は無いのだがそれに加えてDB更新を3スレッド並列させるとCPU負荷が80~90%とかなり高くなった。衛星波を入れてPT2の4チューナーでやったら受信がヤバそう。
底辺CPUで運用するにはDB更新の並行数を絞らないと支障をきたす場合がありそうだ。
…といった感じで改善点が見つかったのだが面倒臭くなったのでなげ(ryしばらく保留w

他にこの1週間で録画直前の単チャンネルEPG更新とサブジャンル対応を実装した。
あとは自動キーワードの優先度追加だが上が絡むのでこれも保留 個人的に必要になる可能性がかなり低いのもある。
予約漏れは、どうするって? チューナーを足せばいいさw 少なくともUSBが空いてるでしょ

2011年1月15日土曜日

EPG更新の所要時間短縮

EPG更新の所要時間のほとんどは、EPG受信時間がしめている。
短縮するには、いかに総EPG受信時間を減らすかにかかっているわけだ。
PT2の様に地上波・衛星波と2種類のチューナーがあるならそれらを平行して受信すれば半分に、またそれぞれが多チューナーなら全チューナーを総動員すれば更に短縮できる。
例にあげたPT2なら20分を5分ぐらいに短縮できるだろう。

現行のepgrecは、地上波と衛星波を合せて1チューナーしか受信に使用していない。
処理を並列化しているのはDB更新だけだ。
低スペックPCを考慮してなんだろうなぁ デーモンのプライオリティー下げてるぐらいだし
でも受信に関しては低スペックPCでも同時4受信とか平気でこなせるので何とかなんじゃねぇ?
と思ったので取り敢えずコードを書いてみた。まだデバッグはしてない。
いや正確に言うと録画直前の単チャンネルEPG更新のコードを書いた勢いとそれに含まれるチューナーの排他処理が絡むのでが正解だ。
このコードには事前に分かっている不具合がある。テンポラリーを大量消費するのだ。
1分あたり130Mバイトとして、PT2なら地デジ2本にBSとCSはそれぞれ2分で最大780Mバイトを必要とする。
HDDをテンポラリーにしてるなら問題無いがSSDなら寿命を縮める事になるしRAMディスクでは容量不足に成る環境があるだろう。
この問題については、録画コマンドがEPGデータだけを吐き出してくれれば解決してくれるのだが難しいかな・・・

これが片付いたら次は、自動キーワードの優先度追加かサブジャンル対応(epgdumpは改修済み)に手をつけよう。

2011年1月9日日曜日

epgrec EPG更新(時間追従)不具合パッチ(場当たり版)

(11.02.15  タイトルを「epgrec番組追跡(時間追従)不具合パッチ(場当たり版)」 から現行に変更)
 
まあ役に立たない事ばかりを書いているだけなのも何なので当たり障りのない部分のパッチを上げておこう。
このパッチでは、 枠移動かタイトルの更新なのか判定できないが実用上問題ない。
完全対策をするには、$program_discのMD5算出時にEIDを加えればいい。この場合、今回のパッチを適用する必要はないがepgdumpの改修とEPGのDBをdropする必要がある。

パッチ当ては、手動でヨロ

storeProgram.inc.php ----------------------------------------------------------------------------

            else {
                // 番組内容更新
                $rec = new DBRecord( PROGRAM_TBL, "program_disc", $program_disc );
                //枠移動チェック
                if( $rec->title != $title ){
                    try {
                        $reserve = new DBRecord( RESERVE_TBL, "program_id", $rec->id );
                        //自動キーワード予約判定
                        if( $reserve->autorec &&  toTimestamp($reserve->starttime)-PADDING_TIME > time() )
                            Reservation::cancel( $reserve->id );
                        else
                        if( $reserve->dirty == 0 && toTimestamp($reserve->starttime)-$settings->former_time > time() ){
                            // dirtyが立っておらず現在より後の録画予約であるなら
                            $reserve->title = $title;
                            $reserve->description = $desc;
                            reclog( "getepg:: 予約ID".$reserve->id."のEPG情報が更新された" );
                        }
                    }
                    catch( Exception $e ) {
                        // 無視する
                    }
                    $rec->title = $title;
                }
                $rec->description = $desc;
                $rec->category_id = $cat_rec->id;
            }
        }
        catch(Exception $e) {
            reclog( "getepg:: プログラムテーブルに問題が生じた模様", EPGREC_ERROR );
            reclog( "getepg:: ".$e->getMessage()."" , EPGREC_ERROR);
            exit( $e->getMessage() );
        }
    }
    // Programme取得完了
}
?>

2011年1月8日土曜日

epgrecの改造のあれこれ

EIDに関しては、epgdumpの改修は一行加えるだけなので速攻で完了した。
epgrec側は、DB改変も考慮に入れないといけないため放置を含めて思案中
どうせやるならEPGだけでなく予約にも反映して録画延伸にも対応させたい所だがrecpt1などの録画コマンドにまで手を出すことに・・・本家でも懸案止まりの案件に手を出すのはメンド

自動録画キーワードに優先度付加は、優先度処理のロジック面は楽勝なのだがEPG更新並列処理デーモンから自動録画キーワード処理を外す必要がある。いや外さなくても何とかなると思うが予約とキャンセルを繰り返すだろう。
あとEPG更新の並列処理だがEPG受信も並列化しないと恩恵が少ないような・・・
この辺も改修に含めるとデーモンの終了待ちとチューナー管理が必要になるため二の足を踏んでいる。
この件については、単純に優先度処理を入れれば良いだけで考え過ぎなのかもしれない。

他にも録画直前のEPG更新や番組表の予約をチューナー毎に色を変えたいとかサブジャンルを入れたいとかやりたい事は、いくつかあるが実装方法を想定中だったり知識不足やらで進んでいない。能力不足は棚にあげておく。

2011年1月4日火曜日

epgrecの不具合

かれこれ4ヶ月ほど使用しているのだがいくつか不具合が見受けられる。

まずひとつは、公認不具合の重複予約
現行ではSQLで判断しているがPHPでロジックを組まなければ解決は、不可能だろう。
なお重複チェックだけなら他で言われているようなDBの追加は必要ない。
重複による予約漏れ番組を制御したい場合には自動録画キーワードに優先度を付加すればよいが苦労したくなければEPG更新の並列処理も改修する必要があるだろう。

次に番組編成変更にともなう番組追跡
既存予約にピッタリ重なる形で別番組が移動してくると既存予約がキャンセルされずに残り、目的の番組の移動先が追加で予約される。
この不具合は、問題箇所にタイトル名での番組移動判定を追加すれば現行のコードに少し手を加えるだけで何とかなるが番組表DBと予約の更新処理をイベントID(EID)で判定するように改修すれば確実かつスッキリするだろう。
その場合は、EIDを取得する為にepgdumpの改修も必要になる。

最後に異種チューナーの混在
公式には対応を謳っているがepgrecは、内部で厳密なチューナー管理をしていない。
現行ではEPG更新で不具合が発生するが録画そのものに影響が有るかは検証していない。
だが先に挙げた重複予約チェックを改修すると録画でも顕在化するだろう。

現行のままでも録画に不具合が発生する事を確認した。
この問題点を改修するにはロジックでの対応だけでなくDBの拡張が必要になる。

これらの不具合については、自動録画キーワードの優先度追加とEPGのEID対応を除いて改修したがPHP素人なC使いなので(Javascriptもド素人w) 番組表の表示系で不具合が発生している。
ここに挙げた以外の改修も行っているが環境依存や仕様変更している部分も多いため今のところパッチ公開は差し控えている。 中の人の動向も気になるし・・・
さてどうしようかな・・・

ちなみに当方の環境は
ubuntu 10.04 32bit
epgrec 3/22版
PT2 * 1 KVT-FSUSB2 * 1

PT2は録画優先 FSUSB2はEPG優先にしてある。