次の方法で共有


プロジェクトのプレビュー

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

[この API はサポートされていないため、今後変更または使用できない可能性があります。]

プロジェクトをプレビューするには、レンダー エンジンと呼ばれるコンポーネントが必要です。これにより、タイムラインから DirectShow フィルター グラフがビルドされます。 フィルター グラフは、実際にプロジェクトをレンダリングするグラフです。 レンダリング エンジンを使用して、プロジェクトをプレビューしたり、最終的な出力ファイルを書き込んだりできます。

この記事では、レンダリング エンジンの詳細については説明しません。 プレビューの場合、必要なメソッド呼び出しはごくわずかです。 出力ファイルの書き込み方法など、より詳細な説明については、「 プロジェクトのレンダリング」を参照してください。 次のコード例は、プレビュー グラフを構築する方法を示しています。

IRenderEngine *pRender = NULL; 
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
            IID_IRenderEngine, (void**) &pRender);

hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd( );
hr = pRender->RenderOutputPins( );

CoCreateInstance 関数を使用して、レンダリング エンジンを作成します。 次に、レンダリング エンジンの IRenderEngine インターフェイスで次のメソッドを呼び出します。

  • SetTimelineObject。 使用するタイムラインを指定します。
  • ConnectFrontEnd。 タイムライン内のグループごとに 1 つの出力ピンを使用して、部分的なフィルター グラフを作成します。
  • RenderOutputPins。 各出力ピンをビデオまたはオーディオ レンダラーに接続して、プレビュー グラフを完了します。

グラフが作成されたら、DirectShow フィルター グラフと同様に、グラフを実行してプロジェクトをプレビューできます。 まず、 IRenderEngine::GetFilterGraph メソッドを呼び出して、フィルター グラフへのポインターを取得します。

IGraphBuilder   *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);

IMediaControl インターフェイスと IMediaEvent インターフェイスのフィルター グラフに対してクエリを実行します。 これら 2 つのインターフェイスを使用してグラフを実行し、再生が完了するまで待ちます。 これらのインターフェイスの使用方法の詳細については、「 ファイルを再生する方法 」と 「イベントへの応答」を参照してください。 次のコードは、これらのインターフェイスを使用する 1 つの方法を示しています。

IMediaControl   *pControl = NULL;
IMediaEvent     *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();

この例のコードは、 IMediaEvent::WaitForCompletion メソッド呼び出しの INFINITE パラメーターにより、再生が完了するまでプログラムの実行をブロックします。 ただし、再生中に問題が発生した場合は、プログラムが応答を停止する可能性があります。 実際のアプリケーションでは、メッセージ ループを使用して再生が完了するまで待機します。 また、再生を中断する方法をユーザーに提供することもお勧めします。

レンダリング エンジンの使用が完了したら、常に IRenderEngine::ScrapIt メソッドを呼び出します。 このメソッドは、フィルター グラフを削除し、レンダリング エンジンが保持するすべてのリソースを解放します。

pRender->ScrapIt();

プロジェクトの読み込みとプレビュー