先月、アナログ停波に備え、余ったPT2を譲ってもらって録画環境をデジタル化した。地上波だけでは高い買い物に感じたのでBSにも対応させた。ようやく使えるようになってきたのでまとめる。今回はMythTV以外の部分。
用意した機材
B-CASカードは電話して再発行してもらった。BSが見られるか聞かれただけでメーカー、機種名は問われなかった。
家にアンテナが立っていないのでブースター付きの室内アンテナを新調。ケーブルが付属していないので2本必要になる。BSアンテナは十年以上使われてなかったものをガラクタで補修して簡単に設置した。アンテナケーブルは一番安く手に入るダイソーのものを購入。
信号レベルはWindowsマシンにカードを挿してSignalTalkerで測った。BSアンテナはBluetoothでSignalTalkerの音を飛ばして調整した。recpt1でも信号レベルは測れるらしいので、もしアンテナがずれたら試してみる。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
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
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でとりあえず録画はできるようになった。
参考
takaaki 8月 19th, 2011
タグ: Debian, DVB, fuse_b25, Linux, MythTV, PT2, TV, Windows, 録画