PT3録画サーバーの構築@CentOS6.4でハマった点についてのメモ

夏アニメなど直前に控え、録画サーバーの増強(PT3を1枚から2枚へ、メモリを16GBに、HDDを増設して合計9TB)、 再構築をおこなった時のメモを残す。PT3サーバー構築ではマイノリティであるらしいCentOS派の私は無駄に苦労したわけであるが、 ここはひとつ同志に向けて使えそうな情報をまとめておこうと、こういうわけである。 マイノリティといっても前例はそれなりにあるので、手順に関しては他サイトに任せようと思う。 また、関連ファイルをgithubまたは Gistで公開しているので、参考になれば幸いである。

ハード

PT3のFPGA更新について

私は最近購入したのでv4であったから問題ないが、賢明にも早めに買い置きしていた場合、FPGAの更新が必要な場合もある。 現在のところ公式ツールはwin版のみである。そして恐らくlinux版は出ないだろうから、win機が用意できればそちらで済ませるのが得策である。 ちなみに更新は出来ないものの、PT3のlinuxドライバで主流であるとされるgit/m-tsudo/pt3では、 ログレベルを最高にするとバージョン4以外では警告が出て、確認が取れるらしい。

カードリーダーを認識しない

今回は使い回しの大きいケースであったため、B-CAS用のUSBカードリーダーを中に納めてしまおうと 奥沢3丁目なるものを購入したのだが、これが見事にダメな子であった。 結線仕様だか相性だか知らないが、面倒なので部品箱に転がっていたミニ基盤とコネクタを使って同じようなものを自作してみたところ、問題なく動作した。 winクライアント機などで正常動作が確認できたら、USBポートを変えたり、再起動したりしてひたすらlsusbである。

ソフト

作業を始める前に、各サイトを巡回して必要になりそうなライブラリ等をあらかじめyumっておく。 ソースはバックアップも兼ねて一箇所に集めて用意しておく。手順をメモして1つずつ確実にやってく。 ログは別窓でtailで垂れ流し。これだけやれば作業が捗る捗る、問題が発生してもわかりやすい。pacoなどを使うと入れ替えなどで捗る。

Ubuntu系の記事でpcscdのバージョンを固定してるがCentOSではいいのか?

pcsc-perlとpcsc-toolsはCentOSのリポジトリにないのでfedoraのを入れる、というのは周知の事実である。 勝手にアップデートされることもない(はずである)ため固定する必要がないのだが、まぁCentOSの場合でも yum-versionlockですぐに固定できるし、 録画だけにしか使わないサーバーで自動更新させてる場合などにはやる意味があるかもしれない。

B-CASカードを読まない(Waiting for the first reader...で止まる)

いるかの様の記事を 参考にIDを登録。使っているのはNTT-MEのあれなので問題が出ないと思っていたらこれだから焦った。

pcscdが絶叫(ログを大量に吐く)

Dazzling World 2様の記事を参考に猿轡をはめる。

ソースがいろいろあってwgetシナプスがつながらない

基本的に使うのは以下
  • pt3 driver - https://github.com/m-tsudo/pt3.git
  • arib25 - http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
  • recpt1 - http://sourceforge.jp/projects/epgrec/downloads/53384/pt1-drv_20111001.tar.gz/
  • epgdump - https://github.com/ha1t/epgdumpr2.git
  • epgrec - http://sourceforge.jp/projects/epgrec/downloads/53387/epgrec_20111001.tar.gz/

epgrec/のパーミッション設定コマンド例

/var/docroot/epgrecに展開されていると仮定,一版管理ユーザーをlinux,httpd実行ユーザーをwww-serverとする chown -R linux:www-server /var/docroot/epgrec; chmod -R 775 /var/docroot/epgrec; chmod 777 /var/docroot/epgrec/cache; chmod 777 /var/docroot/epgrec/templates_c; chmod 777 /var/docroot/epgrec/templates; chmod 777 /var/docroot/epgrec/video; chmod 777 /var/docroot/epgrec/thumbs; chmod -R 777 /var/docroot/epgrec/settings

recpt1でBS/CSが受信されない

接続および地デジの受信に問題がなければ、オプションでlnb電源供給を指定してみる。 lnb電源について /path/to/recpt1 --b25 --strip --lnb 15 ${channel} ${dur} ${output} > /dev/null ☆この問題が発生する環境なら、do-record.shにも設定すべき。

録画モードの追加がうまく行かない

do-record.shに無理につめ込まず、エンコード用のスクリプトを書いたりすると原因の切り分けが楽。 ffmpegで画質が極端に悪くなったり欠損したりするのは、ストリームの自動選択が悪さをしているのかもしれない。 -mapで直接指定したり、tsinfoを使ってprogramIDをオプションに入れたり、ともかく適切なソースをエンコードするように。 また、ffmpegが最新版の場合、仕様変更等で従来のセッティングが再現されないこともあるので、 旧バージョンを拾って使うのもひとつの手である(公式サイトに過去バージョンのソースがある)。

epgrecのinstall-step2で「出、出ーwテーブル作成拒否奴wwwwww」と言われて進めない

~/epgrec/settings/config.xmlのパーミッション確認、httpd実行ユーザで読み書き可能か その他、epgrec以下の各ファイルのパーミッション(step1でチェックされてない部分含め)確認して、 問題がなければデータベース作成、権限設定をもう一回最初からやり直す。

index.phpが真っ白

httpd.confの設定を確認し、アクセス許可/拒否設定を見直す。 php.ini->display_errors=onにして再度アクセス or httpdのエラーログを確認、 恐らくDB関連で弾かれて動作停止なので、そこらへんを中心にチェック。

epgrecで「録画予約したったったwww」とか言ってる割にatqが空でワロタ

httpd実行ユーザーがatコマンドを使えていない模様。参考になるページをリンクしておく。

番組表が取得できない(ログに"正常な~/__temp.xml_***が作成されなかった模様"とか出る)

recpt1,epgdumpの実行権限およびtempディレクトリの書き込み権限(httpd実行ユーザーの)を確認する。 tempは容量の問題がなければ~/epgrec以下に作ると管理が楽かもしれない。

epgrecでBS番組表に地デジ/CSが混じる

公式FAQに詳述されているので、そちらを参考に設定を見直す。それでもダメな場合、数回番組表を取得することで改善されるかもしれない。

epgrecでBS/CS番組表が受信できない

まずは受信しているか確認、例としてBSでの作業を記す。適当にスクリプトを書いて各番組を試してもよし。 recpt1 --b25 --strip --lnb 15 211 30 catch.ts epgdumpでxmlが抜けてるかを確認 epgdump /BS catch.ts program.xml 出力されたprogram.xmlを覗き、冒頭にあるchannel->idとその中のdisplay-nameの対応を確認 <tv generator-info-name="tsEPG2xml" generator-info-url="http://rc/">
<channel id="3901.ontvjapan.com">
<display-name lang="ja_JP">NHK BS1</display-name>
</channel>
<channel id="3902.ontvjapan.com">
<display-name lang="ja_JP">NHK BS2</display-name>
</channel>
<channel id="3903.ontvjapan.com">
<display-name lang="ja_JP">NHK BSプレミアム</display-name>
</channel>
<channel id="3904.ontvjapan.com">
<display-name lang="ja_JP">BS日テレ</display-name>
</channel>
...以下略
書きだす 3901.ontvjapan.com NHK BS1
3902.ontvjapan.com NHK BS2
3903.ontvjapan.com NHK BS2プレミアム
3904.ontvjapan.com BS日テレ
...
~/epgrec/config.phpの配列$BS_CHANNEL_MAPの各項目が書きだしたものと同じであるか確認、異なる場合は訂正 $BS_CHANNEL_MAP = array(
"4101.epgdata.ontvjapan" => "101", // BS1
"4103.epgdata.ontvjapan" => "103", // BS2
"4141.epgdata.ontvjapan" => "141", // BS2 PREMIUM
"4151.epgdata.ontvjapan" => "151", // BS NITTERE

# program.xmlに合わせて以下のように修正・保存

$BS_CHANNEL_MAP = array(
"3901.ontvjapan.com" => "101", // BS1
"3902.ontvjapan.com" => "102", // BS2
"3903.ontvjapan.com" => "103", // BS2 PREMIUM
"3904.ontvjapan.com" => "141", // BS 日テレ
~/epgrec/getepg.phpを走らせ、取得を待つ。これでもダメなら別のepgrecを試す。

recpt1 httpサーバ版のデーモン化

PT3が1台の頃は、チューナー専有を避けるため見るときだけ起動するなんていう器用なことをしていた。現在はチューナーがひとつ専有されていても問題ないのだが、いちいち片付けをするのは私の趣味である。起動スクリプトをgistに置いておく。

録画後のtsが再生(変換)できなすぎワロタwwwww・・ワロタ・・・

上から順に試し、それぞれの段階でエンコードにぶち込んで様子を見る。慣れればルーチンワークである。私も週に3件ぐらいこなしているが、薄目でできるぐらいだ。
  1. 復号漏れを疑う
    エンコーダの設定は基本的に問題ない(他のtsでは通る)場合、カードリーダーやpcscdの機嫌が悪くてB-CASカードによる動画の復号(スクランブル解除)が失敗していることを疑う。 こちらの記事に詳しいが、 Multi2Decというツールを用いて復号する。win/dos用なので、wineでも使うか、作業用PCにtsを持ってきて作業する。 補足として、柔らか戦車もといC*S(w*nsc**d.d**)を用いる場合は、Multi2Dec***.exeと同じフォルダに配置する。
    そしてここまで書いて気づいた。サーバー側でも録画環境が構築済みなら、b25コマンドが使えた。 $ b25 [opt] $input $output しかしながら、時々、というか1/2ぐらいの確率で「warning - unpurchased ECM is detected」というエラーが出て復号できない。 どうやら有料番組の扱いになってしまっているのだが、もちろんそんなことはない、普通の地デジ番組である。 そして件のMulti2Decにより余裕で復号できる。どうしたことか。
  2. ドロップが検出
    前述のMulti2Decにおいて、(GUI版しか試してないのでDOSのほうはちょっとわからないが)復号漏れ以外にも いろいろなエラーが検出されると思う。そのうち「ドロップ」という項目が0でなければ、tsファイルが破損している証拠である。 この修復には各種ツールなどが出回っているが、いずれもうまく行かなかった。ここで一時的な措置として有効であった手段をメモしておく。
    1. TsSplitterで余計なものを削除(ここでの解決 40%)
      やり方等は探せばいくらでもあるので、そちらを参考に。ともかく目的のPIDのみを抽出したtsを用意する。 ffmpegならmap指定ミスなどの線がここで潰せる。一回いつもどおり変換をさせてみて、ダメなら次に進む。
    2. mpeg2repairに通す(ここでの解決 20%)
      有名なts修復ツールだが、作業が一瞬で終了したりするtsファイルは望み薄である。 修復されたファイルを前述したMulti2Decでエラーチェックするとよい。
    3. I,IIを入れ替えて行う
      修復してから切り出し…一回だけこれで通った事例があったので挙げておく。
  3. 無理やり編集して生きている部分だけ取り出す
    微妙なネーミングのメーカー製ソフト試用版、「***は、あなたのビデオファイルを効率的にスプリットさせる!」みたいな 機械翻訳丸出しの公式サイトでやってるツールなど、一見まともでは無さそうなソフトが案外向いていたりする。出力はもちろん無変換・ソースをコピーに限る。
  4. さぁ諦めて再放送の機会を待とうではないか!…●A●SUYAでは旧作DVDレンタル100円だったな!…
暇ならTSパケットエラー報告スレなども覗くと、放送局が悪いのか録画環境が悪いのか確かめられる。

リンク集

PS3 Media Server

PS3でも見れたらいんじゃね?ってチャレンジをした際に案の定エラーの嵐である。

デーモン化したい

~/PMS.shで起動するなんてぶっちゃけありえない!って人(主に私)に朗報、 起動スクリプトを公開してくださっている方がたくさんいる。その中でも一番簡単に使えたやつを紹介する。

PMS.confの設定

とりあえず以下の点だけは入れる name = 表示名
language = ja
folders = 公開したいディレクトリのパス
uuid = (uuidgen -t の結果)
読み込まれるのは"起動ユーザのホームディレクトリ/.config/PMS/PMS.conf"なので、そこに配置しておく。

PS3側で"DLNA protocol error 2101"と出てファイル一覧が表示されない

ディレクトリを開いた際、表示されるファイル(サブディレクトリは含まない)のサイズや数が多いと落ちるらしく、 動画ファイルを適当に分類してサブディレクトリに分けたりすれば出なくなった。特に1GBを超えるファイル(未変換のtsとか)が多数ある場合は確実に終了、 tsは隔離したほうがよさげ。しかし、3-4GBのファイルが1つだけのディレクトリを開いても問題ないので、不思議な仕様()である。

PMS自体が起動しなくて涙目

ともかくjavaを入れなおす。公式解説ページを参考に、 rpmで入れてみる(32bitはこちら)。 ここまでやってダメとなると、PMS最新版(v1.82.0)がアレなんだろうと、 適当な旧バージョンを探して使ってみる。今回はv1.71.0を使ってみる。 wget http://ps3mediaserver.googlecode.com/files/pms-generic-linux-unix-1.71.0.tgz
tar xvf pms-generic-linux-unix-1.71.0.tgz
cd pms-1.71.0
パスを合わせて起動スクリプトを使うと見事成功、動作も良好でした、と。