先月にDVB版PT3ドライバがLinuxカーネルに取り込まれた。PX-S1UDも今年取り込まれている。PX-S1UDのドライバは3.15以降で、PT3のDVB版ドライバは3.18以降で使えるようになる。
両方のドライバをDebianで使えるようにしてみた。
PX-S1UDには3.15以降のカーネルで対応するので、Debianのカーネルをアップグレードすればいい。
PX-S1UDの接続確認
$ lsusb | grep VidzMedia Bus 001 Device 002: ID 3275:0080 VidzMedia Pte Ltd
バックポートリポジトリの追加
$ sudo sh -c "echo 'deb http://http.debian.net/debian wheezy-backports main' > /etc/apt/sources.list.d/backports.list" $ sudo aptitude update
カーネルのインストール
$ sudo aptitude -t wheezy-backports install linux-image-3.16-0.bpo.2-amd64
unzipのインストール
$ sudo aptitude install unzip
Windows用ドライバからファームウェアを導入
$ cd /usr/local/src/ $ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip $ unzip PX-S1UD_driver_Ver.1.0.1.zip $ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
再起動
$ sudo reboot
ドライバを確認
$ lsmod | grep smsusb smsusb 17036 0 smsmdtv 47106 2 smsdvb,smsusb usbcore 199395 5 uhci_hcd,ehci_hcd,ehci_pci,smsusb,usbhid $ ls /dev/dvb/ adapter0
Linux3.18で対応するが、Wheezyではまだ使えないのでV4L-DVBドライバをインストールする。ビルドには3.8以降のカーネルが必要になる。カーネルのアップグレードまではPX-S1UDと共通。
PT3の確認
$ lspci | grep Multimedia 03:00.0 Multimedia controller: Altera Corporation Device 4c15 (rev 01)
バックポートリポジトリの追加
$ sudo sh -c "echo 'deb http://http.debian.net/debian wheezy-backports main' > /etc/apt/sources.list.d/backports.list" $ sudo aptitude update
カーネルのインストール
$ sudo aptitude -t wheezy-backports install linux-image-3.16-0.bpo.2-amd64
再起動して確認
$ sudo reboot $ uname -r 3.16-0.bpo.2-amd64
必要なパッケージのインストール
$ sudo aptitude install git build-essential patchutils libproc-processtable-perl linux-headers-3.16-0.bpo.2-amd64
ビルド
$ cd /usr/local/src/ $ git clone --depth=1 git://linuxtv.org/media_build.git $ cd media_build $ ./build
インストール
$ sudo make install
ドライバモジュールのロード
$ sudo modprobe earth-pt3
ドライバの確認
$ lsmod |grep earth_pt3 earth_pt3 21751 0 dvb_core 110088 1 earth_pt3 i2c_core 50108 4 drm,i2c_piix4,drm_kms_helper,earth_pt3 $ ls /dev/dvb/ adapter0 adapter1 adapter2 adapter3
Linux3.18以降を使う場合、DVB版ドライバをブラックリストに追加しておかないとDVB版ドライバが使われてしまう。PT3はearth-pt1ではなくearth-pt3を/etc/modprobe.d/blacklist.confに追加する。PT1/2を使っていない場合、earth-pt1を追加しても何の効果もない。
$ sudo sh -c "echo 'blacklist earth-pt3' >> /etc/modprobe.d/blacklist.conf
takaaki 10月 26th, 2014
Posted In: ハードウェア
PX-S1UDをLinuxで使えるようにしたのでChinachuと組み合わせてみた。録画にはrecdvbを使う。
現在はこちらのドライバが安定している。
録画時にB25デコードをかける場合はlibarib25やFUSE_b25をインストールしておく。
PT3などと同じように録画するには録画コマンドrecdvb(recpt1の改造版)をこちらからダウンロードしておく。手順はrecpt1と変わらない。
必要なパッケージのインストール
$ sudo aptitude install automake
ビルドとインストール
$ cd /usr/local/src/ $ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.2.0.tgz $ tar xvzf recdvb-1.2.0.tgz $ cd recdvb-1.2.0 $ ./autogen.sh $ ./configure --enable-b25 #libarib25でデコードする場合 $ make $ sudo make install
recpt1などが入っている場合checksignalが上書きされるので注意。recdvbはPT2、PT3のDVBドライバでも使えるが、衛星放送には対応していない。checksignalも形式が違うのであまり当てにならない。
録画テスト
$ recdvb --dev 0 --b25 --strip チャンネル番号 録画秒数 録画ファイル名
/dev/dvb/adapter0の場合–devに0を指定。
Chinachuのwikiに従えば問題なくインストールできる。DVBデバイスの場合、実行ユーザーをvideoグループに所属させる必要があるので注意が必要。
必要なパッケージのインストール(wikiの記述通り)
$ sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf
実行ユーザー作成
$ sudo adduser chinachu $ sudo adduser chinachu video #デバイスの操作はvideoグループにしかできないので、グループに追加 $ sudo adduser chinachu sudo #インストール・アップデートのためにsudoグループに追加
ユーザーをchinachuに切り替え
$ sudo -i -u chinachu
ソースの取得
$ git clone git://github.com/kanreisa/Chinachu.git chinachu
インストール
$ cd chinachu $ ./chinachu installer Chinachu Installer Menu: [!] These are installed under all /home/chinachu/chinachu/... [!] Recommend the Auto installation. 1) Auto (full) 5) Node.js Modules 9) libfdk-aac 2) Auto (fast) 6) epgdump 10) libogg 3) submodule 7) libx264 11) libvorbis 4) Node.js Environment 8) libvpx 12) libav what do you install? > 1 selected: Auto (full)
サービスの登録
$ ./chinachu service operator initscript > /tmp/chinachu-operator $ ./chinachu service wui initscript > /tmp/chinachu-wui $ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui $ sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui $ sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/ $ sudo insserv chinachu-operator $ sudo insserv chinachu-wui
設定ファイルの作成
$ cp config.sample.json config.json #サンプルのコピー $ sudo vi config.json
録画ファイルの保存先を設定
"recordedDir" : "./recorded/",
ユーザーの設定
"wuiUsers": [ "ユーザー名:パスワード" ],
外部から見られないのであれば、設定そのものを削除してもいい。
ファイル名のフォーマット
"recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<tuner>]<title>.m2ts",
フォーマットに使えるタグは/node_modules/chinachu-common/lib/chinachu-common.jsのexports.formatRecordedNameを見るとわかる。下に一覧を用意した。
チューナーの設定
"tuners": [ { "name" : "PX-S1UD", "isScrambling": false, "types" : [ "GR" ], "command" : "recdvb --dev 0 --b25 --strip --sid <sid> <channel> - -" } ],
/dev/dvb/adapter0の場合–devに0を指定する。
チャンネル設定
"channels": [ { "type": "GR", "channel": "16" }, { "type": "GR", "channel": "21" }, { "type": "GR", "channel": "22" }, { "type": "GR", "channel": "23" }, { "type": "GR", "channel": "24" }, { "type": "GR", "channel": "25" }, { "type": "GR", "channel": "26" }, { "type": "GR", "channel": "27" } ]
地域に合わせて設定する
$ sudo service chinachu-operator start
$ sudo service chinachu-wui start
しばらく待つと番組表が作成される。
ブラウザに"http://IPアドレス:10772/"と入力するとChinachuのWUIに接続できる。ここから予約や録画ファイルの視聴・管理が行える。ストリーミング再生を無変換以外で使うにはそれなりのスペックが必要。番組表からできるライブ視聴はエンコードが必要で信頼性がまだ低いので、予約録画して再生した方がいい。
他のユーザーでchinachuコマンドをそのまま使うのはまずそうなので、普段使っているユーザーで使えるようにエイリアスを追加。(次回ログインから有効)
$ echo "alias chinachu='sudo -u chinachu /home/chinachu/chinachu/chinachu'" >> ~/.bash_aliases
自動予約ルール確認
$ chinachu rules
予約済み番組の確認
$ chinachu reserves
録画中番組の確認
$ chinachu recording
録画済み番組の確認
$ chinachu reserves recorded
Chinachuのアップデート
$ chinachu updater
番組表手動更新
$ chinachu update
番組表の作り直し
$ chinachu update -f
ロックファイルの削除
$ chinachu unlock
takaaki 3月 23rd, 2014
タグ: Chinachu, DVB, fuse_b25, js, Linux, PLEX, PT2, PT3, PX-S1UD, sudo, TV, 録画
PLEXのUSBチューナーPX-S1UDがLinuxで使えるというので試してみた。標準ドライバに少し手を加えて使えるようにする。環境はDebian(wheezy)。
追記:ドライバがカーネルに組み込まれたのでこちらを参照。PX-S1UDとPT3のDVBドライバがLinux標準に – 底辺迷走
Debian(wheezy)に導入されているカーネル3.2に含まれているドライバはPX-S1UDに使えないので、新しいカーネルを導入しておく。カーネル3.10以降であればアップグレードは不要。
使われているカーネルを確認
$ uname -r 3.2.0-4-amd64
Backportsリポジトリを追加
$ sudo sh -c "echo 'deb http://ftp.debian.org/debian/ wheezy-backports main' > /etc/apt/sources.list.d/wheezy-backports.list" $ sudo aptitude update
カーネルのインストール
$ sudo aptitude -t wheezy-backports install linux-image-3.12-0.bpo.1-amd64
カーネルを入れ替えるために再起動
$ sudo reboot
カーネルを確認
$ uname -r 3.12-0.bpo.1-amd64
必要なパッケージのインストール
$ sudo aptitude install build-essential linux-source-3.12 linux-headers-3.12-0.bpo.1-amd64
カーネルソースの展開
$ cd /usr/local/src/ $ tar xvJf /usr/src/linux-source-3.12.tar.xz
ビルドの準備
$ cd linux-source-3.12/ $ cp /boot/config-`uname -r` .config $ make oldconfig $ make modules_prepare $ cp /lib/modules/`uname -r`/build/Module.symvers .
ドライバの階層に移動
$ cd drivers/media/usb/siano/
ソースを修正する
$ vi smsusb.c
usb_device_id smsusb_id_tableに次の2行を追加
{ USB_DEVICE(0x3275, 0x0080),
.driver_info = SMS1XXX_BOARD_SIANO_RIO },
変更内容
$ diff -u smsusb.c{.org,} --- smsusb.c.org 2014-01-26 02:18:00.000000000 +0900 +++ smsusb.c 2014-03-21 19:59:07.922682492 +0900 @@ -634,6 +634,8 @@ .driver_info = SMS1XXX_BOARD_ZTE_DVB_DATA_CARD }, { USB_DEVICE(0x19D2, 0x0078), .driver_info = SMS1XXX_BOARD_ONDA_MDTV_DATA_CARD }, + { USB_DEVICE(0x3275, 0x0080), + .driver_info = SMS1XXX_BOARD_SIANO_RIO }, { } /* Terminating entry */ };
ドライバモジュールのビルド
$ make -C /usr/local/src/linux-source-3.12 M=`pwd` modules
"make modules_install"ではうまくインストール出来ないのでcpでインストールする。Windows用ドライバに含まれるファームウェアも必要なので導入しておく。
元のモジュールを上書きするので、バックアップする
$ sudo mv /lib/modules/`uname -r`/kernel/drivers/media/usb/siano/smsusb.ko{,.org}
ドライバモジュールのインストール
$ sudo cp smsusb.ko /lib/modules/`uname -r`/kernel/drivers/media/usb/siano/
unzipのインストール
$ sudo aptitude install unzip
Windows用ドライバからファームウェアを導入
$ cd /usr/local/src/ $ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip $ unzip PX-S1UD_driver_Ver.1.0.1.zip $ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
PX-S1UDの接続確認
$ lsusb |grep VidzMedia Bus 002 Device 002: ID 3275:0080 VidzMedia Pte Ltd
ドライバモジュールのロード
$ sudo modprobe smsusb
デバイスの確認
$ ls /dev/dvb/ adapter0
ドライバモジュールを自動で読み込ませる
$ sudo sh -c "echo smsusb >> /etc/modules"
DVBデバイスとして認識されるので他のDVBデバイス同様に扱える。FUSE_b25を使えばMythTVでも使える。
参考:
takaaki 3月 21st, 2014
Posted In: ハードウェア
タグ: Debian, DVB, fuse_b25, LAN, Linux, MythTV, PT3, PX-S1UD, TV, Windows
DVB版ドライバがないPT3ではMythTVは使えなかった。最近DVB版PT3ドライバが公開されたので、導入してみる。環境はいつも通りDebianの安定版(wheezy)。
Debian(wheezy)に導入されているカーネル3.2ではビルドできないので、新しいカーネルを導入しておく。3.5でビルドできないことと3.8以降でビルドできることを確認している。新しいカーネルはbackportsリポジトリを使うと簡単に導入できる。
使われているカーネルを確認
$ uname -r 3.2.0-4-amd64
Backportsリポジトリを追加
$ sudo sh -c "echo 'deb http://ftp.debian.org/debian/ wheezy-backports main' > /etc/apt/sources.list.d/wheezy-backports.list" $ sudo aptitude update
カーネルのインストール
$ sudo aptitude -t wheezy-backports install linux-image-3.10-0.bpo.3-amd64
カーネルを入れ替えるために再起動
$ sudo reboot
カーネルを確認
$ uname -r 3.10-0.bpo.3-amd64
PT3ドライバのビルドに必要なV4L-DVBドライバを導入する。ビルドには少し時間がかかる。
必要なパッケージのインストール
$ sudo aptitude install build-essential patchutils libproc-processtable-perl l linux-headers-3.10-0.bpo.3-amd64
ビルド
$ cd /usr/local/src/ $ git clone git://linuxtv.org/media_build.git $ cd media_build $ ./build
インストール
$ sudo make install $ sudo make kernel-links #ヘッダーのインストール
事前準備は済んだのでドライバをインストールする。
ソースの取得
$ cd /usr/local/src/ $ git clone https://github.com/knight-rider/ptx.git $ cd ptx/pt3_dvb/
V4L-DVBからModule.symversをコピー
$ cp /usr/local/src/media_build/v4l/Module.symvers .
ビルド
$ make
インストール
$ sudo make install
ドライバモジュールのロード
$ sudo modprobe pt3_dvb
デバイスファイルの確認
$ ls /dev/dvb/ adapter0 adapter1 adapter2 adapter3
PT2のDVB版ドライバと同じように使えるが、デバイス番号が異なる。0,1が衛星波、2,3が地上波と、順番はChardev版と同じになる。
tuneコマンドやs2scanが付属しているのでビルドする。
tune.cのDTV_STREAM_IDをDTV_ISDBS_TS_IDに書き換える
$ vi tune.c $ git diff tune.c diff --git a/dvb_apps/cmds/tune.c b/dvb_apps/cmds/tune.c index 20178d0..a45ee08 100644 --- a/dvb_apps/cmds/tune.c +++ b/dvb_apps/cmds/tune.c @@ -100,7 +100,7 @@ static int search(int adapter_nr, int channel_id) prop[0].cmd = DTV_FREQUENCY; prop[0].u.data = channel->frequency; - prop[1].cmd = DTV_STREAM_ID; + prop[1].cmd = DTV_ISDBS_TS_ID; prop[1].u.data = channel->ts_id; prop[2].cmd = DTV_TUNE;
ビルド
$ make $ find . -perm +111 . ./restamp ./nitdump ./ptsdump ./tune ./dumpts ./dumpeid ./s2scan ./dumpts2
コマンドが生成される。コマンドの使い方やDVB版の使い方は以前の記事を参照。
予約機能が良くても、BSに対応できないとMythTVは導入できない。
PT3といえば、chardev版PT3の導入記事に/etc/modprobe.d/blacklist.confにearth-pt1を追加するように書いてあるのが気になる。earth-pt1はPT3には対応していないので、PT1/2を導入していない環境では効果が無い。
参考:
takaaki 11月 24th, 2013
Posted In: ハードウェア
一人暮らしを始める際にPT3を導入した。そのままではカーネル更新時にドライバが使えなくなってしまうのでPT3にもDKMSを導入してみた。dkms.confがソースに導入されているので、思いの外簡単に設定できた。環境はDebian(Wheezy)
DKMSのインストール
$ sudo aptitude install dkms
/usr/src/以下にPT3ドライバのソースを取得
$ cd /usr/src/ $ sudo git clone git://github.com/m-tsudo/pt3.git pt3_drv-0.0.1 Cloning into 'pt3_drv-0.0.1'... remote: Counting objects: 541, done. remote: Compressing objects: 100% (150/150), done. remote: Total 541 (delta 390), reused 535 (delta 384) Receiving objects: 100% (541/541), 133.67 KiB | 136 KiB/s, done. Resolving deltas: 100% (390/390), done.
dkms.confに書かれているPACKAGE_NAMEとPACKAGE_VERSIONの通りにパスやコマンドを指定する。
DKMSにPT3ドライバのソースを追加
$ sudo dkms add -m pt3_drv -v 0.0.1 Creating symlink /var/lib/dkms/pt3_drv/0.0.1/source -> /usr/src/pt3_drv-0.0.1 DKMS: add completed.
自動インストールの動作を確認(build,install未実行時)
$ sudo /usr/lib/dkms/dkms_autoinstaller start [....] dkms: running auto installation service for kernel 3.2.0-4-amd64: Kernel preparation unnecessary for this kernel. Skipping... Building module: cleaning build area.... make KERNELRELEASE=3.2.0-4-amd64 KVER=3.2.0-4-amd64..... cleaning build area.... DKMS: build completed. pt3_drv.ko: Running module version sanity check. - Original module - Installation - Installing to /lib/modules/3.2.0-4-amd64/updates/dkms/ depmod.... DKMS: install completed. . ok
ここまでで、導入は完了。手動で実行する場合や削除する場合は下記のコマンドを使う。
ドライバモジュールのビルド
$ sudo dkms build -m pt3_drv -v 0.0.1 Kernel preparation unnecessary for this kernel. Skipping... Building module: cleaning build area.... make KERNELRELEASE=3.2.0-4-amd64 KVER=3.2.0-4-amd64..... cleaning build area.... DKMS: build completed.
ドライバモジュールのインストール
$ sudo dkms install -m pt3_drv -v 0.0.1 pt3_drv: Running module version sanity check. - Original module - Installation - Installing to /lib/modules/3.2.0-4-amd64/updates/dkms/ depmod.... DKMS: install completed.
ドライバモジュールのアンインストール(動かない?)
$ sudo dkms uninstall -m pt3_drv -v 0.0.1
ソースパッケージの登録削除
$ sudo dkms remove -m pt3_drv -v 0.0.1 --all -------- Uninstall Beginning -------- Module: pt3_drv Version: 0.0.1 Kernel: 3.2.0-4-amd64 (x86_64) ------------------------------------- Status: Before uninstall, this module version was ACTIVE on this kernel. pt3_drv.ko: - Uninstallation - Deleting from: /lib/modules/3.2.0-4-amd64/updates/dkms/ - Original module - No original module was found for this module on this kernel. - Use the dkms install command to reinstall any previous module version. depmod.... DKMS: uninstall completed. ------------------------------ Deleting module version: 0.0.1 completely from the DKMS tree. ------------------------------ Done.
takaaki 7月 31st, 2013
PT1/PT2のDVBとMythTV @WikiでMythTV 0.26のISDB対応パッチ(仮)が公開されていたので試してみた。
必要なパッチを作り直して、パッケージのビルドからインストールまでを行なった。結果はパッケージの依存関係の問題で失敗。実際に行なった手順と作成したパッチを公開。
2013/1/6 1:27追記:BS対応パッチの圧縮に失敗していたので再アップロード。
2013/1/10追記:カテゴリ日本語化パッチに文字化けの報告があるので修正。
$ apt-get source mythtv パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 47.4 MB のソースアーカイブを取得する必要があります。 取得:1 http://www.deb-multimedia.org/ sid/main mythtv-dmo 0.26.0+fixes20130104-dmo1 (dsc) [3,439 B] 取得:2 http://www.deb-multimedia.org/ sid/main mythtv-dmo 0.26.0+fixes20130104-dmo1 (tar) [47.3 MB] 取得:3 http://www.deb-multimedia.org/ sid/main mythtv-dmo 0.26.0+fixes20130104-dmo1 (diff) [72.3 kB] 47.4 MB を 33秒 で取得しました (1,426 kB/s) dpkg-source: info: extracting mythtv-dmo in mythtv-dmo-0.26.0+fixes20130104 dpkg-source: info: unpacking mythtv-dmo_0.26.0+fixes20130104.orig.tar.gz dpkg-source: info: applying mythtv-dmo_0.26.0+fixes20130104-dmo1.diff.gz dpkg-source: info: upstream files that have been modified: mythtv-dmo-0.26.0+fixes20130104/external/zeromq/configure
$ cd mythtv-dmo-0.26.0+fixes20130104/ $ patch -p1 < ../isdb-mythtv_0.26.0-20130101.patch patching file libs/libmythtv/channelscan/channelscan_sm.cpp patching file libs/libmythtv/channelscan/frequencytablesetting.cpp patching file libs/libmythtv/eithelper.cpp patching file libs/libmythtv/frequencytables.cpp patching file libs/libmythtv/libmythtv.pro patching file libs/libmythtv/mpeg/dishdescriptors.cpp patching file libs/libmythtv/mpeg/dishdescriptors.h patching file libs/libmythtv/mpeg/dvbdescriptors.cpp patching file libs/libmythtv/mpeg/dvbdescriptors.h patching file libs/libmythtv/mpeg/dvbstreamdata.cpp patching file libs/libmythtv/mpeg/dvbstreamdata.h patching file libs/libmythtv/mpeg/dvbtables.cpp patching file libs/libmythtv/mpeg/dvbtables.h patching file libs/libmythtv/mpeg/isdb_decode_text.c patching file libs/libmythtv/mpeg/isdb_decode_text.h patching file libs/libmythtv/mpeg/mpegdescriptors.cpp patching file libs/libmythtv/mpeg/mpegdescriptors.h patching file libs/libmythtv/mpeg/scanstreamdata.cpp patching file libs/libmythtv/mpeg/scanstreamdata.h patching file libs/libmythtv/mpeg/sctedescriptors.h patching file libs/libmythtv/tv_rec.cpp patching file libs/libmythtv/tv_rec.h $ patch -p1 < ../mythtv_0.26.0-bs-lnb.patch patching file libs/libmythtv/dtvmultiplex.cpp patching file libs/libmythtv/dtvmultiplex.h patching file libs/libmythtv/dvbchannel.cpp $ patch -p0 < ../mythtv_0.26.0-japanese-cat.patch patching file libs/libmythtv/mpeg/dvbdescriptors.cpp $ patch -p0 < ../mythtv_0.26.0-subtitle.patch patching file libs/libmythtv/eithelper.cpp $ patch -p0 < ../mythtv_0.26.0-tuning.patch patching file libs/libmythtv/dvbstreamhandler.cpp
$ sudo aptitude install -t squeeze-backports debhelper #バージョンが古くてビルドできないのでアップグレード $ sudo aptitude install uuid-dev libvpx-dev
$ dch -i #バージョンなどを修正 $ debuild -us -uc -d
$ sudo dpkg -i ../*.deb $ sudo aptitude -f install
ビルドまでうまくできたが、パッケージの依存関係が崩れてしまったので失敗。wheezyがリリースされたらまた試そうと思う。
ビルドはできたが、インストールがうまくいかなかったので、全て未検証。
各パッチは以前の記事に準ずる。
mythtv_0.26.0-japanese-cat.patch
mythtv_0.26.0-japanese-cat.patch
Qtのバージョンが変わって、実際に動くか不明。
パッチがそのまま当たったので簡単に修正。
前回作成したパッチを元に作成。
修正されている可能性もあるが、念のため作成。
takaaki 1月 5th, 2013
Posted In: ソフトウェア
MythTVがActive EIT Scanで非契約チャンネルに切り替えると、エラーと認識して動作しなくなってしまう。MythTVに無料番組だけ見るチャンネルを登録していると厄介だ。
syslog
Bad ret code[0x8902] in a ECM response. Card I/O failed too many times.
FUSE_b25はエラーカウントが一定数(5)溜まると動作しなくなる仕様になっている。ECMのリターンコードがエラーでもエラーカウントを上げてしまう。そこで、ECMが非契約のリターンコードを返してもエラーカウントを上げないようにする。
非契約のリターンコード(地上デジタルテレビジョン放送運用規定(TR-B14) 第3分冊より)
非契約 (Kwなし) | A103 |
非契約 (契約外) | 8901,8501,8301 |
非契約 (期限切れ) | 8902,8502,8302 |
非契約 (視聴制限) | 8903,8503,8303 |
bcas.cを変更して、非契約でもエラーカウントを上げないようにする。すべてのリターンコードをエラーに勘定しない場合は409行目を"goto through;"にして、399~406行を削除すればいい。
$ vi fuse_b25-0.4.8/src/bcas.c 394 retcode = rbuf[4] << 8 | rbuf[5]; 395 if (retcode != CARD_RETCODE_GD_TIER && 396 retcode != CARD_RETCODE_GD_PREPPV && 397 retcode != CARD_RETCODE_GD_POSTPPV && 398 retcode != CARD_RETCODE_PV_PREPPV && retcode != CARD_RETCODE_PV_POSTPPV) { 399 if (retcode == 0xa103 || 400 (retcode >= 0x8901 && retcode <= 0x8903) || 401 (retcode >= 0x8501 && retcode <= 0x8503) || 402 (retcode >= 0x8301 && retcode <= 0x8303)) { 403 syslog (LOG_NOTICE, 404 "Ret code[0x%04x] in a ECM response.\n", retcode); 405 goto through; 406 } 407 syslog (LOG_NOTICE, 408 "Bad ret code[0x%04x] in a ECM response.\n", retcode); 409 goto failed; 410 } 441 442 through: 443 pthread_mutex_lock (&card->lock); 444 kinfo->status = CMD_S_FAILED; 445 pthread_mutex_unlock (&card->lock); 446 return; 447 }
パッチ
*** bcas.c.orig 2011-05-19 01:22:28.000000000 +0900 --- bcas.c 2012-08-04 17:21:55.558189838 +0900 *************** *** 396,401 **** --- 396,409 ---- retcode != CARD_RETCODE_GD_PREPPV && retcode != CARD_RETCODE_GD_POSTPPV && retcode != CARD_RETCODE_PV_PREPPV && retcode != CARD_RETCODE_PV_POSTPPV) { + if (retcode == 0xa103 || + (retcode >= 0x8901 && retcode <= 0x8903) || + (retcode >= 0x8501 && retcode <= 0x8503) || + (retcode >= 0x8301 && retcode <= 0x8303)) { + syslog (LOG_NOTICE, + "Ret code[0x%04x] in a ECM response.\n", retcode); + goto through; + } syslog (LOG_NOTICE, "Bad ret code[0x%04x] in a ECM response.\n", retcode); goto failed; *************** *** 430,435 **** --- 438,449 ---- } pthread_mutex_unlock (&card->lock); return; + + through: + pthread_mutex_lock (&card->lock); + kinfo->status = CMD_S_FAILED; + pthread_mutex_unlock (&card->lock); + return; }
パッチの当て方
$ patch fuse_b25-0.4.8/src/bcas.c < bcas_mythtv-patch/bcas_uncontracted.patch
ビルド・インストール
$ cd fuse_b25-0.4.8/ $ ./configure $ make $ sudo make install
takaaki 8月 4th, 2012
Posted In: ソフトウェア
アンテナを110度CS対応にしたので、試用期間の残っているB-CASカードを使って検証してみた。MythTVにはBS対応パッチを当ててある。
アンテナを変える前はBSのほとんどのチャンネルが受信できたが、周波数の高いDlifeなどは受信できなかった。しかし、新しいアンテナに交換してもDlifeとCSの受信状態が悪く、CSの信号レベルが低かった。別の部屋のテレビは正常に受信できていたので、古いケーブルを交換してみると改善した。
チャンネル登録スクリプトでチャンネルを登録して、視聴してみる。BSはすべてのチャンネルが正常に視聴することができた。しかし、チャンネルがCSに変わると極端に精度が落ちた。ほとんどが受信状態が悪いチャンネルで全く見れないチャンネルも多かった。正常に視聴できるチャンネルは一握り。
見れないチャンネルから特徴を探ってみるが、特定の周波数でもない。チューニング情報にも誤りはない。mythtvには原因がわかるログが見つからなかったが、syslogには大量のエラーが表示されていた。
failed to poll. errno:0. poll received an error on the fd for pid:0x0701
MythTVに原因がないか切り分けるためにtuneコマンドとcatで録画する。確認したところ、MythTVでの視聴と大差ない。TvtPlayで確認していて、そこでサービスがいくつもあるのに気がついた。BSはTSIDでチャンネルを分けているのに対して、CSはserviceidでチャンネルを分けている(一つのチャンネルにサービスがいくつもある)。
CS放送は一つの周波数にいくつもサービスが載っていてその数も多い。FUSE_b25はそのすべてをデコードしようとするので、処理し切れない可能性が出てくる。だとすると、FUSE_b25ではCSを見れないことになる。見れないのは自分の環境だけかもしれないが、見れないという情報がいくつかある。
FUSE_b25の仕組みからしてどうにもならない。MythTV+DVBでのCS録画はMythTVにb25デコード機能を付けない限り難しいだろう。無料放送だけを見るので個人的な影響は小さいだろうが。
takaaki 7月 18th, 2012
Posted In: ソフトウェア
MythTVでBSのチューニングをできるようにするパッチを更新したので、使い方もまとめる。
ファイルの内容は次の通り
0Byteの時にログを確認すると次のようなメッセージがあり、全く別のチャンネルのtsidとPATが出力されていた。
Program #211 not found in PAT!
チューニングが失敗しているか間に合っていないようなので、s2scanに習ってチューニング前にウェイトを挿入するようにした。
mythtvのソースに次のように当てる
$ cd mythtv-0.24.1 $ patch -p1 < ../mythtv-bs-lnb.patch patching file libs/libmythtv/dtvmultiplex.h patching file libs/libmythtv/dtvmultiplex.cpp patching file libs/libmythtv/dvbchannel.cpp
通常はmythtv-bs-lnb.patchで問題ないがCATVやブースターなどを使っている場合はmythtv-bs-nolnb.patchを当てる。
対応しているMythTVのバージョンは0.24系
MythTVのチャンネルスキャンには対応しないのでスクリプトを使ってデータベースに直接入力する。
channel_add.shの最初の変数を環境に合わせて書き換える。
#!/bin/sh DBUSER="mythtv" DBPASSWORD="password" DATABASE="mythconverg"
$ channel_add.sh Usage: channel_add.sh frequency netid tsid pid source chan_num { airguide { chan_name } }
sourceidは衛星側のビデオソースのもの、chan_numは好みのチャンネル番号を指定する。frequencyはs2scanの結果から、それ以外はTVTestに付いてくるPreset_BS.ch2、Preset_CS.ch2をCSVとして開いて見るとわかりやすい。Preset_BS.ch2(Preset_CS.ch2)のネットワークIDがnetid、TSIDがtsid、サービス IDがpidにあたる。netidはBSが4、CS1ネットワークが6、CS2ネットワークが7となる。sourceidは衛星側のビデオソースのもの、chan_numは好みのチャンネル番号を指定する。airguideに1を指定すると番組表のスキャンが有効になる(0で無効)。chan_nameにはチャンネル名が指定できる。
takaaki 7月 18th, 2012
Posted In: ソフトウェア
ソースのダウンロード
$ apt-get source mythtv
パッチを当ててみる
$ cd mythtv-0.25/ $ patch -p1 < ../mythtv-isdb.patch patching file libs/libmythtv/channelscan/channelscan_sm.cpp Hunk #1 FAILED at 176. 1 out of 2 hunks FAILED -- saving rejects to file libs/libmythtv/channelscan/channelscan_sm.cpp.rej patching file libs/libmythtv/channelscan/frequencytablesetting.cpp Hunk #1 succeeded at 73 (offset 1 line). patching file libs/libmythtv/eithelper.cpp Hunk #1 succeeded at 217 (offset -5 lines). Hunk #2 succeeded at 246 (offset -5 lines). Hunk #3 succeeded at 260 (offset -5 lines). Hunk #4 succeeded at 272 (offset -5 lines). Hunk #5 succeeded at 317 (offset -5 lines). Hunk #6 succeeded at 364 (offset -1 lines). Hunk #7 succeeded at 452 (offset 4 lines). Hunk #8 succeeded at 515 (offset 4 lines). Hunk #9 succeeded at 524 (offset 4 lines). patching file libs/libmythtv/frequencytables.cpp Hunk #1 succeeded at 465 (offset 21 lines). patching file libs/libmythtv/libmythtv.pro Hunk #1 succeeded at 231 (offset 12 lines). Hunk #2 succeeded at 247 (offset 14 lines). patching file libs/libmythtv/mpeg/dvbdescriptors.cpp Hunk #2 FAILED at 69. Hunk #3 succeeded at 155 (offset 4 lines). Hunk #4 FAILED at 161. Hunk #5 FAILED at 192. Hunk #6 succeeded at 226 (offset 6 lines). Hunk #7 succeeded at 283 (offset 45 lines). Hunk #8 succeeded at 309 (offset 37 lines). 3 out of 8 hunks FAILED -- saving rejects to file libs/libmythtv/mpeg/dvbdescriptors.cpp.rej patching file libs/libmythtv/mpeg/dvbdescriptors.h Hunk #1 succeeded at 9 with fuzz 1 (offset -6 lines). Hunk #2 succeeded at 36 (offset -6 lines). Hunk #3 FAILED at 99. Hunk #4 FAILED at 252. Hunk #5 FAILED at 561. Hunk #6 FAILED at 594. Hunk #7 FAILED at 1023. Hunk #8 succeeded at 1105 (offset 49 lines). Hunk #9 FAILED at 1448. Hunk #10 FAILED at 1565. 7 out of 10 hunks FAILED -- saving rejects to file libs/libmythtv/mpeg/dvbdescriptors.h.rej patching file libs/libmythtv/mpeg/dvbstreamdata.cpp patching file libs/libmythtv/mpeg/dvbstreamdata.h Hunk #1 succeeded at 25 (offset 1 line). Hunk #2 succeeded at 213 (offset 1 line). patching file libs/libmythtv/mpeg/dvbtables.cpp patching file libs/libmythtv/mpeg/dvbtables.h Hunk #1 FAILED at 8. Hunk #2 FAILED at 93. Hunk #3 FAILED at 277. Hunk #4 succeeded at 326 (offset 2 lines). Hunk #5 FAILED at 365. Hunk #6 succeeded at 386 (offset 2 lines). 4 out of 6 hunks FAILED -- saving rejects to file libs/libmythtv/mpeg/dvbtables.h.rej patching file libs/libmythtv/mpeg/isdb_decode_text.c patching file libs/libmythtv/mpeg/isdb_decode_text.h patching file libs/libmythtv/mpeg/mpegdescriptors.cpp Hunk #1 FAILED at 1. Hunk #2 FAILED at 78. Hunk #3 FAILED at 422. Hunk #4 FAILED at 440. 4 out of 4 hunks FAILED -- saving rejects to file libs/libmythtv/mpeg/mpegdescriptors.cpp.rej patching file libs/libmythtv/mpeg/mpegdescriptors.h Hunk #1 succeeded at 197 (offset 44 lines). Hunk #2 FAILED at 180. 1 out of 2 hunks FAILED -- saving rejects to file libs/libmythtv/mpeg/mpegdescriptors.h.rej patching file libs/libmythtv/mpeg/scanstreamdata.cpp Hunk #1 FAILED at 4. 1 out of 1 hunk FAILED -- saving rejects to file libs/libmythtv/mpeg/scanstreamdata.cpp.rej patching file libs/libmythtv/mpeg/scanstreamdata.h Hunk #1 FAILED at 12. 1 out of 1 hunk FAILED -- saving rejects to file libs/libmythtv/mpeg/scanstreamdata.h.rej patching file libs/libmythtv/tv_rec.cpp Hunk #1 succeeded at 1819 (offset -202 lines). $ patch -p0 <../mythtv-japanese-cat.patch patching file libs/libmythtv/mpeg/dvbdescriptors.cpp Hunk #1 succeeded at 317 (offset -108 lines). $ patch -p0 < ../mythtv-subtitle.patch patching file libs/libmythtv/eithelper.cpp Hunk #1 succeeded at 246 (offset -5 lines). $ patch -p1 < ../mythtv-bs.patch patching file libs/libmythtv/dtvmultiplex.cpp Hunk #1 succeeded at 336 (offset 32 lines). Hunk #2 FAILED at 327. 1 out of 2 hunks FAILED -- saving rejects to file libs/libmythtv/dtvmultiplex.cpp.rej patching file libs/libmythtv/dtvmultiplex.h patching file libs/libmythtv/dvbchannel.cpp Hunk #1 succeeded at 267 (offset 29 lines). Hunk #2 FAILED at 754. Hunk #3 FAILED at 882. 2 out of 3 hunks FAILED -- saving rejects to file libs/libmythtv/dvbchannel.cpp.rej $ patch -p2 < ../mythtv-tuning.patch patching file libs/libmythtv/dvbstreamhandler.cpp Hunk #1 FAILED at 282. 1 out of 1 hunk FAILED -- saving rejects to file libs/libmythtv/dvbstreamhandler.cpp.rej
パッチを何も考えずに当ててもほぼ全滅。成功しているのは単体ではあまり意味のない部分のみ。
ISDB対応版の0.25が出るまで様子を見る他ない。
Debian-Multimediaのmythtv-0.24.2は次の方法で入手できる。
$ wget ftp://ftp.debian-multimedia.org/pool/main/m/mythtv/{mythtv_0.24.2-0.0squeeze1.dsc,mythtv_0.24.2.orig.tar.gz,mythtv_0.24.2-0.0squeeze1.diff.gz} $ dpkg-source -x mythtv_0.24.2-0.0squeeze1.dsc
このソースはいつまでダウンロードできるんだろう。
takaaki 5月 19th, 2012
Posted In: ソフトウェア