預覽專案
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 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);
查詢 IMediaControl 和 IMediaEvent 介面的篩選圖表。 使用這兩個介面來執行圖形,並等候播放完成。 如需如何使用這些介面的說明,請參閱 如何播放檔案 和 回應事件。 下列程式碼示範使用這些介面的其中一種方式。
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();
相關主題