FreeBSDでPT1を使って地デジを録画してみた


最近は、地デジの録画をtorneでしていたのですが、torneってBSの録画ができないんですよね。
録った番組をエンコードしてiPhoneで見ることもできませんし。
そんなことを考えていたある日、友人の家にお邪魔すると、PT1が転がっているではありませんか。その友人は、PT2を使っているということなので、強奪(?)してきました。

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

本来は、16,800円のはずなのですが、人気のせいか3万円程度で売られていることも珍しくはありません。また、PT2は既に生産終了しています。(PT1は言わずもがな。)

で、地デジを録画しようと思いたったのですが、LinuxやWindowsで録画している人はたくさん居ますが、僕の愛するFreeBSDでPT1やPT2を使っている人は数人しか居なさそうです。
そもそも、PT1やPT2のドライバを書いた方がi386で動かしたのが、今年の6月5日ですよ。

そんなことで、サーバにしかFreeBSDを使っていなかったけど、FreeBSDを愛する僕が、FreeBSDでPT1を使って地デジを録画してみました。
ちなみに、僕はPT1でやりましたが、PT2でも手順にはまったく違いはないはずです。

材料

必要なモノは次のとおりです。

  • i386マシン (再エンコードは手元のマシンですることにして、Atom 330マシンを用意しました)
  • PT1またはPT2 (これがないとはじまりません)
  • ICカードリーダ (僕は、通りすがりのあきばお〜で1,279円だったのでCI691を購入)
  • B-CASカード (手持ちの地デジ機器から抜くなどして調達してください)
  • FreeBSD 8.0-RELEASE (ISOを落としてきて焼きました)
  • ICカードリーダは、SCR3310というのもFreeBSDで使えたらしいです。(僕は試してません)

    アマゾンのサーバでエラーが起こっているかもしれません。
    一度ページを再読み込みしてみてください。

    また、portsのインストールのために、Atom 330なので、/etc/make.confには、

    CPUTYPE?=core2

    と書いてあります。

    まずはPT1のドライバ

    だえもんだもん氏の書いた、ptx-20100430をダウンロードし、パッチを当てて、コンパイルするのみです。だえもんだもん氏、凄すぎです。感謝!

    # fetch http://2sen.dip.jp/cgi-bin/pt1up/source/up0281.gz
    # mv up0281.gz up0281.tar.gz
    # fetch http://2sen.dip.jp/cgi-bin/pt1up/source/up0283.zip
    # mv up0283.zip up0283.bz2
    # tar xvzf up0281.tar.gz
    # bzip2 -d up0283.bz2
    # patch < up0283
    # cd ptx-20100430/dev/ptx
    # make
    # make install
    # kldload ptx.ko
    

    up0283のpatchは、コールドブートに対応するpatchです。
    /boot/loader.confに

    ptx_load="YES"

    と書いてやると、ブート時にドライバを読み込んでくれます。

    とりあえず、再起動してやってから、

    # sysctl -w dev.ptx.0.t0.freq=73
    # cat /dev/ptx0.t0 > ch73.ts
    

    とやって、できあがったch73.tsをVLCで再生すると、ワンセグながらも録画できたのを確認できるはず。

    B-CASカードを読めるようにする

    必要なものは、portsの devel/pcsc-lite と devel/libccid らしいです。

    # portinstall devel/pcsc-lite
    # portinstall devel/libccid
    

    とかやってインストールすれば楽ちんです。
    pcscdは、/etc/rc.confにpcscd_enable=”YES”と書いてやる必要があるみたいなので、追記するのを忘れないこと。

    私が買ってきたCI691というスマートカードリーダは、このままではlibccidから見つけて貰えません。CI691のベンダー ID とプロダクト ID は idVendor=0bda, idProduct=0165 でした。
    このベンダー IDとプロダクト IDを /usr/local/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
    の<ifdVendorID>, <ifdProductID>, <ifdFriendlyName> それぞれの <array>ノードの末尾に追記をしました。

    そこで、

    # /usr/local/etc/rc.d/pcscd start

    としてみるとpcscdがスタートするはずです。

    portsをインストールした際に、 /etc/devd.conf に次の内容を追記するようにというメッセージが出ていたので、追記を行います。

    attach 100 {
            device-name "ugen[0-9]+";
            action "/usr/local/sbin/pcscd -H";
    };
    
    detach 100 {
            device-name "ugen[0-9]+";
            action "/usr/local/sbin/pcscd -H";
    };
    

    追記が終わったら、

    # /etc/rc.d/devd restart

    としてやると、devdが再起動されます。

    ちなみに、私が上記のことをしたときには、

    dccid-1.3.12_1       Generic USB CCID (Chip/Smart Card Interface Devices) driver
    pcsc-lite-1.6.0_1,2 A smartcard development library

    がインストールされました。

    b25のビルド

    地デジのキャプチャ関連の情報を集めているとb25というツール名が何度も出てきます。
    これは、まるも氏の開発した、「ARIB STD-B25 仕様確認テストプログラム」というツールの事です。最新のバージョンは、Ver. 0.2.4の様なのですが、同氏が配布しているのはWindows用のコードです。 ( arib_std_b25-0.2.4.lzh )
    ということで、Linux版のものを探してきて、FreeBSDでコンパイルしてました。僕としてはカケだったのですが、すんなり動いてよかったです。LinuxではGNU Makeが一般的の様なので、portsでgmakeを先に入れておきました。

    $ fetch http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.tar.bz2
    $ tar xvzf c44e16dbb0e2.tar.bz2
    $ cd pt1-c44e16dbb0e2/arib25/src
    $ gmake
    

    これでb25のバイナリができているはずです。

    実験してみる

    ここまでやれば、基本的に録画ができるはずです。b25でMULTI2(地上デジタル放送と衛星放送で使われているブロック暗号)の復号もできます。

    # sysctl -w dev.ptx.0.t0.freq=72
    # cat /dev/ptx0.t0 > ch72.ts
    # ./b25 ch72.ts ch72_b25.ts
    

    できあがった、ch72_b25.tsをVLCで再生すると、1920pixelあるムービーファイルの再生ができました。

    続く

    ここまで来れば、後は録画予約をするフロントエンドを用意したり、録画したファイルを再エンコードするといった仕組みを用意するのみです。
    フロントエンドには、epgrecfoltiaなどがある模様です。また、ご自分でcrontabを書いて録画予約するのも良いでしょう。

    ちなみに、上述のptx-20100430のアーカイブの中のtoolsディレクトリにはperlスクリプトが入っています。

    perl recptx.pl 103 5600 test.ts

    といった具合に起動すると、チャンネル103で5600秒間、test.tsに録画をしてくれます。
    b25で復号も同時にしてくれそうですが、私はまだ試していません。