横を無理やり伸ばしたので、デザインがおかしいけど、気にしない。完璧に時代に取り残されたHTMLをいまさらいじるのがめんどくさい。個人的ブックマーク代わりなメモ書きブログ。BonDriver_HTTP.dll)からリアルタイム視聴を使っている訳ですが、リアルタイムで見ているときに予約録画が始まりチューナーが足りないと予約録画が失敗するので、EPGrec側を改造してみたメモ。動作の概要としては、予約録画が始まるときにdo-record.shが走るので、そこでチューナー数が足りないようならhttp版のdaemonをkillする。予約録画が終わってチューナーに余裕がありそうならhttp版daemonを復活。リアルタイム視聴しているときにたまにhttp版がよく分からない待ち状態に入り視聴できなくなるので、手動でブラウザから再起動できるようにもする。(新規導入ならfirewallでudp,tcp8888開放とか)/var/www/epgrec/do-record.shとりあえず自分の環境のをまんま載せておきます。関係するのは赤部分のみ。then/usr/local/bin/reload_recpt1.shfifiまぁ、難しいことしてないんで動作の詳細説明は省略。(ぉぃ最後の復活する際に、http版が走っていない時のみ復活の動作をさせているのは、リアルタイム視聴をしているときに不用意にrecpt1http版が再起動するのを避けるため。pressedif(isset($_POST['submit'])){#reload_recpt1exec("/usr/local/bin/reload_recpt1.sh");#HTMLecho('<title>recpt1リロード終了</title></head><body><br><br><br>recpt1をリロードしました。<br>20秒後にHomeに戻ります。color="#0000FF"><b>チャンネルを切り替える</b>か、<b>TVTestを再起動</b></font>してください。color="#FF0000">2番組以上の録画をしている</font></b>可能性があります。<br>その場合録画が優先されます。');}else{echo('<title>不正に呼び出された</title></head><body>不正に呼び出されました。<br>20秒後にHomeに戻ります。');}php?></body></html>phpの設定やパーミッションなどは良しなに・・・/usr/local/bin/reload_recpt1.shdo-record.shとreload_recpt1.phpが呼び出す、recpt1http版を再起動するスクリプト分けたのは単に構築に至る紆余曲折によりこうなっただけで、それ以上の意味はないです。&recpt1http版は走っているが、よく分からない待ち状態になっていることがあるので、単に再度走らせるだけでなく確実にkillしてから起動している。/var/www/epgrec/getepg.phpcronでgetepg.phpが走る(EPG取得)とこれもチューナーも使うしdo-record.shも使う。1番組(以上)の録画中にリアルタイム視聴をしてるとEPG取得が行われるときにリアルタイム視聴が止まることになる。デフォルトでEPGは2時間おきに取得になっているので、リアルタイムで見てるときにEPG更新されなくても、ま~いいやろ、と言うことで予約録画中はEPG取得をスルーするようにした。他にも多少いじっているけれど、どうもEPGrecのバージョンでスクリプトが結構違うようでどれが最新か、自分の使っているのが最新かよく分からないので全文を載せておきます。やっていることは単純なので、環境に合わせて改造してください。GPLだかGNUだかライセンスで問題があれば連絡ください。exit();?>現在or今から15分以内に予約録画がある場合はEPG更新をスルーそれぞれを改造or作成し、それぞれの場所に置いてください。怒られながら入れてみる』あたりを参照また、killでsudo使うので、visudoでapacheに権限をあげてください。→visudo参照do-record.shでkillしてすぐに録画用にrecpt1が走ってるけど今のところチューナーの切り替え等で問題は出てないです。録画の開始が遅れることも特にないです。EPGrecUNAに移ったほうがいいのかもしれないけれど、これで更に不具合も一個減ったしこのままでもいっかな~自己責任でどうぞ。(EPGrecUNA)2013年01月27日(Sun)自動予約の連続予約をテストしている際に、なぜかうまく連続予約されないので調べたら秒単位のEPG情報があっていすから転げ落ちた。sec)思い込みはよくない!!ということですが、おかげでプログラムを疑って2時間も無駄に失った。(EPGrecUNA)2013年01月26日(Sat)EPGrecの番組検索で放送局の絞込みプルダウンにスキップしてある放送局やら、録画しないに設定しているCSやらがダラダラ現れて邪魔なので、ちょこっといじってみた。頻繁には使わないから今までスルーしてたんだけど。句とかはnameにするなりお好きにどうぞ。自分はこれが一番しっくりきたので。ちなみに、データベースの構成はこうなってました。(EPGrecUNA)2013年01月26日(Sat)意味の分からんタイトルですが。EPGrecで放送中の番組を予約すると、約3分後から録画が始まる。いうのは多分EPGrecを使い始めるとすぐにそういう仕様なんだと理解すると思う。それをキャンセルしたときのお話。条件When:放送開始時間後にWhat:その放送の録画予約をし、そこから10秒以内にその録画をキャンセルすると現象1:予約は削除される2:が、3分後に録画が開始されて、しかも予約一覧にも録画一覧にも表示されない3:HDDには録画されたものが出来上がるなぜこんなことになるか?EPGrecは録画予約の実行にatを使っている。(Reservation.class.phpの279行あたりでatによる予約をしている。)が、atは秒単位の指定は出来ない。(ので、実際の録画開始はrecorder.phpの200行あたりでwhileとusleepを使って秒単位のpendingを掛けている。録画開始時間を3分10秒先に設定する今の時間から3分(PADDING_TIME)+10秒後に録画が始まるようにしてある。PADDING_TIME;atの開始時間を、録画開始の3分前(PADDING_TIME)になるようになっている。atが秒を理解すれば、これでも予約をしてすぐにatは走らない(10秒間は)が、atは秒を理解しないので、大概の場合放送中の番組を予約すると即座にatが走る。01:10:23に既に始まってる放送を録画予約する。録画開始時間を01:13:33とし、atの開始時間を01:13:23としてatに登録する。録画開始後ならrecorder.phpの動作を止め予約をキャンセルしようとする。録画開始以前ならrecorder.phpは動いていない“はず”なので、単にatを削除し、MySQLのRecorde_reserveTblの予約を削除して終わっている。(ここには10秒が加算されていない)(※$rec->starttimeはMySQLの予約テーブル上の開始時間で$settings->former_timeが考慮されている。$start_timeは番組表テーブル上の開始時間で$settings->former_timeは含まれていない。本題とは無関係)で、atが秒を理解していれば、放送中の番組を予約録画し、10秒以内にキャンセルしてもこれでいいのだけれど、atは秒を理解しないので、これをやると、Reservation.class.phpのcancel関数ではまだ録画が始まっていないと判定されるのに、すでにatは走っていて、recorder.phpも走っている。正常に予約録画はキャンセルされたように見えるのに、3分後には録画が始まってしまう。atが走ったあとにatが削除され(atが削除されてもrecorder.phpは止まらない)、MySQLのRecorde_reserveTblの予約情報も消えているので、予約一覧からも、録画済一覧からも見れない。対策?10秒はおそらく予約の処理のための余裕時間なのだろう。これをなくせばいいという問題でもないし、他に10秒足せばいいという問題でもない。(通常の予約の時誤判定を起こす)なので、これは根本対策をするのがベストで、Reservation.class.phpで、放送開始後と判定されたら、以降は通常の予約と同じ手段をとらずに即座にdo-record.shをたたいて、MySQLには別個に録画予約を登録するのがいいと思う。すれば、3分の待ち時間もなくなるし、この問題もなくなる。当然後に控えてる予約とバッティングしないかをチェックしなきゃいけないのは現状と同じで、その処理はサブルーチン化されてないから書き起こす(コピペる)必要がある。次の予約までのDurationで撮るとかも当然可能だけど、どの道ちょっとしたtipsレベルではなくちょっとした改造になる。PTxで一番使用者が多いと思うし、公開から数年たってるのでそこそこ枯れてるかと思ったのに、結構穴ぼこが多いなぁ;;自動録画予約でも録画開始時間と放送時間変更とEPG更新のタイミングしだいでは録画失敗が起こりうるコードになってる。storeProgram.inc.phpの160行目とgetepg.phpの134行目のdoKeywordReservation();のタイミング参照この間に放送開始だと録画されない。?放送開始時間が頻繁に変更されるんhkで35分あたりから開始する番組で起こりうるのではないだろうか・・・まだこの事象にはあってないけど。ソースを見だしたら色々といじってしまった。メンテナンスが苦労するなぁ。(EPGrecUNA)2013年01月20日(Sun)昨日、epgdumpのsegfault対策をしたのですが、その影響なのかはわかりませんが、EPGrecで開始時間よりも終了時間が遅い番組ができてしまうというおかしなことがおきたのでメモ今日は駅伝だかなんだかよく分かりませんけど、時間変更が頻繁に起きてた様で、んhkが間違った情報を流したのか、epgdumpがバグってこんなことになったのか分かりませんが、とりあえず、EPGrecのstoreProgram.inc.phpの135行目あたりを以下のようにstarttime>endtimeの場合例外を投げるようにしました。