DVDを再生する

ここでは、DVDを再生する方法を説明したいと思います。 (注意)ここの例では、サンプルを簡潔にするためにエラー処理を書いていません。

とりあえず、コードを書いてみる

まず、何も考えずに以下のコードを書いてみましょう。 このコードは、DVDドライブに入っているDVDをはじめから再生します。 DVDがドライブに入っていない場合には動作しません。 また、私の環境では何故かVisual Studioから起動すると画面が現れませんでした。 もし、動かない場合にはコマンドプロンプトから実行してみてください。


#include <dshow.h>

int
main()
{
 IDvdGraphBuilder *pDvdGraphBuilder;
 IGraphBuilder *pGraphBuilder;
 IMediaControl *pMediaControl;

 CoInitialize(NULL);

 CoCreateInstance(CLSID_DvdGraphBuilder,
	NULL,
	CLSCTX_INPROC_SERVER,
	IID_IDvdGraphBuilder,
	(LPVOID *)&pDvdGraphBuilder);

 AM_DVD_RENDERSTATUS stat;
 pDvdGraphBuilder->RenderDvdVideoVolume(NULL, AM_DVD_HWDEC_PREFER, &stat);

 pDvdGraphBuilder->GetFiltergraph(&pGraphBuilder);

 pGraphBuilder->QueryInterface(IID_IMediaControl, (LPVOID *)&pMediaControl);

 pMediaControl->Run();

 MessageBox(NULL, "Wait", "dvd test", MB_OK);

 pMediaControl->Stop();

 pMediaControl->Release();
 pGraphBuilder->Release();
 pDvdGraphBuilder->Release();

 CoUninitialize();

 return 0;
}

単純にDVD再生するだけのプログラムは非常に簡単です。 ただ、DVDの再生はファイルからの再生とは色々違っています。 まず、DvdGraphBuilderを作成しなくてはなりません。 また、Graphの作成はRenderDvdVideoVolumeを利用して行います。

GraphBuilderやMediaControlはそのままなのですが、GraphBuilderの作成はDvdGraphBuilderのGetFiltergraphというメソッドを利用します。

例の中で利用しているMessageBoxは、アプリケーションが終了してしまわないようにブロックするためにあります。 MessageBoxの「OK」ボタンをクリックすると再生は終了します。