先月、アナログ停波に備え、余ったPT2を譲ってもらって録画環境をデジタル化した。地上波だけでは高い買い物に感じたのでBSにも対応させた。ようやく使えるようになってきたのでまとめる。今回はMythTV以外の部分。

用意した機材

  • アースソフト PT2 Rev.A
  • NTT-ME SCR3310-NTTCom
  • B-CASカード
  • YAGI UwPA-UP
  • 富士通のBSアンテナ(十数年前のもの)
  • HORIC アンテナ2分配器 HAT-2SP911NB
  • YAGI 2分配器 CSPDL2(以前買って余ってた)
  • ダイソーのアンテナケーブル1m 315円*5

B-CASカードは電話して再発行してもらった。BSが見られるか聞かれただけでメーカー、機種名は問われなかった。

家にアンテナが立っていないのでブースター付きの室内アンテナを新調。ケーブルが付属していないので2本必要になる。BSアンテナは十年以上使われてなかったものをガラクタで補修して簡単に設置した。アンテナケーブルは一番安く手に入るダイソーのものを購入。

信号レベルはWindowsマシンにカードを挿してSignalTalkerで測った。BSアンテナはBluetoothでSignalTalkerの音を飛ばして調整した。recpt1でも信号レベルは測れるらしいので、もしアンテナがずれたら試してみる。DVB版で測れるツールはないんだろうか。

DVB版ドライバの導入

まずドライバを導入する。chardev版ではなくDVB版を使う。DVB版はfuse_b25を使えば、アナログ環境で使っていたMythTVで使える。DVB版ドライバは新しいカーネルには標準で入っているが、squeezeのカーネルには入っていないのでインストールする。

PT2が認識しているか確認

$ lspci | grep Multimedia
 04:01.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)

上のように出たらPT2が認識しているのでドライバをインストールする。ドライバのソースはhttp://www.linuxtv.org/hg/v4l-dvbからダウンロードできる。

そのままではビルドできないので必要なパッケージをインストールしておく。

$ sudo aptitude install build-essential linux-header-2.6-amd64

パッケージをインストールしたらドライバをビルドしてインストールする。

$ cd /usr/local/src/ 
$ wget http://www.linuxtv.org/hg/v4l-dvb/archive/tip.tar.bz2 
$ tar xjf tip.tar.bz2 
$ cd v4l-dvb-3724e93f7af5/ 
$ make 
$ sudo make install 
$ sudo reboot

インストール後、ドライバモジュールを読み込ませるために再起動する。

ドライバの確認。

$ lsmod | grep pt1
earth_pt1              15748  105
dvb_core               75106  1 earth_pt1
i2c_core               15819  6 i915,drm_kms_helper,earth_pt1,drm,i2c_algo_bit,i2c_i801
$ dmesg | grep DVB
[    7.555975] DVB: registering new adapter (earth-pt1)
[    7.556224] DVB: registering new adapter (earth-pt1)
[    7.556414] DVB: registering new adapter (earth-pt1)
[    7.556632] DVB: registering new adapter (earth-pt1)
[    7.892565] DVB: registering adapter 0 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-S)...
[    7.892655] DVB: registering adapter 1 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-T)...
[    7.892688] DVB: registering adapter 2 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-S)...
[    7.892714] DVB: registering adapter 3 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-T)...
$ ls /dev/dvb/ 
adapter0 adapter1 adapter2 adapter3

ISDB-SとなっているのがBS/CS用、ISDB-Tとなっているのが地上波用になる。

チャンネルスキャン

チャンネルスキャンするために、DTV アップローダからlinux用 DVBアプリ集をダウンロードして展開する。

$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0588.zip 
$ unzip up0588.zip

チャンネルスキャンしてみる

$ cd dvb_apps_0.92/cmds/ 
$ ./s2scan -a 1 #地上波 
$ ./s2scan -a 0 -p -b #BS 
$ ./s2scan -a 0 -p -c #CS

tuneコマンド

PT1/2 アップローダからDVB PT1 ドライバ テスト用ユーティリティをダウンロードして展開する。

$ cd /usr/local/src/ 
$ wget http://2sen.dip.jp/cgi-bin/pt1up/source/up0219.gz 
$ tar xzf up0219.gz #本来の拡張子は.tar.gzなのでtarで展開する 
$ cd dvb-pt1-test/

tune.cのソースを修正する必要がある。

新しいドライバでは定数の名前が変わっているので変更。

*** tune.c.org   2009-03-07 03:09:53.000000000 +0900
--- tune.c  2011-08-16 00:42:21.000000000 +0900
***************
*** 96,102 ****
  
    prop[0].cmd = DTV_FREQUENCY;
    prop[0].u.data = channel->frequency;
!   prop[1].cmd = DTV_ISDB_TS_ID;
    prop[1].u.data = channel->ts_id;
    prop[2].cmd = DTV_TUNE;
  
--- 96,102 ----
  
    prop[0].cmd = DTV_FREQUENCY;
    prop[0].u.data = channel->frequency;
!   prop[1].cmd = DTV_ISDBS_TS_ID;
    prop[1].u.data = channel->ts_id;
    prop[2].cmd = DTV_TUNE;
  

アンテナを直結しているので、LNB電源をONにする機能を追加。

*** tune.c.org   2011-08-16 00:42:21.000000000 +0900
--- tune.c  2011-08-16 00:51:35.000000000 +0900
***************
*** 80,85 ****
--- 80,90 ----
    }
  
    if (info.type == FE_QPSK) {
+       prop[0].cmd = DTV_VOLTAGE;
+       prop[0].u.data = SEC_VOLTAGE_18;
+       props.props = prop;
+       props.num = 1;
+       ioctl(fd, FE_SET_PROPERTY, &props);
        channel = lookup_channel(channel_id, isdbs_channels,
                     ARRAY_SIZE(isdbs_channels));
    } else if (info.type == FE_OFDM) {

s2scanの結果やここを参考にして、周波数のテーブル修正する。下は奈良県北部の場合。

static struct channel isdbt_channels[] = {
    {   1, "NHK 総合・奈良",    581142857 },
    {   2, "NHK 教育・大阪",    473142857 },
    {   3, "サンテレビ",        551142857 },
    {   4, "毎日放送",          491142857 },
    {   5, "KBS京都",           533142857 },
    {   6, "ABCテレビ",         485142857 },
    {   7, "テレビ大阪",        503142857 },
    {   8, "関西テレビ",        497142857 },
    {   9, "奈良テレビ",        569142857 },
    {  10, "読売テレビ",        479142857 },
};

static struct channel isdbs_channels[] = {
    {   1, "NHK BS-1",          1318000, 0x40f1 },
/*  {   2, "NHK BS-2",          1318000, 0x40f1 },*/
    {   3, "NHK BSプレミアム",  1318000, 0x40f2 },
    {   4, "BS日テレ",          1279640, 0x40d0 },
    {   5, "BS朝日",            1049480, 0x4010 },
    {   6, "BS-TBS",            1049480, 0x4011 },
    {   7, "BSジャパン",        1087840, 0x4031 },
    {   8, "BSフジ",            1279640, 0x40d1 },
    {   9, "WOWOW",             1087840, 0x4030 },
    {  10, "STAR CHANNEL HV",   1202920, 0x4091 },
    {  11, "BS11",              1202920, 0x4090 },
    {  12, "TwellV",            1202920, 0x4092 },
};

修正が終わったらmakeする。

$ make 
$ sudo cp tune /usr/local/bin/

録画テスト

$ tune 1 1 & 
$ cat /dev/dvb/adapter1/dvr0 > test.ts 
Ctrl+c 
$ fg 
Ctrl+c

暗号化されたTSが保存されれば成功。

カードリーダーを使えるようにする

パッケージのインストール。

$ sudo aptitude install pcsc-tools pcscd

動作確認。B-CASカードはICチップを上にして、挿入する。(逆さにして認識しなかった)

$ pcsc_scan |grep B-CAS
    Japanese Chijou Digital B-CAS Card (pay TV) 
^C

fuse_b25

TSが暗号化されているので、MythTVなどでそのままでは扱えない。そのため、fuse_b25で復号されたTSを出力する新しいアダプターを用意する。

DTV アップローダからLinux用 fuse_b25 ver0.4.8をダウンロードしてインストールする。

$ sudo aptitude install libfuse-dev pkg-config libpcsclite-dev #必要なパッケージのインストール 
$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0664.zip 
$ unzip up0664.zip 
$ cd fuse_b25-0.4.8/ 
$ unzip fuse_b25-0.4.8.zip 
$ cd fuse_b25-0.4.8/ 
$ ./configure 
$ make 
$ sudo make install

adapter5でadapter1を復号する場合

$ ls /dev/dvb/ #存在するデバイスの確認
adapter0  adapter1  adapter2  adapter3 
$ sudo b25dir 5 #マウント先のディレクトリの作成
$ ls /dev/dvb/ #ディレクトリが作られていることを確認
adapter0 adapter1 adapter2 adapter3 adapter5
$ sudo fuse_b25 --target /dev/dvb/adapter1 /dev/dvb/adapter5 -o allow_other 

録画テスト

$ tune 5 1 &
$ cat /dev/dvb/adapter5/dvr0 > test.ts

復号されたTSが保存される。このファイルは動画として再生できる。

起動時にマウントする必要があるので、/etc/rc.localに次のように書く。

for ADAPTER in 0 1 2 3 ; do
  NEW_ADAPTER=`expr $ADAPTER + 10` #数字は任意
  mkdir /dev/dvb/adapter$NEW_ADAPTER
  chown root:video /dev/dvb/adapter$NEW_ADAPTER
  chmod 0775 /dev/dvb/adapter$NEW_ADAPTER
  /usr/bin/nice --4 /usr/local/bin/fuse_b25 --target /dev/dvb/adapter$ADAPTER /dev/dvb/adapter$NEW_ADAPTER -o allow_other
done
exit 0

数字は元々あるアダプターの数より多くしておけばいいので、新しいアダプターの数字はもとより10多い数にした。録画の失敗を防ぐため、fuse_b25の優先度を上げてある。再起動後、各アダプターがマウントされている。

$ mount |grep fuse_b25
fuse_b25 on /dev/dvb/adapter10 type fuse.fuse_b25 (rw,nosuid,nodev,allow_other,default_permissions)
fuse_b25 on /dev/dvb/adapter11 type fuse.fuse_b25 (rw,nosuid,nodev,allow_other,default_permissions)
fuse_b25 on /dev/dvb/adapter12 type fuse.fuse_b25 (rw,nosuid,nodev,allow_other,default_permissions)
fuse_b25 on /dev/dvb/adapter13 type fuse.fuse_b25 (rw,nosuid,nodev,allow_other,default_permissions)

tuneコマンドとcatでとりあえず録画はできるようになった。

参考

8月 19th, 2011

Posted In: ソフトウェア, ハードウェア

タグ: , , , , , , , ,

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください