Windowless

あたしはアプリケーションのカスタマイズを面倒くさいと感じる方で、
そこまでの労力を払うならいっそ、アプリケーション自体を作ってしまいたくなる。
カスタマイズより自分好みに出来るので、テキストエディタと動画プレーヤは自作のものを使っている。
で、テキストエディタはこれで良いのだが、動画プレーヤがVistaでうまく行かない。
もちろんここで言うVistaは、自宅で使ってる64bit版で、32bit版は試してもいない。

まず、Vistaでは特にAEROを使用した時の描画方法が変更になっているので、
それ以前のWindowsで安定して使えたオーバーレイ方式の動画プレーヤが使えなくなった。
それで、オーバーレイをやめて、VMR方式を使った再生も動画プレーヤも作ってみたが、
コーデックの使われ具合によって再生出来ないファイルがあって、何かと調整が必要になる。

打開策は常に模索中だが、どうせVistaでの動画再生が目的なので、.NETに目をつけた。
DirectXを簡単に使えるというのも.NETのウリだったはずなので、ググって調べてみたのだが、
動画再生に関する部分は既にDirectXから切り離され、.NETでもろくな対応はしていなかった。
オフィシャルな物はなかったが、オープンソースなラッパーがあったので試してみた。
http://directshownet.sourceforge.net/
VMRを使った動画再生のサンプルコードがあり、XPではもちろん動作したが、
やはりVistaではサンプルアプリの起動すら出来なかった。
どこが悪いのかもわからない、有効なWin32アプリじゃないみたいなエラーでデバッグ不可能。
しばらく悩んだけれども、Vistaの仕組みをよく考え、Direct3Dによる描画を行わないよう書き換えたら、
ようやくサンプルコードは動き出した。
サンプルをさらに削って、動画再生を行える最小コードを作って研究した。
よくわかってないのだが、DelphiのDirectShowコンポに頻繁に登場するIVideoWindowが登場しない。
たぶん、いままでDelphiで作ってきたエロペガのVMR再生はIVideoWindow方式、
このサンプルコードで扱っているのはWindowless方式で、再生方法が違うんじゃないかな。

で、この再生方法が違うかもしれない方式でも、やっぱりVistaでだけダメ。
IVideoWindow方式は、MPEG2の再生が出来るかどうかが、環境のコーデックに依存するが、
Windowless方式はMPEGとWMVはOKで、AVIはOKなものもあるがDIVX等が再生不可能。
XPではどっちの方式でも何でも再生出来て問題なし。
エロ動画を見るという目的では、MPEG2もDIVXも捨てがたい。
これって、両方組み合わせて、どっちかでうまく行かない時に自動で他方を使うようにすれば、
何でも再生出来るようになるんじゃないかと思った。
ひょっとしてちょっと光が見えたか?

たぶん、.NETで作ってもどうせやることは一緒なので、Delphiで作った方が流用できるコードは多い。
ターゲットがVistaだから、.NETのインストールが不要でC♯もいい。
どっちでやってみるかも決まってないが、どっちかではやってみたい。

たぶん関連のある記事:

コメントは終了しています。