この記事は3年以上前に書かれた記事です。情報が古い可能性があります。
DirectShow を使って3D描画するプログラムを書く機会があったので、その際のいろいろをメモ。
DirectShowのサンプルどこ?
DirectShow は、以前はDirectX SDKと共に配布されてたけど、2005年バージョンからDirectX SDKではなくなったらしい。といってDirectShowがなくなったわけではなく、どこへいったかというとPlatform SDK(PSDK)に付属するようになったとのこと(Wikipediaで知りました)。
でも、MSDNのDirectShowの項はDirectXのノードに書かれてるし、PSDK関連のソースをビルドするにはDirectX SDKも必要ときている。これは一体どういう思いで分離されたのかな。
とりあえず、Platform SDK は次の場所からダウンロードできる。
- Platform SDK ダウンロード
ここからリンクが切れている場合はこっちで。
ついでに、VS2005 Express へのリンクも貼っておく。
[追記] 上記リンクが軒並み切れているので、現在は以下を参考にどうぞ(これもいつまで持つか…)
- DirectX SDK の場所 – Win32 apps | Microsoft Docs
- ゲーム開発者向けの DirectX インストール – Win32 apps | Microsoft Docs
BaseClassesって?
こんな名前だけど、SDKのIncludeディレクトリやLibディレクトリなんかをいくら探しても見つからない。これはなんとSampleディレクトリ内にある。
(インストールディレクトリ)\Sample\C++\DirectShow\BaseClasses\
ネットに出回っているDirectShow関連のプログラムでは、かなりの確率でこのライブラリが使用されているのだけど、なぜかコンパイル、リンクができない。その理由は、多くの場合、このライブラリのインクルード、リンクが前提になっているからというパターンが多い。
これのやり方は別記事にまとめたので、そちらを参考にどうぞ。
ビデオ再生をする2つの方法
DirectShowを使ってビデオ再生(動画、aviとかmpegとか)をする方法は大きく2つある(おそらくそれ以外にもあるでしょうけど)。ひとつは SampleGrabber を使用する方法、もうひとつは、VMR9(Video Mixing Renderer 9)を使用する方法。
SampleGrabber というのは、動画の1フレームを静止画として取り出すフィルタのひとつで、これを連続して取り出しつつDCに描画すれば、結果的に動画になるというもの。VMR9も中身では結局同じことをやっているのだろうけど、コードとして動画を再生する手順が前者より省かれている気がする。
どちらかというとVMR9を使う方が簡単に見える。VMR9の大きな特徴は、mixingという名の通り、動画の上に別の動画を重ねて(例えば、何かの映像の上に文字列をテロップとして流すみたいな)再生ができるという点(これがVMR9たる所以でしょうけど)だが、重ねずに1枚の動画を再生することも当然できる。
ちなみに、SampleGrabberはDirectX8からの機能、VMR9はDirectX9からの機能(8にもVMR自体はあるみたいだけど)ということになるようです。
まずは以下のような公式ドキュメントを参考に。
- DirectX グラフィックスの使用 – Win32 apps | Microsoft Docs
- マルチメディアストリーミングのサンプルコード – Win32 apps | Microsoft Docs
VMR9は、SDK付属のサンプルコードを見るのが早い(きっと)。