スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Plex PX-W3PE 公式BonDriverについて

2011年02月07日 22:28

導入についての質問をコメントで頂いたので、公式BonDriver_W3PE(kumaさん版ではありません)とInterface_W3PE.dllについて、kumaさん版のソースを参考にしつつ調べてみました。

結論から言うと、Spinelのような1プロセスで同時に複数のBonDriverをロードするようなアプリケーションからは、おそらくまともに使用できないと思われます。
よって現状では公式版BonDriver_W3PEは非対応とさせて頂きます。

公式版BonDriver_W3PEが使えないのは何故ですか?

BonDriver_W3PEはInterface_W3PE.dllをロードし、そのインスタンスを生成してチューナの制御を行うわけですが、1つのInterface_W3PEインスタンスが同時に制御できるチューナは1個だけなのです。
さらにDLLのインスタンスというものは(同一のDLLファイル名である限り)1プロセスにつき1個しか生成できません。

BonDriver_W3PEを適当な名前にリネームして4個用意しても、そのBonDriverはInterface_W3PE.dllというファイル名のDLLしかロードしないため、4個のBonDriverは1個のInterface_W3PEインスタンスを共有する事になります。
1プロセスで4個のBonDriverを使って各々のチューナを同時制御しようとしても、どれか1つしかまともに動かない事になります。

EDCBやTVTest(RecTest)では問題無く使用できるのは何故ですか?

これらのアプリケーションは1プロセスにつき同時に1個のBonDriverしか使用しません。
複数チューナで録画したり視聴したりしたければその分だけ新規プロセスを起動する事によって対応するわけです。
プロセスを分ければその分だけInterface_W3PEインスタンスが生成されますから、上記の制限が障害になる事はありません。

ただしTVTestが(将来そのような機能追加があるかどうかは別にして)PinP等のマルチ画面同時視聴を実装するために、1プロセスで複数のBonDriverをロードしようとした時、この問題が大きな障害になると思われます。

似たような仕組みになっているBonDriver_PT-STは問題ないのかと思われるかもしれませんが、BonDriver_PT-STの場合はPTCtrl.exeのインスタンス1個だけで全てのPT1/2をコントロールできるように設計されています。
おそらくPlexの担当者はここまで考えてInterface_W3PE.dllを実装しなかったのだと思います。

BonDriver_W3PE_kumaだと問題無いのは何故ですか?

1プロセス内にDLLのインスタンスを複数生成するにはどうしたらいいかというと、単純にDLLをコピー&リネームして複数用意し、それらを個別にロードすればOKです。
勿論これ以外にも方法はありますが結構実装が大変だと思います。
余談ですがSpinelのBonDriverフォルダに、チューナの数だけBonDriverを用意しないといけないのはこのためです。
これに関してはまた機会があれば別に記事を書こうと思います。

さてkumaさん版(BonDriver_W3PE_kuma)は以下のようなアプローチで問題を回避しています。

  1. 操作したいPX-W3PEのチューナに付けられた一意な番号(以下チューナID)を取得します。
    具体的には0~7の値が得られ、これで2デバイス×4チューナ=8個のチューナを識別します。
  2. 文字列 Interface_W3PE にチューナIDを追加し、さらに文字列 .dll を追加したファイル名のDLLを探してロードします。
    つまりチューナID=0を担当するBonDriverはInterface_W3PE0.dllをロードし、チューナID=2を担当するBonDriverはInterface_W3PE2.dllをロードするわけです。
これで1プロセス内に複数のInterface_W3PEインスタンスが生成される事になります。
さらに各BonDriverのインスタンスには、それぞれ異なるInterface_W3PEインスタンスが1:1に対応付けられています。
それぞれ対応したInterface_W3PEインスタンスを個別に操作する事によって、1プロセスでもチューナを同時に制御する事が可能になります。

なんとかして公式版を使うにはどうすればよいですか?

要するに各々のBonDriverが同一ファイル名のDLLをロードしないようにすればいいわけです。
つまりロードするファイル名をどうにかして変えてしまえばOKです。
ロードするDLLファイル名を変えるにはどうすればいいかというと、BonDriver内に書かれている文字列をバイナリエディタで書き換えてやるのが手っ取り早い手です。

例えば"Interface_W3PE.dll"となっているところを、"Interfac0_W3PE.dll"等に書き換えてやります。
そしてオリジナルのInterface_W3PE.dllをコピーして、上記のファイル名にリネームします。
これをチューナ数分だけ繰り返せば、各BonDriverがロードするDLLは別々のものになり、理屈の上では何とかなるはずです。

スポンサーサイト

Windows XP上でBonCasClientのB25Decoder.dllが動作しない理由

2011年02月06日 21:59

事の発端


2chのSpinelスレで以下のような書き込みがありました。
357 名無しさん@編集中 2011/02/06(日) 16:35:49 ID:0En4G8zO
(中略)

BonCasClient使ってみたけど一つ問題が。
Spinelを実行するOSがWindows 7だと問題なくSpinel経由でデコードされた映像を視聴できる。
WindowsXPだとクライアントが接続したときにB25Decoder.dllの読み込みに失敗してSystem.DllNotFoundExceptionで死んでしまう。

MainWindow.AppDomain_UnhandledException: 予期しない例外が発生
【例外クラス】System.DllNotFoundException
【エラー内容】DLL 'B25Decoder.dll' を読み込めません: このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (HRESULT からの例外: 0x800736B1)
【スタックトレース】
場所 Lapis.Spinel.B25Decoder.CreateB25Decoder2()

(以下略)

こちらのXP環境でも同様の現象が再現しました。
問題の切り分けのためEDCB単体で実験してみると、同様にB25Decoder.dllの読み込みに失敗します。
例外表示にある「DLL 'B25Decoder.dll' を読み込めません」の通り、BonCasClientのB25Decoder.dllに何か原因があるようです。

原因はなにか


必要とされるバージョンのMSVC++ 2005 SP1 ランタイムがインストールされていないのが原因です。
いやいやちゃんとランタイムは入れてるし、Windows Updateで最新の状態にしてるよ!となるかもしれませんが、落とし穴があります。
BonCasClientはversion 8.0.50727.4053のVC++ランタイムを必要とするのですが、VC++ 2005 SP1 ランタイムをダウンロードしてきてインストールしても、その後Windows Updateを行っても、そのバージョンは一向にインストールされません。
MSのサイトから手動でダウンロードしてきてインストールする必要があります。

解決するには


以下のサイトから vcredist_x86.exe をダウンロードしてきてインストールします。
これでversion 8.0.50727.4053のランタイムがインストールされて、XPでもBonCasClientが使用可能になります。

参考URL

SpinelでのクライアントごとのB25デコード機能について

2011年01月23日 02:42

今更ながら2ch Spinelスレの存在を知りました。
わざわざ専用スレまで立てて頂いてありがとうございますm(__)m

さてそこでこのような書き込みがありました。
名無しさん@編集中 2011/01/20(木) 15:37:31 ID:R4+50p4Z
・以下を実装していきます。
・クライアントごとにB25デコードするかどうかを選択できる機能

これってもう更新は望み薄なのかな
EDCBでの録画はデコード無しで他のマシンでデコード、録画鯖機で視聴時TVTest用には
B25でデコードしたデータを流すとかやりたいんだけど
うちの録画鯖の環境ではSpinelでデコード処理した方が軽いってかTVTest側で指定サービス
のみのデコードでもBSやCSだとカクついて酷いことに・・・
もちろんこの機能の実装計画がお蔵入りになったわけではありません。
将来的に普通の動画プレイヤーでHTTP越しに視聴できるようにしようと思った時に必要になる機能です。

ただ実装時期については今すぐというわけにはいかず、次期バージョンのSpinel4で、ということになると思います。
もう少々お待ち下さい。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。