DirectShow

いろいろメモ

書いておかないと忘れるので。

DirectX SDK から DirectShowのサンプルがなくなってる?

DirectShowは、以前はDirectX SDKと共に配布されてたけど、2005年バージョンからDirectX SDKではなくなったらしい。といってDirectShowがなくなったわけではなく、どこへいったかというとPlatform SDKに付属するようになったとのこと(Wikipediaで知ったよ)。

でも、MSDNのDirectShowの項はDirectXのノードに書かれてるし、PSDKのDirectShow関連のソースをビルドするにはDirectX SDKも必要ときている。どういう意図のある分離なのかがよくわからんですよ。

とりあえず、Platform SDK は次の場所からダウンロードできる。

ついでに、VS2005 Express へのリンクも貼っておく。

BaseClasses?って?

こんな名前だけど、SDKのIncludeディレクトリやLibディレクトリなんかをいくら探しても見つからない。これはなんとSampleディレクトリ内にある。

(インストールディレクトリ)\Sample\C++\DirectShow\BaseClasses\

ネットに出回っているDirectShow関連のプログラムでは、かなりの確率でこのライブラリが使用されているのだけど、なぜかコンパイル、リンクができない。その理由は、多くの場合、このライブラリのインクルード、リンクが前提になっているからというパターンが多い。

ライブラリのビルドのやり方などは、こちらを参考にどうぞ。

ビデオ再生をする2つの方法

DirectShowを使ってビデオ再生(動画、aviとかmpegとか)をする方法は大きく2つある(やろうと思えば3つも4つもあるかもしれないけどネ)。ひとつはSampleGrabber?を使用する方法、もうひとつは、VMR9(Video Mixing Renderer 9)を使用する方法。

SampleGrabber?というのは、動画の1フレームを静止画として取り出すフィルタのひとつで、これを連続して取り出しつつDCに描画すれば、結果的に動画になるというもの。VMR9も中身では結局同じことをやっているのだろうけど、コードとして動画を再生する手順が前者より省かれている気がする。

どちらかというとVMR9を使う方が簡単に見える。VMR9の大きな特徴は、mixingという名の通り、動画の上に別の動画を重ねて(例えば、何かの映像の上に文字列をテロップとして流すみたいな)再生ができるという点(これがVMR9たる所以でしょうけど)だが、重ねずに1枚の動画を再生することも当然できる。

ちなみに、SampleGrabber?はDirectX8からの機能、VMR9はDirectX9からの機能(8にもVMR自体はあるみたいだけど)ということになるです。

SampleGrabber?については下記サイトなどを参考に。

VMR9は、SDK付属のサンプルコードを見るのが早い(きっと)。

MSDN

参考サイト


プログラム・開発系メモ


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS