Home

Awesome

BonDriverProxy_Linux

これは何?

BonDriverProxyをUnix系の環境での使用の為にpthreadで再実装した物と、Linux用のBonDriverです。 動作は主にUbuntu 14.04 + PT3(ドライバ:m-tsudo/pt3)で確認しています(※ドライバ使用の為、改変版pt1_ioctl.hをincludeしています)。 主な用途としては、WindowsのTVTestからLinuxの録画サーバのチューナを使用して視聴、と言う様な感じです。

また、現状Unix系の環境ではBonDriverと言うインタフェースを利用しているソフトは無いかもしれませんが、あって困る事は無いだろ、 て事でクライアント側も入れています。 録画ソフトや視聴ソフト側でBonDriverを扱える様にすれば、リアルタイム視聴と録画ソフトとでチャンネル変更の優先権を設定できるため、 録画ソフト側は、このチューナが視聴に使われてた場合は…的な、面倒な資源管理をやらなくても良くなって嬉しいかもしれません。 WindowsではほぼデファクトスタンダードになっているBonDriverインタフェースを提供する事で、Windows用に書いたコードの移植がやりやすくなるので、 Unix系の環境もWindows並に充実して行けばいいなと思います。

サーバ

ソースディレクトリで、

make server

でコンパイルできます。 Ex版の場合は、

make serverex

です。 Windows版でiniファイルだった物は、コマンドラインからの引数になりました。 引数無しで実行すると例が出ます。 なお、Ex版のBonDriverのグループ設定のみ、設定ファイルでの設定が必要です。 設定ファイルの名称と設置場所ルールは後述するクライアントモジュールと同じです。 グループ設定のフォーマットに関しては、Windows版を参照して下さい。

クライアントモジュール

サーバ側と同じく、ソースディレクトリで、

make client

でコンパイルできます。 設定ファイルは「モジュール名.conf」をモジュールと同じディレクトリに設置する形になります。 例えばモジュールが

/home/unknown/work/BonDriver_Proxy.so

だったとすると、

/home/unknown/work/BonDriver_Proxy.so.conf

となります。 使用方法や設定内容はWindows版BonDriverProxyと同じですが、行頭「;」の行はコメント行になります。

chardev版 / DVB版 BonDriver

ソースディレクトリで、

make driver

でコンパイルできます。 設定ファイルの名称と設置場所ルールは上記クライアントモジュールと同じで、行頭「;」の行がコメント行になるのも同じです。 デバイスの数だけモジュールをコピーして使用します。 必要な変更事項は、chardev版の場合は、

#DEVICE=/dev/pt3video0

のデバイスパスを、DVB版の場合は、

#ADAPTER_NO=0

のアダプタNoをモジュール毎に被らないように変更するのと、必要であれば、

#USELNB=0

の0を1にすればLNBへの給電がオンになります…と言うか、動作確認は出来てないので、そうなる様につくってるつもりですと言う事で…。
また、

#USESERVICEID=0

の0を1にすると、BonDriverとしての1チャンネルを1サービスに割り当てる事ができます。 いわゆるサービス指定したような感じのTSを出力するようになります。具体的に残しているのはPAT(対象サービスIDのみを含むように変更されます)、 PMT、CAT、NIT、SDT、EIT、TOT、SDTT、BIT、CDTの各PSI/SIと、ECM、EMM、それにもちろん指定したサービスの各PESとなっています。 なおSDTは変更しないので、こちらのモードで使用中にチャンネルスキャンをするとチャンネルが多数ダブって検索される事になる為、 正しいものを除いて無効化するようにして下さい。
またこちらのモードで使用する場合、同じトラポンに含まれる別サービスがBonDriverのチャンネルとして別チャンネル扱いになる為、BonDriverProxy経由で使用する場合、 通常モードでは可能な、2クライアントが1チューナを共有して、例えばそれぞれフジテレビONEとフジテレビNEXTを視聴する、と言うような事が出来なくなります。 代わりに、対象サービス以外のデータが流れなくなる為、ネットワークトラフィックが減るのと、(主にCS放送などで)取得したTSストリームをそのままデスクランブルに回した場合のCASカードの処理能力に余裕ができる事になるでしょう。
なお、必然的にチャンネルの設定がかなり変わるので、こちらのモード用の設定ファイルはBonDriver_(LinuxPT/DVB)_UseServiceID.confの方をテンプレとして使用するのが良いかと思います。

#USESERVICEIDを1で使用している場合、

#MODPMT=0

の0を1にすると、選択中のサービスのPMTが複数TSパケットにまたがっていた場合に、それらのパケットを微修正した上で、出力TSストリーム上で連続するように再配置するようになります。 これによる明確なメリットは特に無いとは思いますが、Windows 8 + テレ東問題が回避出来たりするので、特殊な地雷を踏まない為の保険的な意味合いで行っておいても損は無いかもしれません。

#DEL=

には、削除するPSI/SIの名称のリスト(有効な値はCAT, NIT, SDT, H-EIT, TOT, SDTT, BIT, M-EIT, L-EIT, CDT, ECM, EMM)を指定できます。また、EITを指定するとH-EIT, M-EIT, L-EITの3種を全て指定した場合と同じになります。 更に、TYPEDを指定するとISO/IEC 13818-6 type DのPIDストリーム(データ放送等で使用されています)が削除されます。DEL=CAT,EIT,SDTT,BIT,CDT,TYPEDの様に指定します。 なお、ECMを削除するとスクランブルが解除できなくなるので注意して下さい。
また、DVB版に関しては、

#TSSYNC=0

の0を1にすると、TSの同期処理を行うようになります。もしアダプタから読み出したTSデータが普通の188バイトTSでなかったり同期されていなかったりする場合、#USESERVICEID=1では正しく機能しませんが、 その様な場合にこれを有効にすると機能するようにできるハズです。もっとも、その様なアダプタが存在するかどうかは不明なので、保険の様なものです。
なお、chardev版に関しては、少なくともPT1,2/PT3では同期されたTSデータの出力がデバイスドライバで保証されている様なので、この機能は必要無いと判断しています。

PT3が一枚刺さっている環境で、/home/unknown/workにchardev版モジュールを#USESERVICEID=0で設置するとすると、

// /home/unknown/workの内容
// .soファイルはコンパイルして出来たモジュールのコピー
// .confファイルはBonDriver_LinuxPT.confをコピーして必要箇所のみ変更
--------------------------------------------------------------------------------
BonDriver_LinuxPT-S0.so
BonDriver_LinuxPT-S0.so.conf
BonDriver_LinuxPT-S1.so
BonDriver_LinuxPT-S1.so.conf
BonDriver_LinuxPT-T0.so
BonDriver_LinuxPT-T0.so.conf
BonDriver_LinuxPT-T1.so
BonDriver_LinuxPT-T1.so.conf
--------------------------------------------------------------------------------
.confファイルの#DEVICE=行はそれぞれ、
// BonDriver_LinuxPT-S0.so.conf
---
#DEVICE=/dev/pt3video0
---
// BonDriver_LinuxPT-S1.so.conf
---
#DEVICE=/dev/pt3video1
---
// BonDriver_LinuxPT-T0.so.conf
---
#DEVICE=/dev/pt3video2
---
// BonDriver_LinuxPT-T1.so.conf
---
#DEVICE=/dev/pt3video3
---

となります。それらより下は、説明がめんどくさいのでスルーです。 あんまりいじる必要は無いんじゃないかと思います。 詳しい方は、UHF(地デジ)に関しては、自分の地域の放送局の物理チャンネルを調べて不要箇所を削除すれば、チャンネルスキャンの時間をだいぶ減らせるかと思います(※不要箇所削除の際は、残した物のBonDriverとしてのチャンネル番号を0からの連番に採番しなおしてください)。 なお、もし編集する際は文字コードはUTF-8を使用してください。

サンプルツール

make sample
make util

でコンパイル出来ます。

デバッグビルド

makeするときに

BUILD=DEBUG

の環境変数を渡すことで、デバッグビルドが出来ます(例: BUILD=DEBUG make server

ライセンス

MITライセンスとします。 LICENSE参照。

Jun/18/2014 unknown unknown_@live.jp

更新履歴