預覽專案
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
[此 API 不受支援,未來可能會變更或無法使用。]
若要預覽專案,請先呼叫 CoCreateInstance 以建立基本轉譯引擎的實例。 類別識別碼CLSID_RenderEngine。 然後呼叫 IRenderEngine::SetTimelineObject 方法來指定您要呈現的時間軸。
第一次預覽時程表時,請依照所列的循序執行下列呼叫:
- 呼叫 IRenderEngine::SetRenderRange 以指定要預覽的時程表部分。 (選用)
- 呼叫 IRenderEngine::ConnectFrontEnd 以建置圖形的前端。
- 呼叫 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 介面的 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 。 如果您變更時間軸的內容,請執行下列動作:
- 呼叫 SetRenderRange。 (選用)
- 呼叫 ConnectFrontEnd。
- 如果 ConnectFrontEnd 方法傳回S_WARN_OUTPUTRESET,請呼叫 RenderOutputPins。 (如果 ConnectFrontEnd 傳回S_OK,您可以略過此步驟。)
- 將圖表搜尋回零時間。
- 執行圖形。
下列範例顯示下列步驟:
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();
如需載入和預覽專案檔的完整範例,請參閱 載入和預覽專案。
相關主題