DirectShowの開発環境
現状、DirectShowは、前回のMicrosoft Platform SDKに含まれています。以前は、DirectXに含まれていました。そうすると、前回のようにMicrosoft Platform SDKの環境を設定すればいいようですが、どうもVC++でコンパイルするためには、結局はDirectXが必要になってくるようです。ということで、DirectXは現時点では以下が最新でしょうか。
DirectX SDK(February 2007)
これで、Microsoft Platform SDKとDirectX SDKがインストール出来れば、VC++で開発するためには、インクルードファイル、ライブラリファイルの設定が必要になって来ます。以下のようになるでしょうか。それぞれ、Microsoft Platform SDKのインストール先と、DirectX SDKのインストール先です。設定する場合は、各自のインストール先に読み替えて設定して下さい。
VC++でのインクルードファイルのディレクトリ
C:\Program Files\Microsoft Platform SDK\Include C:\Program Files\Microsoft DirectX SDK (Feb 2007)\Include場合によっては以下のディレクトリも必要になる場合があるかと思います。
C:\Program Files\Microsoft Platform SDK\(以下続き)
Samples\Multimedia\DirectShow\BaseClasses
VC++でのライブラリファイルのディレクトリ
C:\Program Files\Microsoft Platform SDK\Lib場合によっては以下のディレクトリも必要になる場合があるかと思います。
C:\Program Files\Microsoft DirectX SDK (Feb 2007)\Lib\x86VC++でのライブラリファイル(DirectShow)
strmiids.libVC++でのライブラリファイル(Win32関連で設定されていない場合は要設定)
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
以上までで、DirectShowの開発環境が出来たかと思います。以下は参考までにVC++での動作確認用の簡単なプログラムです。しっかりCOMベースのプログラムです。単純に動画ファイルを再生しています。内容はともかく、コンソールアプリケーションベースですので、コンソールアプリケーションのプロジェクトを作成してコピー等すれば単純な動作確認になるかと思います。その場合は、正しく動画ファイルのパスを設定して下さい。ファイルがないと単純に動かないです。動画ファイルはDirectShowのサンプルに入っていたものです。一応こちらに置いておきます。
//
// DirectShowテスト用プログラム
//
//VC++ 2005の場合でとりえあえずwarningを無効にする
//(warningがいろいろと出ると見にくいので)
#pragma warning( disable : 4819 )
#pragma warning( disable : 4996 )
//DirectShowのインクルード
#include <dshow.h>
//動画ファイルの場所を指定(短いパス名の方が無難かも)
#define MOV_FILENAME L"C:\\temp\\ruby.avi"
int main(int argc, char** argv)
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
//COM初期化
CoInitialize(NULL);
//FilterGraph生成
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
IID_IGraphBuilder,(LPVOID *)&pGraphBuilder);
//MediaControlインターフェース取得
pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);
//ファイルがない場合は、画面が出ないだけなので、要注意
//pMediaControl->RenderFile((BSTR)MOV_FILENAME);
//2007.03.20 IGraphBuilderの方を使用に変更
pGraphBuilder->RenderFile((BSTR)MOV_FILENAME,NULL);
//再生開始
pMediaControl->Run();
//再生終了前に終了しないように停止
MessageBox(NULL,(LPCSTR)"stop",(LPCSTR)"stop",MB_OK);
//解放
pMediaControl->Release();
pGraphBuilder->Release();
//COM終了
CoUninitialize();
return 0;
}
Windowsプログラミング関連記事
Posted by nishida at 20:04:31


