epgrecで録画失敗する

epgrecで録画失敗する

たまに、EPGを取得するときにrecfsusb2nが動いたままになって録画に失敗しているときがある。

どうやらrecfsusb2nは、放送されてない等、信号のないときに動くと終了しなくなるらしい。
あくまで引数で渡すのは”録画時間”なわけで、信号ないと録画されなくて録画時間もゼロで終了しなくなる。ってことかな。

ってことで、do-record.shを弄ってみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT  : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"
 
RECORDER=/usr/local/bin/recfsusb2n
 
if [ ${OUTPUT} = "/tmp/__temp.ts" ]; then
        $RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null &
        cmd_pid=$!
        sleep 65
        result=`ps -ef | grep $cmd_pid | grep -v grep`
        if [ "${result}" ]
        then
                kill $cmd_pid
                logger -t getepg recfsusb2n_err
        fi
else
        $RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null
fi

出力ファイル*1でgetepg.phpから呼び出されたか判別して、EPG取得だったらrecfsusb2nをバックグラウンドで動かして65秒後も動いていたら、プロセスを殺してシステムログに書き込むようにした。
普通の録画はそのまま。

たぶん、これで大丈夫なはず。

ソースを弄って対応してる人がいるみたいですね。
foltia :: labs.m2hq.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--- fsusb2n.cpp.orig    2011-04-06 23:50:48.000000000 +0900
+++ fsusb2n.cpp 2012-01-14 02:41:30.089938063 +0900
@@ -173,8 +173,13 @@
        sigaction(SIGINT,  &sa, NULL);
        sigaction(SIGTERM, &sa, NULL);
 
+       int timeout = 10;
        do {
                sleep(1);
+               if (--timeout <= 0) {
+                       log << "GetSequenceState timeout." << std::endl;
+                       exit(1);
+               }
        } while(pDev->DeMod_GetSequenceState() < 8 && !caughtSignal);
 
        // 録画時間の基準開始時間

脚注

  1. EPG取得の時、epgrecのシステム設定の「EPG取得用テンポラリファイルの設定」にある録画データのパスになる [戻る]

コメント/トラックバック (1件)

  1. 161 名前:recfsusb2nが終了していない 投稿日:2012/02/04 22:47:00

    [...] Dazzling World 2さん参照 Share [...]

コメントする

(管理人にのみ公開されます)

上へ参ります。