錯誤試行

PCや生活の試行錯誤の成果を報告するブログ

epgrecが動作しない件(解決)

epgrecが動作しない件1/番組表が表示されない(解決)

  • 使用環境
    • Ubuntu 11.10
    • LAMPP(Linux 1.7.3a)
    • epgrec(090814)
    • recpt1(pt1-c44e16dbb0e2)
    • pt1-7662d0ecd74b、pt1-b14397800eae(2013年2月現在最新版)は./configureでパスを通しているはずのlibarib25が見つからないと言われ使用できず。
    • epgdumpr2_20111001

  • 状況

インストールstep5を済ませても番組表が全く出ず、番組名が「no epg」のままとなっている。
直接./getepg.phpを実行してもsegmentation faultとなる。

  • 原因
    • DocumentRootがwindows環境時に設置していたWebサーバのProgram Files以下にあり、パスに半角スペースを含んでいたため。
    • getepg.phpの冒頭のシェバング(#!/usr/bin/php)がphpパッケージをインストールしたときのパスとなっているが、lamppでの運用のためここにphpの実行ファイルが存在しないため
  • 検証(php5-cliパッケージを使用した場合)

lamppのphpではなく、php5-cliパッケージをインストールして動作確認したところ、後にEPG番組表が取得できなくなった。tsファイルをgetdumpしたところxmlは正常に生成されている。
/usr/bin/phpをlamppのphpからのシンボリックリンクに直したところ取得できるようになった。

  • 動作確認用のメモ書き
    • epgrec-090814.tar.gz(2009年8月14日版)
      • 番組表が取得できないとき
      • ./getepg.phpをしても、すぐ端末に入力が返って来てしまい、カードリーダのランプは点灯したままで、/tmpには何も生成されない。
      • 正常動作時
      • ./getepg.phpを実行するとしばらく入力は返って来ない。カードリーダのランプは点滅し/tmpにはepg用の一時ファイルが生成されている。
    • epgrec_20111001.tar.gz(記事作成時の最新版)
      • 正常動作時
      • すぐに端末に入力が返る。カードリーダのランプは点滅し、/tmp/__temp.ts.grxx が生成されている。
付記:recpt1のcpu使用率は5%程度(4コアでは1.25%程度)

epgrecが動作しない件2/録画予約ができない(解決)

  • 状況

予約ボタンを押しても"Error:get:無効なid"とのダイアログが出て予約が実行されない
システムログには"Reservation::custom job番号の取得に失敗"と出ている。

  • 原因

apacheがnobodyユーザ権限で動いていたため
lamppの/opt/lampp/etc/httpd.confのUserを参照したところ,User nobody Group nogroupとなっていた。
nobodyは/etc/at.denyに含まれているユーザーである。

  • 対応

/opt/lampp/etc/httpd.confのUser/Group設定を以下のように変更し、/etc/at.denyからwww-dataを削除した。

 User www-data
 Group www-data

epgrecが動作しない件3/予約録画が実行されない(解決)

  • 状況

録画予約をして待つが一向に録画が開始されない。

  • 原因

参照先リンク1のページによるとmsg_get_queue()というSystemVのメッセージキューを得る関数がPHPコンパイル時に使用可能になっていなかった(configureオプションに--enable-sysvmsgが指定されていなかった)こと…らしい。

  • 対応

PHPをソースからコンパイルするのもオプション設定が大変そうなので*1、msg_get_queue()関数を使用していない、epgrecの旧版を利用する。
リンク先で紹介されているepgrec-090814.tar.gz(2009年8月14日版)を使用したところ問題無く動作した。
また、一応www-dataユーザをvideoグループに追加している。追加していない状態での動作は確認していない。

(所要時間:全て合わせて19時間)

epgrecが動作しない件4/ブラウザ上での再生ができない(解決)

asxファイルによるブラウザからのストリーミング再生ができない。
録画済一覧から番組を選択しても真っ黒な画面のまま再生されない。
ブラウザのプラグイン画面を表示すると「Windows Media Player Plug-in 10 (compatible; Totem)」(=libtotem-gmp-plugin.so)は入っており有効になっている。
画面をクリックするとファイルが見つからない旨のエラーメッセージが出る。再生画面下のコントロールバーの▲印のメニューから「(他のプレイヤー名)で開く」を選択すると、そのプレイヤーが開いて問題なく再生される。
ターミナルからtotemを起動してブラウザのURLを貼り付けると、「Cannot resolve proxy hostname」のエラーを出力している。totemが原因と推察された。

  • 原因
    • ubuntu-restricted-extrasパッケージが入っていない。
    • プロキシを設定している
  • 対応
    • ubuntu-restricted-extrasパッケージをインストールする。Microsoftのフォントも同時にインストールされるためEULAへの同意が必要となる。
 $ sudo apt-get install ubuntu-restricted-extras
    • プロキシを解除する

システムの設定→ネットワーク→ネットワークプロキシ→プロキシで「メソッド」を「自動」としている場合は「なし」に変更する。ブラウザでプロキシが必要であれば、ブラウザ側で個別に設定する。

雑多な不具合

  • bcas->init failedが出て視聴できない
  • bcas->init failed
    Cannot start b25 decoder
    

    検索するとカードリーダのドライバを古いものにせよという旨の記事が出てくる(インストール時に実行済み)。カードリーダの各ドライバはhold済み。
    カードリーダのLEDは点灯しているものの、pscs_scanを行なってもカードリーダが表示されない。カードを挿し直しても改善しない。仮想環境上のWindowsではカードリーダを認識している。
    2回OSを再起動したところ復旧。pscs_scanでのカードリーダの表示も正常に戻った。

  • write: Broken pipeが出て視聴できない
  • write: Broken pipe
    SIGPIPE received. cleaning up...
    

    動画プレイヤーで一度視聴した後にrecpt1の出力を渡した動画プレイヤーのプロセスが終了していないため。
    ps aux | grep hogeplayerでプロセスが残っていれば終了させる。

  • 接触不良?でCannot tune to the specified channelと言われた

  • /dev/pt3video*は表示されてカードは認識されているが、Cannot tune to the specified channelが出て全く放送を受信できない。配線を確認しても問題なく、sudo modprobe -r pt3_drv && sudo modprobe pt3_drvしてもエラーは出ない。
    ただ、checksignalやrecpt1を実行すると2回に1回くらい処理が戻って来ず、プロセスをkillすることもできない。
    PCを内部清掃しPT3を挿し直したところ改善した。接触不良が原因かは不明だが、メモとして残す。

その他

  • ケーブルテレビ(CATV)での地デジ視聴について
    ケーブルテレビ(CATV)では周波数変換パススルーという方式で地デジを放送している。ケーブルテレビ経由で衛星放送やCSを視聴する場合は有料契約と専用の機器が必要だが、地デジだけはそのまま壁の端子につなげば無料で視聴できることが一般的であるらしい。
    ケーブルテレビで地デジを視聴するには周波数変換パススルーに対応した機器であることが必要だが、PT3もrecpt1コマンド(バージョン1.2.0で確認)も周波数変換パススルーに対応している。
    どのチャンネルで放送しているかはケーブルテレビによりまちまちなので、以下のようにしてチャンネルを総なめする(Linux/PT2 - side=2 wikiより改変)。

    for var in `seq -f "C%02g" 13 62` ; do recpt1 --b25 --strip $var 10 ~/$var.ts;done
    

    epgrec UNAの場合、チャンネルマップは以下のように指定する。チャンネル指定は地デジでも「C13」のように指定する。左の「GR」はGRのままでよい。

    $GR_CHANNEL_MAP = array(
            "GR13" => "C13",
            "GR21" => "C21",
    	…
    );
    


参照リンク

1.--CentOS5.4録画サーバ機にEPG対応録画フロントエンド(epgrec)を入れる: tadachi-net 出張所
epgrec-090814.tar.gz(2009年8月14日版)を使用したインストールの手引き
"--enable-sysvmsg"で有効となるものの内容についてはセマフォ・共有メモリおよび IPC 関数(semaphore)を参照。
2.--Ubuntu Music Hour KTV-FSPCIE + EPGrecで予約録画1/2【LAMP環境の構築,他、前準備】
インストールの手引き

上記サイトの録画できない場合のトラブルシューティングリスト

      • do-record.shが使えるか?
      • チューナデバイス使用ユーザーとしてwww-dataをvideoグループに追加を忘れてないか
      • sudo atqでジョブが登録されているか
      • LAMP環境の構築でミスが無いか
      • パーミッションは大丈夫か

トラブルシューティングへのリンク
3.PT3の設定(ubuntu12.04) - わすれないうちにメモしよう
インストールの手引き。
recpt1でライブラリがロードできないというエラーが出る場合の対処法、録画エラー時の原因特定のためのrecpt1実行時ログの出力設定、録画できるのに「重複予約があるため録画ができない」と表示される場合への対処など。
4.--○○的な気まぐれ日記 » PT3でepgrec UNA
php5パッケージはLAMPとは別に入れた方が良いらしい?
apacheの実行ユーザをvideoグループへ追加する
epgrecにはUNAという派生版があるようだ

5.--PT3、UbuntuLinux12.04、epgrecで録画サーバを作る。 - Linux 開発日誌
スマートカードリーダのバグ回避・バージョン固定の方法。
記述されているjaistmaverickレポジトリには既に該当するライブラリが無いため、debパッケージを個別に入手しなくてはならない。
6.--transitive.info - Ubuntu 12.04 で PT3 と epgrec で録画する
インストール方法・復号に失敗した録画を視聴する方法・シャットダウンから自動復帰して録画する設定
録画予約が消えないときは以下のようなSQL文で削除できるとのこと。

delete from Recorder_reserveTbl where id=9999;

7.epgrec 削除できない予約録画の削除方法 - わすれないうちにメモしよう
3.のインストールの手引きと同じブログより、録画が実行されなかった際にブラウザから消せなくなった録画予約を削除する方法のエントリ。
以下のSQL文で現在時刻よりも前で録画完了フラグが立っていない予約IDと録画タイトルを抽出する。

select id, title from Recorder_reserveTbl where complete = 0 and endtime < now();

抽出したidを指定して録画完了フラグであるcompleteに1をセットする

update Recorder_reserveTbl set complete = 1 where id = 対象のid;

8.要望/コメント/いろいろ - 録画予約システムepgrec
公式サイトの掲示板。録画予約が消えないときの対応方法について等ケーススタディが色々あり
9.Hello,World atコマンド
atコマンドの出力はメールで返るためatでecho hogeなどとしても何も表示されず、端末に表示させるには、atコマンドの標準出力を端末に指定して出力する必要があるとのこと。ただしログインユーザ以外の、ウェブサーバユーザなどではこのように標準出力を指定してもechoの出力は得られなかった。ただし、シェルスクリプトは問題なく動作した。
10.Totem - GNOME Project Listing
Gnomeデスクトップの標準メディアプレイヤーであるTotemの公式サイト

*1:lampp 1.7.3aのPHP Version 5.3.1のphpinfoで表示されるconfigure commandをクォートを除いてコピペしてもapx関係のエラーが出る