MovieLayerPlayerとコーデック

まあ、昨日の記事の追記です。やっぱり普通と違う環境で開発をしていると気がつかないことってあるもんだな~、と。

 

MovieLayerPlayerではDirectShowを使用して再生している

これがちょっとした鍵。WindowsVista以上でWindowsMediaPlayerはMediaFoundationを使って読み込みを行い、読み込めない時にはDirectShowを使用します。そのため、微妙に対応フォーマットが異なる、という現象が現れるわけですね。そのため安易に「対応している」とか書かない方が良かった、ということですね。済みません。

そのため、Windows7以上でWindowsMediaPlayerはMediaFoundation経由でmp4を再生できますが、DirectShow経由ではスプリッタフィルタがシステムに登録されていないため再生できない、という状態だったようです。実際にAdvancedCodecsをアンインストールしてDirectShowのみによる再生を行ってみると「フィルタがないため再生できない」という回答が帰ってくることを確認しました。

ちなみに、MovieLayerPlayer 1.06による変更は「Windows7以上でmp4のスプリッタフィルタが単体で登録されている場合に再生できるようになる」というものになります。わざわざmp4のスプリッタフィルタを単体で入れている人は少ないと思いますので余り意味はなさそうです。入れるならコーデックパックをまるごと、でしょうからね。一応レンダラもこれに応じて微妙に修正されているのが良いところですか。

 

次はMediaFoundation経由の再生を実装?

そうなると、mp4を通常状態で再生するためにはMediaFoundation経由の再生も考慮に入れないとだめ、ということになりそうです。幸いなことにMediaFoundationoのプログラムそのものはすでに組まれていますし、一部の処理を共通化しているますしね。問題点は「どうやってMediaFoundationでカスタムレンダラを使用するかを調べていない」というところにあります。ここができないと「WindowsMediaPlayerで再生できるものは再生できる」とはならないのですが・・・。さて、どうするか。もし実装するなら4月からは環境が大幅に変わるのでやるなら3月中にどうにかしないと・・・。

 


コメントを残す

メールアドレスが公開されることはありません。

*

この記事のトラックバック用URL