次の方法で共有


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

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

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

プロジェクトをプレビューするには、まず CoCreateInstance を呼び出して、基本レンダー エンジンのインスタンスを作成します。 クラス識別子がCLSID_RenderEngine。 次に、IRenderEngine::SetTimelineObject メソッドを呼び出して、レンダリングするタイムラインを指定します。

タイムラインを初めてプレビューするときは、一覧表示されている順序で次の呼び出しを実行します。

  1. IRenderEngine::SetRenderRange を呼び出して、プレビューするタイムラインの部分を指定します。 (省略可能)
  2. IRenderEngine::ConnectFrontEnd を呼び出して、グラフのフロントエンドを構築します。
  3. IRenderEngine::RenderOutputPins を呼び出します。 このメソッドは、各出力ピンをビデオ レンダラーまたはオーディオ レンダラーに接続し、グラフを完成させます。

次のコード例は、次の手順を示しています。

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();

次に、フィルター グラフを実行します。 まず、 IRenderEngine::GetFilterGraph メソッドを呼び出して、フィルター グラフ マネージャーの IGraphBuilder インターフェイスへのポインターを取得します。 次に、次のコードに示すように、フィルター グラフ マネージャーに IMediaControl インターフェイスのクエリを実行し、 IMediaControl::Run を呼び出します。

IGraphBuilder   *pGraph = NULL;
IMediaControl   *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();

フィルター グラフ マネージャーの IMediaEventEx インターフェイスを使用して、プレビューが完了するまで待ちます。 ファイル再生グラフの場合と同様に、フィルター グラフ マネージャーの IMediaSeeking インターフェイスを 使用してグラフをシークすることもできます。

プロジェクトをもう一度プレビューするには、グラフをゼロ時間に戻し、 Run を再度呼び出します。 タイムラインの内容を変更する場合は、次の操作を行います。

  1. SetRenderRange を呼び出します。 (省略可能)
  2. ConnectFrontEnd を呼び出します。
  3. ConnectFrontEnd メソッドがS_WARN_OUTPUTRESETを返す場合は、RenderOutputPins を呼び出します。 ( ConnectFrontEnd が S_OKを返す場合は、この手順をスキップできます)。
  4. グラフを時間 0 に戻します。
  5. グラフを実行します。

次の例は、次の手順を示しています。

hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
    hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0; 
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0); 
hr = pControl->Run();

プロジェクト ファイルを読み込んでプレビューする完全な例については、「プロジェクトの 読み込みとプレビュー」を参照してください。

ビデオ編集プロジェクトの管理

プロジェクトのレンダリング