共用方式為


默認品質控制

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

DirectShow 基類 實作影片品質控制的一些預設行為。

品質訊息會從轉譯器開始。 視訊轉譯器的基類 CBaseVideoRenderer,其行為如下:

  1. 當視訊轉譯器收到範例時,它會比較範例上的時間戳與目前的參考時間。
  2. 影片轉譯器會產生品質訊息。 在基類中,品質訊息的 比例 成員限製為 500 (50%) 到 2000 (200%)。 超出此範圍的值可能會導致品質突然變更。
  3. 根據預設,視訊轉譯器會將品質訊息傳送至上游輸出釘選(連接到其輸入釘選的針腳)。 應用程式可以呼叫 SetSink 方法來覆寫此行為。

接下來會發生什麼取決於上游篩選條件。 一般而言,這是轉換篩選條件。 轉換篩選的基類是 CTransformFilter,它會使用 CTransformInputPinCTransformOutputPin 類別來實作輸入和輸出釘選。 這些類別一起具有下列行為:

  1. CTransformOutputPin::Notify 方法會呼叫 CTransformFilter::AlterQuality,這是篩選基類上的私用方法。
  2. 衍生篩選可以覆寫 alterQuality 來處理品質訊息。 根據預設,AlterQuality 會忽略品質訊息。
  3. 如果 AlterQuality 未處理品質訊息,輸出釘選會呼叫 CBaseInputPin::P assNotify,這是篩選輸入針腳上的私用方法。
  4. PassNotify 將品質訊息傳遞至適當的位置,也就是下一個上游輸出針腳或自定義品質管理員。

假設沒有任何轉換篩選會處理品質訊息,訊息最終會到達來源篩選上的輸出釘選。 在基類中,CBasePin::Notify 會傳回E_NOTIMPL。 特定來源篩選處理品質訊息的方式取決於來源的性質。 某些來源,例如即時影片擷取,無法執行有意義的品質控制。 其他來源可以調整其提供樣本的速率。

下圖說明預設行為。

基類 品質控制

基底視訊轉譯器會實作 IQualityControl::Notify,這表示您可以將品質訊息傳遞給轉譯器本身。 如果您將 比例 成員設定為小於 1000 的值,影片轉譯器會在轉譯的每個畫面之間插入等候期間,實際上會減緩轉譯器的速度。 (例如,您可以這樣做以減少系統使用量。如需詳細資訊,請參閱 CBaseVideoRenderer::ThrottleWait。 將 比例 成員設定為大於 1000 的值沒有任何作用。

Quality-Control 管理