環境を構築し直したので、まとめてみる。今回はUbuntu 16.04 LTSを使った。気が向いたらDebian 9(Stretch)でやる予定。

チューナーのセットアップ

PT3、PX-S1UD V2.0、PX-BCUD、KTV-FSMINIの4つをセットアップした。PT3はDVBドライバを使う。

PT3/PT2/PT1

カーネルにドライバが組み込まれているので、特に設定しなくても認識される。偶数がBS/CS、奇数が地上波と交互になる。

$ ls /dev/dvb/
adapter0  adapter1  adapter2  adapter3

アンテナに電源供給が必要な場合、chardev版ドライバを導入した方がいい。今回は取り上げない。

PX-S1UD (V2.0)

何もしなくても認識されるが、ファームウェアを入れないと動作しない。

$ ls /dev/dvb/
adapter0  adapter1  adapter2  adapter3  adapter4

ファームウェアをダウンロードして、インストールする。モジュールをロードし直すと有効になる。

$ 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 modprobe -r smsusb
$ sudo modprobe smsusb

adapterの番号を変更するには次のようにする。複数ある場合は「,」で区切る。認識できるadapterの数は8つまでなので、0~7の番号が指定できる(Linux 4.10以降は16個なので0~15)。

$ sudo modprobe -r smsdvb
$ sudo modprobe smsdvb adapter_nr=4

他のDVBデバイスと区別するため、起動時に番号を固定する。他にDVBデバイスがない場合は必要ない。

$ sudo sh -c 'echo "options smsdvb adapter_nr=4" > /etc/modprobe.d/smsdvb.conf'

PX-BCUD

LinuxカーネルにPX-BCUDのドライバが組み込まれるのは4.7以上で、標準のカーネル(4.4)ではドライバが組み込まれていない。HWEカーネルを導入する。

$ uname -r
4.4.0-83-generic
$ sudo apt install linux-generic-hwe-16.04
$ sudo reboot

$ uname -r
4.8.0-58-generic
$ ls /dev/dvb/
adapter0  adapter1  adapter2  adapter3  adapter4  adapter5

adapter番号の指定

$ sudo modprobe -r em28xx-dvb
$ sudo modprobe em28xx-dvb adapter_nr=5
$ sudo sh -c 'echo "options em28xx-dvb adapter_nr=5" > /etc/modprobe.d/em28xx_dvb.conf'

KTV-FSMINI(KTV-FSUSB2/V3)

KTV-FSMINIはドライバではなくコマンドを利用する。KTVWikiにあるrecfsusb2iをダウンロードして、ビルドする。

$ sudo apt install p7zip-full
$ 7z x recfsusb2i-20160220.7z -orecfsusb2i
$ cd recfsusb2i/src/
$ make
$ sudo install recfsusb2i /usr/local/bin/

dvb-toolsをインストール

DVBデバイスをチューニングするにはdvbv5-zapが必要になる。dvbv5-zapはdvb-toolsに含まれている。

$ sudo apt install dvb-tools

チューニングに必要な設定をダウンロード

$ sudo apt install git
$ cd /usr/local
$ sudo git clone https://github.com/Chinachu/dvbconf-for-isdb.git

ICカードリーダーをセットアップ

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

$ sudo apt install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools

動作確認

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

現行のLinuxで使えるチューナー

最後に現在も販売されているチューナーを挙げておく。

Chinachuのセットアップ

実行ユーザーの作成

Chinachuの実行ユーザー作成(既存のユーザーにする場合は不要)

$ sudo adduser chinachu

Chinachuの実行ユーザーをsudoグループに所属させる

$ sudo adduser chinachu sudo

Chinachuの実行ユーザーに切り替え

$ sudo -i -u chinachu

Mirakurunのインストール

Node.jsをインストール

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt install -y nodejs
$ sudo npm -g i npm@latest # NPMを更新する

PM2とMirakurunをインストール

$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe --production

arib-b25-stream-testをインストール

$ sudo npm install arib-b25-stream-test -g --unsafe

Mirakurunの設定

$ sudo mirakurun config server

Mirakurunのチューナー設定

$ sudo mirakurun config tuners

設定ファイルやadapterの番号を間違えないように気を付けて編集する

Mirakurunのチャンネル設定

$ sudo mirakurun config channels

BS/CSのチャンネルだけ登録する

チャンネルスキャンで地上波のチャンネルを設定する

$ sudo mirakurun restart
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"
$ sudo mirakurun restart

Chinachuのインストール

Chinachuのダウンロードとインストール

$ sudo apt install git
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu/
u$ ./chinachu installer
Chinachu Installer Menu:
[!] These are installed under all /home/chinachu/chinachu/...
[!] Recommend the Auto installation.
1) Auto (full)          3) Node.js Environment  5) ffmpeg
2) submodule            4) Node.js Modules
what do you install? > 1

設定

$ cp config.sample.json config.json
$ vi config.json

実行ユーザーを指定する

"uid": "chinachu",

別のマシンからアクセスされるIPアドレスを指定する

"wuiOpenHost": "192.168.60.10",

空の予約ルールを作成

$ echo [] > rules.json

動作チェック

$ ./chinachu service wui execute
^C
$ ./chinachu update

サービスを登録

$ sudo pm2 start processes.json
$ sudo pm2 save

以上でインストールは完了。

ドライバはなるべく標準ドライバで対応して手間を省いた。チャンネル設定はBS/CSの設定が決まっていて、地上波はチャンネルスキャンできるので手間取らなかった。以前に比べて簡単になったものの、まだ手間がかかるように思う。

参考

7月 19th, 2017

Posted In: ハードウェア

タグ: , , , , , , ,

2 Comments

PT1/PT2のDVBとMythTV @Wikiに置かれているパッチと修正版BSパッチをgithubにまとめてみた。パッチはgit-diffで作成した。Debian wheezyで軽く動作確認。

BS対応がたった1行移植し忘れてるだけとは思わなかった。これでGWに帰省したらOSのアップグレードができる。

4月 26th, 2014

Posted In: ソフトウェア

タグ: , , , ,

Leave a Comment

PX-S1UDをLinuxで使えるようにしたのでChinachuと組み合わせてみた。録画にはrecdvbを使う。

現在はこちらのドライバが安定している。

暗号化の解除

録画時にB25デコードをかける場合はlibarib25やFUSE_b25をインストールしておく。

recdvbのセットアップ

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のインストール

Chinachuwikiに従えば問題なくインストールできる。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

しばらく待つと番組表が作成される。

WUIに接続

ブラウザに"http://IPアドレス:10772/"と入力するとChinachuのWUIに接続できる。ここから予約や録画ファイルの視聴・管理が行える。ストリーミング再生を無変換以外で使うにはそれなりのスペックが必要。番組表からできるライブ視聴はエンコードが必要で信頼性がまだ低いので、予約録画して再生した方がいい。

エイリアス

他のユーザーでchinachuコマンドをそのまま使うのはまずそうなので、普段使っているユーザーで使えるようにエイリアスを追加。(次回ログインから有効)

$ echo "alias chinachu='sudo -u chinachu /home/chinachu/chinachu/chinachu'" >> ~/.bash_aliases

CLIコマンド

自動予約ルール確認

$ chinachu rules

予約済み番組の確認

$ chinachu reserves

録画中番組の確認

$ chinachu recording

録画済み番組の確認

$ chinachu reserves recorded 

Chinachuのアップデート

$ chinachu updater

番組表手動更新

$ chinachu update

番組表の作り直し

$ chinachu update -f

ロックファイルの削除

$ chinachu unlock

ファイル名のフォーマット

<date:日付フォーマット>
日時。dateformatが使われる。
<id>
番組ID
<type>
放送波の種類
<channel>
チャンネル番号
<channel-id>
チャンネルID
<channel-sid>
SID
<channel-name>
チャンネル名
<tuner>
チューナー名
<title>
タイトル
<fulltitle>
EPGで受信したタイトル
<subtitle>
サブタイトル
<episode>
話数
<category>
ジャンル

3月 23rd, 2014

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

タグ: , , , , , , , , , , ,

Leave a Comment

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

V4L-DVBドライバの導入

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 #ヘッダーのインストール

DVB版PT3ドライバをインストール

事前準備は済んだのでドライバをインストールする。

ソースの取得

$ 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との違い

PT2のDVB版ドライバと同じように使えるが、デバイス番号が異なる。0,1が衛星波、2,3が地上波と、順番はChardev版と同じになる。

DVBアプリのビルド

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を導入していない環境では効果が無い。

参考:

11月 24th, 2013

Posted In: ハードウェア

タグ: , , , , , , ,

Leave a Comment

PT1/PT2のDVBとMythTV @WikiでMythTV 0.26のISDB対応パッチ(仮)が公開されていたので試してみた。

必要なパッチを作り直して、パッケージのビルドからインストールまでを行なった。結果はパッケージの依存関係の問題で失敗。実際に行なった手順と作成したパッチを公開。

2013/1/6 1:27追記:BS対応パッチの圧縮に失敗していたので再アップロード。
2013/1/10追記:カテゴリ日本語化パッチに文字化けの報告があるので修正。

Debian squeezeに導入(失敗)

  1. ここに置いてあるisdb-mythtv_0.26.0-20130101.patchをダウンロード
  2. パッケージのソースをダウンロード
    $ 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
  3. パッチを当てる(ISDB以外のパッチは後述)
    $ 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
  4. 足りないパッケージをインストール
  5. $ sudo aptitude install -t squeeze-backports debhelper #バージョンが古くてビルドできないのでアップグレード
    $ sudo aptitude install uuid-dev libvpx-dev 
  6. パッケージのビルド
    $ dch -i #バージョンなどを修正
    $ debuild -us -uc -d
  7. パッケージのインストール
    $ sudo dpkg -i ../*.deb
    $ sudo aptitude -f install

ビルドまでうまくできたが、パッケージの依存関係が崩れてしまったので失敗。wheezyがリリースされたらまた試そうと思う。

MythTV 0.26.0に向けて作成したパッチ

ビルドはできたが、インストールがうまくいかなかったので、全て未検証。

各パッチは以前の記事に準ずる。

カテゴリ日本語化パッチ

mythtv_0.26.0-japanese-cat.patch

カテゴリ日本語化パッチ(修正版)

mythtv_0.26.0-japanese-cat.patch

Qtのバージョンが変わって、実際に動くか不明。

サブタイトルの切り直しパッチ

mythtv_0.26.0-subtitle.patch

パッチがそのまま当たったので簡単に修正。

BS対応パッチ

mythtv_0.26.0-bs.zip

前回作成したパッチを元に作成。

録画バグ修正パッチ

mythtv_0.26.0-tuning.patch

修正されている可能性もあるが、念のため作成。

1月 5th, 2013

Posted In: ソフトウェア

タグ: , , , , , , ,

4 Comments

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

8月 4th, 2012

Posted In: ソフトウェア

タグ: , , , , , ,

Leave a Comment

アンテナを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でチャンネルを分けている(一つのチャンネルにサービスがいくつもある)。

FUSE_b25でCSは見れない?

CS放送は一つの周波数にいくつもサービスが載っていてその数も多い。FUSE_b25はそのすべてをデコードしようとするので、処理し切れない可能性が出てくる。だとすると、FUSE_b25ではCSを見れないことになる。見れないのは自分の環境だけかもしれないが、見れないという情報がいくつかある。

FUSE_b25の仕組みからしてどうにもならない。MythTV+DVBでのCS録画はMythTVにb25デコード機能を付けない限り難しいだろう。無料放送だけを見るので個人的な影響は小さいだろうが。

7月 18th, 2012

Posted In: ソフトウェア

タグ: , , , , , ,

Leave a Comment

MythTVでBSのチューニングをできるようにするパッチを更新したので、使い方もまとめる。

ダウンロード

mythtv-bs.zip

ファイルの内容は次の通り

  • mythtv-bs-lnb.patch BS対応パッチ(LNB電源ON)
  • mythtv-bs-nolnb.patch BS対応パッチ(LNB電源OFF)
  • channel_add.sh チャンネル登録スクリプト
  • example.txt 使用例

以前のものからの変更点

  • 安定化させる対策を行なっても0Byteで録画されない不具合の対応
  • コード整理
  • LNBON/OFFでパッチを分離
  • channel_add.shにuseonairguideとcallsign/nameの設定機能を追加
  • channel_add.shを4桁以上のチャンネル番号に対応させた

不具合について

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にはチャンネル名が指定できる。

ただし、CSに関しては受信できるか怪しい。

(さらに…)

7月 18th, 2012

Posted In: ソフトウェア

タグ: , , , , , , ,

Leave a Comment

ソースのダウンロード

$ 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

このソースはいつまでダウンロードできるんだろう。

5月 19th, 2012

Posted In: ソフトウェア

タグ: , , , , , ,

Leave a Comment

PT2+FUSE_b25+MythTVをDebianで使う上で録画失敗から対策したことを対策箇所ごとにまとめる。

録画マシンへの対策

エンコードなどマシンに負荷をかけすぎると録画中、fuse_b25がsyslogに“Driver Baffar Overflowed"というエラーを出して、以降の部分が録画されなくなる。

エンコードの際は、CPUコア(スレッド)の数より少ないスレッド数を指定する。

#2コア2スレッドの場合
$ ffmpeg -threads 1 [オプション]

更にfuse_b25の優先度は高くし、エンコードの優先度を低くしておく。

/etc/rc.local、fuse_b25のマウント部分

#マウント先の数字を元のデバイスよりいくつ大きくするか
OFFSET=10
for ADAPTER in 0 1 2 3
do
	NEW_ADAPTER=`expr $ADAPTER + $OFFSET`
	/usr/local/sbin/b25dir $NEW_ADAPTER
	nice --4 /usr/local/bin/fuse_b25 --target /dev/dvb/adapter$ADAPTER /dev/dvb/adapter$NEW_ADAPTER -o allow_other
done

ffmpegの優先度を下げる

$ nice -15 ffmpeg [オプション]

また、録画ディスクのI/Oに負荷をかけすぎても同様のことが起こるのでTsSplitterを使う場合は必ずWAITオプションを指定する。

$ wine TsSplitter.exe [オプション] -WAIT2,5

バックエンドへの対策

録画の開始時にMythTVのバックエンドが落ちることがある。PIDファイルが残るのでmythbackendのプロセスがなく、PIDファイルが残っていたら再起動させる。念のためfuse_b25の再マウントも行う。

$ sudo vi /usr/local/sbin/mythtv_check.sh

(さらに…)

4月 16th, 2012

Posted In: ソフトウェア

タグ: , , , , , , , ,

Leave a Comment

次ページへ »