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」ボタンをクリックすると再生は終了します。