元になったクラスは古いクラスで実装も一応クラスではあるものの、
実装元のウィンドウのコールバックにメッセージ処理を依存していたのでえらく使い勝手が悪かった。
そこを、ここの記事を参考に作り直し、クラス側で見えないウィンドウを持たせて再生関連のメッセージはそっちで処理させるように変更した。
それはよかったのだけれど。
今回問題になったのはDivXのファイルを再生させようと思ったとき。
MCIを利用するときに設定するデバイス種別は以下のレジストリキーに拡張子毎に設定されている。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionMCI Extensions]
DivXの場合、”*.avi”なので、”avi”のキーを見るのだけれど、そこに書かれているのは”avivideo”。だが、MCIを利用する際の構造体のlpstrDeviceType メンバに、”avivideo” を指定すると、音声のみが再生されて画像が出力されないという事象が発生した。
その後、試行錯誤した結果 ”MPEGvideo” を指定すれば再生出来ることが判明。
ただ、これはその名のとおり、MPEG関係の動画用の指定文字列。
DivXの元はMPEG系だからこんな動作をしているんだと思う。
レジストリから拡張子を元にキーを引っ張ってきて、MCIで使おうと思ったのだけれど、
どうもすっきりとは行かせてくれなさそう……
試してないけれど、普通の無圧縮aviなんかだと”avivideo”にしないとエラーが出そうだし……
コメントを残す