共用方式為


預覽專案

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngine以及 媒體基礎結構中的音訊/視訊擷取所取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 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 方法來擷取 Filter Graph Manager IGraphBuilder 介面的指標。 然後查詢 IMediaControl 介面的 Filter Graph 管理員,並呼叫 IMediaControl::Run,如下列程式代碼所示:

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

使用 Filter Graph Manager 的 IMediaEventEx 介面等待預覽完成。 您也可以使用 Filter Graph Manager 的 IMediaSeeking 介面來搜尋圖表,就像使用檔案播放圖表一樣。

若要再次預覽專案,請將圖表移至時間零,並再次呼叫 Run。 如果您變更時間軸的內容,請執行下列動作:

  1. 呼叫 SetRenderRange 。 (選擇性)
  2. 呼叫 ConnectFrontEnd
  3. 如果 ConnectFrontEnd 方法傳回S_WARN_OUTPUTRESET,請呼叫 RenderOutputPins。 (如果 ConnectFrontEnd 傳回S_OK,您可以略過此步驟。
  4. 將圖表調回到起點。
  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();

如需載入和預覽項目檔的完整範例,請參閱 載入和預覽專案

管理影片編輯專案

專案渲染