從 Type-2 檔案傳輸
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
若要在預覽時傳輸 type-2 檔案,請使用下圖所示的篩選圖表。
使用預覽type-2 傳輸
type-2 檔案有兩個數據流、一個音訊串流和一個 DV 編碼的視訊串流。 此圖表會使用 DV Muxer 篩選器來合併音訊和視訊串流。 它會將交錯數據流傳送至 MSDV 篩選條件,但會再次分割數據流以供預覽。
建置此圖表,如下所示:
// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");
// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source",
&pFileSource);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);
此程式代碼會呼叫 RenderStream:
前兩個會將來源篩選條件連接到 AVI 分隔器和 AVI 分隔器至 DV Mux。 在第一次呼叫中,擷取圖形產生器會自動將AVI分割器新增至圖形,並將其中一個AVI分割器的輸出針腳連接到 DV Mux。 在第二個呼叫中,擷取圖形產生器會尋找 AVI 分隔器的第二個輸出針腳,並將它連接到 DV Mux。
第三個呼叫 RenderStream 會將 DV Muxer 連接到 Infinite Pin Tee 篩選。 下一個呼叫會將一個串流從 Infinite Pin Tee 連線到 MSDV 擷取篩選。 此數據流會傳輸至裝置。 最後一次呼叫 RenderStream 會建置圖形的預覽區段。
如果您不想在傳輸時預覽,可以省略 Infinite Pin Tee,只需將 DV Mux 連接到 MSDV 篩選:
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);
相關主題
-
DirectShow 中的數位視訊