(1)PCのセットアップ
(2)HDUS関連アプリをmake
(3)カードリーダー導入、そして録画へ… ←今ココ

前回でチューナー(MonsterTV HDUS)自体のセットアップは完了したが、スマートカードリーダーをつなげてセットアップしないと地デジの視聴・録画はできない。
HDUSをWindowsで使う場合は、HDUSに内蔵されているカードリーダーでB-CASカードを利用できる。しかしLinuxでは内蔵リーダーを使うドライバが整備されていないので、別途、Linuxでの動作が確認されているカードリーダーSCR3310-NTTCom [Amazon]を利用する。

追記:ご案内

こういう話があるようなので、関係各位にご迷惑をお掛けしないよう、一部内容を書き換えた。

カードリーダーのセットアップ

カードリーダーを使えるようにするパッケージをインストール。

# aptitude install pcscd

pcsc-toolsパッケージを入れると、うまく行かないときの問題解決に便利なツールが使えるようになるが、なくても動く。
pcsc-toolsにはGUIのツールが含まれているため、依存するパッケージも併せてインストールするとHDDの容量を数十MBも使ってしまうのが難点。

さて、pcscdのインストールが完了したら、次の手順で動作確認。

  1. カードリーダーSCR3310-NTTComをUSB接続。カードはまだ挿さなくていい。
  2. SCR3310のグリーンのランプが点灯したら(点きっぱなし)まずはOK。
  3. HDUSに付属していたB-CASカードをSCR3310に挿入。裏返しで挿す(端子面が上、青い面が下)
  4. # /etc/init.d/pcscd restart
  5. SCR3310のグリーンのランプが点滅し出したらOK。

準備完了。録画テスト

これで録画するための最低限の準備は整った。
テストしてみる。
(略)

出力されたtsファイルをWindows機に移して、TSファイルを再生できるプレイヤーに渡してみる。VLCが手っ取り早い。
無事再生されたら、めでたしめでたし。

処理能力は大丈夫?

ロースペック機ということで心配されていた「処理が追いつかないのでは?」という問題をチェック。

Windows上で tsselect というプログラムを使えば、TSファイルの「ドロップ」の数を確認できる。
ドロップというのはパケットに含まれているカウンターが連続していないという意味なので、ドロップがゼロなら録りこぼしはないと考えて良さそう。

30分くらい録画したTSファイル(1.97GB)をtsselectでチェックしたが、dropはゼロ。処理が追いつかないということはないようだ。

録画中のCPU使用率を確認してみた。

$ vmstat 10 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  1     72   5916   3208 445300    0    0     5   591  151  206 11  4 83  2
 3  1     72   5540   3204 445676    0    0     0  2135  396  656 36 15 44  5
 3  1     72   6288   3208 444832    0    0     0  2156  400  660 35 14 45  6

10秒おきに3回計測。初回の値は無視するとして、CPU使用率はだいたい50%くらいのようだ。(cpuの欄のus(ユーザー時間)とsy(システム時間)を足した数値)
CUIの運用でこの数字と言うことは、X Windowを入れないという判断は正しかったっぽい。ただ、逆にXを使わなければCrusoeでも余裕で録画できることは判った。(HDUSが1台で50%ということは、2台つなげての同時録画は難しそうだけど)
いちばん左、procsのr(実行待ちプロセス数)が 3 というのはちょっと気になるが、録画が正常にできているのでとりあえず見なかったことにする。

ちなみに free コマンドで確認できる空きメモリ容量は460MB前後。512MBのうち50MB程度しか使っていない。
CPUもメモリも、使用量を減らすためにチューニングをする必要があるかと思っていたが、どうやらこのままでも使い物になりそう。

便利に使うためには

これでとりあえず「録画開始時に人力でコマンドを叩く → 録画終了したらTSファイルを別のマシンに転送 → 視聴orエンコード」という流れは可能になった。
後は、もっと便利に使うための小技をいくつか。

録画じゃなくリアルタイム視聴したい

マシンパワーの問題で再生アプリどころかX Windowすらインストールしていないが、ネットワーク経由で別のマシンからリアルタイム視聴することは可能。
ただしネットワークの帯域(LANの実効転送レート)が地デジの最大ビットレート以上、すなわち17Mbps以上必要。

有線LANの場合、100BASEか1000BASEでつないでいれば問題なし。10BASE以下だと無理。(今どき10BASE-Tでつないでいる人もいないだろうけど)
無線LANの場合は、11nなら大丈夫だろうけど、11g/11aだと「実効12〜3Mbps」ということも結構あるので、電波環境や無線機器の性能によっては厳しいかも。11bは無理。

視聴方法は、録画機(送出側)はrecfriioに次のようなオプションを付けて実行する。
(略)

--udp オプションで再生する側のPCのIPアドレスを指定。--portは適当な値でいいけど、視聴に使うVLCのデフォルト値が1234になっているのでそれに合わせるのがラクかと。
録画秒数を「-」にしておけば、たぶん止めるまで永遠に実行しつづけてくれる。
出力ファイル名を「-」にすると標準出力に送られるので、/dev/nullにリダイレクトして捨てる。TSファイル名を指定しておけば、リアルタイム視聴しながら録画もできるのかも。(試してない)

視聴側は、VLCを使って受信&再生。

VLC

VLCのメニューから「メディア(M)→ネットワークを開く(N)...」を選択。

VLC

プロトコルをUDP、IPとポートを先ほど設定したのと同じ値にする。
ネットワークが不安定だとコマ落ちしたり止まったりするかもしれない。

見終えたら、VLCを終了するだけでなく、サーバー側のrecfriioも終わらせることを忘れずに。Ctrl-Cを入力すれば終了できる。
recfriio起動時に、秒数として「-」ではなく数値を指定しておけば自動終了も可能。

タイマー録画したい

つ atコマンド

…と思ったらatパッケージをインストールしないと使えないのだった。インストール済みの cron でも同じことができる。

$ sudo crontab -e

cronなら「毎週木曜」とか「月〜金」といった連続モノにも対応できる。
ただし、cronだけでは柔軟な運用は難しい。

  • 放送時間の変更や野球延長などに自動対応できない
  • PCの電源を24/7でONにしておく必要がある

他のアプリ/コマンド/サービスと組み合わせれば実現はできそう。
というか「vrs」や「recfriio server」など、そういうのを実現しているアプリが既にいくつかある。特にrecfriio serverは「玄箱PRO」のようなかなり非力な機械での運用も想定しているようなので、Librettoでも余裕で使えるかもしれない。

今後の予定

とりあえず今のままでも何とかなるっちゃなるんだけど。

  • as11loaderの自動化
    as11loader実行するの忘れて予約録画に失敗した。recfriio serverのヘルプに方法が書いてあるので、これはすぐできそう。(追記:設定した
  • 予約録画が終了したら、TSファイルをNASに移動
    これはスクリプトを1行足せばいいだけなので簡単。
  • 予約録画が終了したらサスペンド、録画開始前に自動復帰
  • 前者はスクリプトを1行足せば済むけど、後者は未調査。/sys/class/rtc/rtc0/wakealarm を使うらしい。参考:ACPI Wakeup (MythTV wiki)

recfriio serverを使うか、ぜんぶ自前で実装するか微妙なところ。