共用方式為


預覽專案

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 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。 建置部分篩選圖形,並針對時間軸中的每個群組建立一個輸出釘選。
  • RenderOutputPins。 將每個輸出釘選連接到視訊或音訊轉譯器,以完成預覽圖形。

建置圖形之後,您可以執行圖形來預覽專案,就像使用任何 DirectShow 篩選圖表一樣。 首先,呼叫 IRenderEngine::GetFilterGraph 方法,以取得篩選圖形的指標。

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

查詢 IMediaControlIMediaEvent 介面的篩選圖表。 使用這兩個介面來執行圖形,並等候播放完成。 如需如何使用這些介面的說明,請參閱 如何播放檔案回應事件。 下列程式碼示範使用這些介面的其中一種方式。

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

載入和預覽專案