これは、所謂 TS 抜きを Linux で行うソフトウェアです。
作成にあたって、以下のソフトウェアを利用・参照させて頂きました。 ありがとうございます。
- デジ太郎氏の cap_sts 2008_03_18 版
- TeamKNOx氏の arib_std_b25 改造版
- 茂木 和洋氏の ARIB STD-B25 仕様確認テストプログラムソースコード
- ◆N/E9PqspSk氏の Linux関係詰め合せ (up0281.zip)
- python >= 2.3
- glib 2.14
- libusb-1.0 >= 1.0.0
- libpcsclite
tsniff を入手します:
$ hg clone http://atty.skr.jp/hg/tsniff
依存ライブラリをインストールします:
$ sudo aptitude install libglib2.0-dev libpcsclite-dev
libusb-1.0 を入手し、インストールします:
$ http://www.libusb.org/wiki/Libusb1.0 $ git clone git://projects.reactivated.net/~dsd/libusb.git libusb-1.0 $ cd libusb-1.0 $ git checkout 885c2a5de69d6b7d8902bb55d6d83680a5a1a6e5 $ ./autogen.sh $ ./configure $ make $ sudo make install $ cd ..
arib_std_b25-atty を入手し、tsniff のソースツリーに配置します:
$ hg clone http://atty.skr.jp/hg/arib_std_b25-atty tsniff/extra/arib_std_b25
tsniff をビルド・インストールします:
$ cd tsniff $ ./waf configure $ ./waf $ sudo ./waf install
MacPorts 等を利用して glib2 をインストールしてください。
libusb-1.0 と libpcsclite に依存する機能は利用できないため、 保存済みの生 TS と B-CAS データに B25 デコードを掛けるぐらいしかできません。
Ubuntu 7.10 の場合
/etc/udev/rules.d/49-recfx2.rules:
# Friio (White) SUBSYSTEM=="usb", ATTRS{idVendor}=="7a69", ATTRS{idProduct}=="0001", GROUP="video" # Chameleon USB FX2 SUBSYSTEM=="usb_device", ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="8613", GROUP="video" SUBSYSTEM=="usb_device", ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="1004", GROUP="video"
FILENAME には標準入力または標準出力として、 -
を指定することが可能です。
-T, --ts-input=SOURCE | |
TS 入力を SOURCE に設定します。SOURCE は以下の値を取ります。 省略時のデフォルトは fx2: です。
| |
-B, --bcas-input SOURCE | |
B-CAS データ入力を SOURCE に設定します。SOURCE は以下の値を取ります。 省略時のデフォルトは fx2: です。
| |
-t, --ts-output=FILENAME | |
未加工 TS を FILENAME へ出力します。 | |
-b, --bcas-output=FILENAME | |
B-CAS を FILENAME へ出力します。 | |
-o, --b25-output=FILENAME | |
ARIB STD-B25 デコーダを有効にし、デコード済み TS を FILENAME へ出力します。 |
入力が CUSBFX2 の場合のみ有効です。
--ir-base | リモコンの制御チャンネルを 1〜3 で指定します。 チューナー本体の設定に合わせてください。 |
-s, --ir-source | |
| |
-c, --ir-channel | |
チャンネルを変更します。1〜12 でリモコンのボタンによるチャンネル指定となります。
--ir-source が BS または CS かつ 3 桁指定すると、 3 桁入力によりチャンネル変更します。 |
--fx2-id=N | 使用する CUSBFX2 の ID を指定します。デフォルトは 0 です。 |
--fx2-force-load | |
強制的にファームウェアをロードします。 | |
--fx2-ts-buffer-size=N | |
TS 転送バッファのサイズを N バイトに変更します。デフォルトは 16384 です。 | |
--fx2-ts-buffer-count=N | |
TS 転送の同時リクエスト数を N に変更します。デフォルトは 16 です。 |
--b25-round=N | MULTI2 暗号のラウンド数を N に変更します。デフォルトは 4 です。 |
-S, --b25-strip | |
--b25-output に NULL パケットを保存しません。デフォルトは保存します。 | |
--b25-ts-delay | 入力ソースが CUSBFX2 であるとき、TS 入力の遅延時間を N 秒に変更します。 デフォルトは 0.5 秒です。 |
--b25-bcas-queue-size | |
B-CAS データ入力が CUSBFX2 であるとき、履歴として保持する鍵の数を N に変更します。 デフォルトは 256 です。 | |
--b25-system-key=HEX | |
B25 デコードに必要となるシステム鍵を 32 バイト(64 文字)の 16 進文字列で指定します。
--bcas-input=pcsc: を指定している場合は必要ありません。 | |
--b25-init-cbc=HEX | |
B25 デコードに必要となる初期 CBC を 8 バイト(16 文字)の 16 進文字列で指定します。
--bcas-input=pcsc: を指定している場合は必要ありません。 |
-l, --length=N | 入力ソースが CUSBFX2 であるとき、N 秒後に自動終了します。 デフォルトはシグナルを受けるまで無限です。 |
--dump-bcas-init-status | |
B-CAS 初期データを tsniff.conf の形式で標準出力へ書き出します。 | |
--verify-bcas-stream | |
B-CAS データの検証のみを行います。 現在動きません。 | |
-v, --verbose | より詳細なメッセージを出力します。 |
-q, --quiet | 警告・エラー以外のメッセージ出力を抑制します。 |
CUSBFX2 から B25 デコード済みの TS を foo.ts へ出力
$ tsniff -o foo.ts Inputs | | Outputs ===============|=============|=========== CUSBFX2:TS --|--+ | | | | | +--> B25 --|--> foo.ts | | | CUSBFX2:BCAS --|--+ |
CUSBFX2 から生 TS を foo.ets へ、B-CAS データを foo.bcs へ出力
$ tsniff -T fx2: -B fx2: -t foo.ets -b foo.bcs Inputs | | Outputs ===============|=============|=========== CUSBFX2:TS --|-------------|--> foo.ets | | | B25 | | | CUSBFX2:BCAS --|-------------|--> foo.bcs
CUSBFX2 から生 TS を foo.ets へ、B-CAS データを foo.bcs へ、 B25 デコード済み TS から NULL パケットを削除しつつ foo.ts へ出力
$ tsniff -t foo.ets -b foo.bcs -o foo.ts -S Inputs | | Outputs ===============|=============|=========== CUSBFX2:TS --|--+----------|--> foo.ets | | | | +--> B25 --|--> foo.ts | | | CUSBFX2:BCAS --|--+----------|--> foo.bcs
CUSBFX2 から生 TS を foo.ets へ、B-CAS カードリーダーを利用して B25 デコード済み TS を foo.ts へ出力
$ tsniff -B pcsc: -t foo.ets -o foo.ts Inputs | | Outputs ===============|=============|=========== CUSBFX2:TS --|--+----------|--> foo.ets | | | | +--> B25 --|--> foo.ts | | | PCSC:BCAS --|--+ |
保存済みの生 TS foo.ets と B-CAS データ foo.bcs から、B25 デコード済み TS を foo.ts へ出力
$ tsniff -T foo.ets -B foo.bcs -o foo.ts Inputs | | Outputs ===============|=============|=========== foo.ets --|--+ | | | | | +--> B25 --|--> foo.ts | | | foo.bcs --|--+ |
保存済みの生 TS foo.ets から、B-CAS カードリーダーを利用して B25 デコード済み TS を foo.ts へ出力
$ tsniff -T foo.ets -B pcsc: -o foo.ts Inputs | | Outputs ===============|=============|=========== foo.ets --|--+ | | | | | +--> B25 --|--> foo.ts | | | PCSC:BCAS --|--+ |
意味なし
$ tsniff -t - -o foo.ts | tsniff -T - -B pcsc: -t foo.ets -o bar.ts Inputs | | Outputs || Inputs | | Outputs ===============|=============|=========== || ===============|=============|=========== CUSBFX2:TS --|--+----------|--> STDOUT -||-> STDIN:TS --|--+----------|--> foo.ets | | | || | | | | +--> B25 --|--> foo.ts || | +--> B25 --|--> bar.ts | | | || | | | CUSBFX2:BCAS --|--+ | || PCSC:BCAS --|--+ |
- $HOME/.config/tsniff.conf
- 設定ファイル
tsniff は shell script や MythTV などのフロントエンドに対して、 ハードウェア制御などの処理を行うバックエンドとして利用することを想定しています。 よって、 tsniff そのものに予約などの高度な機能を追加する予定は 全くありません 。
--b25-output
を指定し、かつ B-CAS データ入力に pcsc:
以外を使用する場合は、
B-CAS 初期データ(システム鍵・初期 CBC)を別途指定する必要があります。
これは、カードリーダがなければ B-CAS 初期データを取得できないことからくる制限事項です。
B-CAS 初期データは、オプションで指定するか、設定ファイルに書いておきます。
tsniff.conf:
[b25] system_key = 00112233445566778899AABBCCDDEEFF00112233445566778899aabbccddeeff init_cbc = 0011223344556677
なお、B-CAS 初期データは --dump-bcas-init-status
で取得できます。
$ tsniff --dump-bcas-init-status >$HOME/.config/tsniff.conf
そのまま設定ファイルとして利用するのが良いでしょう。
- HP ProLiant ML115 G5 (Athlon 1640B 2.7GHz / !GB)
- Ubuntu Linux 8.10 interpid (amd64)
- YAGI DTC110
- libusb: 1.0.3
- arib_std_b25-atty: 950a18bfa838
- http://d.hatena.ne.jp/atty/
- http://bitcucket.org/atty303/tsniff/
- http://atty.skr.jp/hg/arib_std_b25-atty/
- http://atty.skr.jp/hg/cap_sts-atty/
Koji Agawa <atty303@gmail.com>
- 終了ステータス (エラーの有無)
- ポータビリティの向上(libusb-1.0 任せ)
- VLC の input module にする
- mplayer の input module にする
- Friio対応
- TSの処理