共用方式為


選擇性串流

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

DMO 可以將部分輸出數據流指定為選擇性。 選擇性數據流會產生應用程式可以完全捨棄的數據,或偶爾在樣本上捨棄。 例如,選擇性數據流可能包含主要數據流的其他資訊。

若要查詢數據流是否為選擇性,請呼叫 IMediaObject::GetOutputStreamInfo 方法,並檢查 pdwFlags 參數。 選擇性數據流會傳回DMO_OUTPUT_STREAMF_DISCARDABLE旗標或DMO_OUTPUT_STREAMF_OPTIONAL旗標。 這些旗標幾乎代表相同的事情:他們之間的一個小差異將很快解釋。

如果數據流是選擇性的,用戶端可以在處理輸出時指示 DMO 捨棄該數據流中的數據。 若要這樣做,請呼叫 IMediaObject::P rocessOutput 方法,並將輸出緩衝區設定為要捨棄的每個數據流 NULL。 (輸出緩衝區是在 DMO_OUTPUT_DATA_BUFFERpBuffer 成員中指定。此外,在 dwFlags 參數中設定DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER旗標。

對於 pBuffer 指標 NULL的每個數據流,DMO 會嘗試捨棄數據。 如果數據流是選擇性的,則保證 DMO 會捨棄數據。 如果數據流不是選擇性的,DMO 會盡可能捨棄數據,但不保證這樣做。 如果無法捨棄數據,則會設定DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE旗標。 如果您將 pBuffer 指標設定為 NULL 但未設定DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER旗標,DMO 不會捨棄數據。 在此情況下,DMO 會在內部緩衝輸出,或只是失敗 ProcessOutput 呼叫。

DMO_OUTPUT_STREAMF_OPTIONAL 旗標與DMO_OUTPUT_STREAMF_DISCARDABLE旗標之間的唯一功能差異如下:

  • DMO_OUTPUT_STREAMF_OPTIONAL旗標表示用戶端不需要在該數據流上設定媒體類型。 不過,如果客戶端開始處理數據,而不設定該數據流的媒體類型,則必須在串流期間捨棄該數據流中的數據。 如果您想要選擇性地捨棄樣本,則必須設定媒體類型。
  • DMO_OUTPUT_STREAMF_DISCARDABLE旗標表示,雖然數據流是選擇性的,但一律需要媒體類型。

直接裝載 DMO