共用方式為


預設品質控制

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對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 的值沒有任何作用。

品質控制管理