2013/02/02 2013/08/15
予約された番組は録画されているのですが、動作ログを見てみると、
予約ID:152 GR24_1064:T0-Ch24 2013-02-02 15:17:00『TEST RECORDING』の録画が中断されました。ソフトウェアもしくは記憶ストレージ・受信チューナーなどハードウェアに異常があります。
てな感じで正しく終っていない状態。ただ使い始めた当初はちゃんと終わってたはずだった気が…
調べてみたら原因が見えてきたので直してみました。
人柱版 2012/12/07についてですが、人柱版 2013/03/02版も同様です。
※ワタシは変更禁止とされているPADDING_TIMEをデフォルト180秒から25秒に変えたイレギュラーな運用を行なっており、これも起因はしています。ある程度挙動は見ていますが、参考にされる方は自己責任で対応願います。
(急な録画指示がある御方からあった場合に3分も待ってられないんです…)
まずは直し方。
Reservation.class.phpの710行目辺りを以下のように修正します。
}else{ if( $now_time < $end_time ){ $rec_start = $start_time - $settings->former_time; $padding_tm = $start_time%60 ? PADDING_TIME+$start_time%60 : PADDING_TIME; $at_start = ( $start_time-$padding_tm <= $now_time ) ? $now_time : $start_time - $padding_tm; // $sleep_time = $rec_start - $at_start; $sleep_time = $at_start%60; }else throw new Exception( '終わっている番組です' ); } //$duration = $end_time - $rec_start; $duration = $end_time - $rec_start + PADDING_TIME;
$sleep_time、$durationの計算に問題があるようです。
$at_startはatコマンドに渡す開始時刻で、開始時刻 – 録画開始の猶予時間 – PADDING_TIMEとなります。
『録画開始の猶予時間』は動作設定から設定する内容、『PADDING_TIME』はconfig.phpに設定されている内容です。
元々の開始時刻が14:00:00、猶予時間が10秒、PADDING_TIME が25秒とした場合,
14:00:00 – 00:00:10 – 00:00:25 = 13:59:25となりますが、atコマンドは秒まで受け付けず切り捨てる為、
実際の開始時刻は13:59となります。
本来は$sleep_timeで切り捨てられた25秒sleepした上で実際の録画処理に入る(開始時刻-猶予時間)のですが、
元のロジックだと(14:00:00 – 00:00:10) – 13:59:25 = 13:59:50 – 13:59:25 = 35秒待つ為、本来よりも10秒遅く開始します。
$durationは録画秒数となりますが、元のロジックは終了時刻 – 開始時刻となっており、
終了時刻が14:10:10(録画時間を長めにする設定10秒含む)とした場合、
14:10:10 – (14:00:00 – 00:00:10) = 14:10:10 – 13:59:50 = 10分20秒録画する事になります。
$durationは実際の録画開始からの録画秒数の為、実際の録画は14:10:10開始で14:20:30終了となります。
…猶予時間10秒設定してあるにもかかわらず、先頭10秒ちょん切れてます…
ウチの環境は猶予時間、録画時間を長めにする設定共に0秒とした所、録画は実際より早く始まりますが、今度お尻がちょん切れます。
嫁に最後まで録れてないとクレーム貰ってたのですが、これが原因でした。
本来の終了時刻前に終わってしまうと異常検知され冒頭のログが出てたと。
とりあえずこれで録画時間の問題は解消されたようです。ふぅ。
コメントとトラックバック
コメントはありません