DirectShowフィルタを確認方法 と Windowws7でのデコーダの罠
Windows Media Playerでメディアファイルを再生するときに、一体どのデコーダ(フィルタ)で再生してるのか調べる必要が出てきました。
そこで役に立つのが、GraphEdit というMicrosoftからデベロッパ向けに提供されているツールです。
本来はDirectShowフィルタを操作するためのツールですが、どのフィルタを使っているのかを簡単に調べることも出来ます。
GraphEditはDirectShow SDKに入ってたり、 Platform SDK に入ってたり、 Windows SDK に入ってたりと世代で含むSDKが異なっています。
SDKは大きいから、GraphEdit単体だけ入手したいというのであれば、GraphEdit Build 090704 | Software - Digital DigestからBuild 090704版がダウンロードできるようです。
後は、GraphEditを起動し、メディアファイルをドラッグするだけです。
例えば、AVIファイルで、映像コンテナにDivx,音声コンテナにMP3の場合は3流PGの環境の場合、以下のようになっていました。
映像コンテナにx264を使った場合は以下のようでした。
Windows7環境なので、どちらもOS同梱のビデオ/オーディオコーデックを使ってデコードしているようです。
さて、ffdshowを入れたので、ffdshowで再生してやろうかと思いました。
しかし、WindowsMediaPlayerで再生しようとしたところ、ffdshowを使ってる気配がありません。
GraphEditで見ても、MSのデコーダが使われているようです。
メリット値の問題かなと思い、オーディオコーデックの優先順位変更にあるように、Direct Show Filterを使ってメリット値を確認して見ましたが、ffdshowはかなり優先にしてるので、メリット値の問題ではないようです。
で、ググったところ Windows7 からメリット値に関係なくMS純正デコーダが使われるようです。
Vista以降のWindowsには、マルチメディア再生としてMedia FoundationというAPIが用意されたようです。今までのDirectShowを置き換えるAPIのようです。(不覚ながらこのあたりの情報は殆ど知りませんでした)
どうやらWMPはMedia Foundationを使ったデコーダを優先して使うっぽいです。(憶測ですが。。)
さらに調べると、Win7DSFilterTweakerというツールを使うとWindows7のデコーダを設定できることがわかりました。
Win7DSFilterTweakerの、"Media Foundation"で、無効にする拡張子を選択するか "Tweaks" で "Disable Media Foundation" にチェックを入れるとMedia Foundationを無効にできるようです。(64-bitもありますが、これはなぜか無効化出来ませんでした。ただ、WMPの標準のショートカットはx86版を指しているので64bitを無効にしなくても良いようです)
もし、再生プレーヤーで64bit版を使うなら、それ用のドライバを入れておく必要があるようです。
DivXを入れておくとMedia Foundationを無効化にしたときになぜかDivX H264デコーダが優先されてしまいました。
情シスにいると、結構マルチメディア方面には疎くなるもんですが、ここまで時代に置き去りにされているとは思わずちょとショック気味の3流PGでした。。
参考: