共用方式為


智慧型連線

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

Intelligent Connect 是 Filter Graph Manager 用來建置篩選圖形的機制。 它包含數個相關的演算法,這些演算法會選取篩選,並將其新增至篩選圖形。

如果您無法建置特定篩選圖形並想要針對問題進行疑難排解,或正在撰寫自己的篩選,並想要讓它可供自動圖形建置使用,請閱讀本主題。

Intelligent Connect 牽涉到下列 IGraphBuilder 方法:

IGraphBuilder::AddSourceFilter

IGraphBuilder::AddSourceFilter方法會新增可轉譯指定檔案的來源篩選。 首先,它會在登錄中尋找,並符合通訊協定 (,例如 https://) 、副檔名或一組預先決定的 檢查位元組,也就是符合特定模式之檔案中特定位移的位元組。 如需詳細資訊,請參閱 註冊自訂檔案類型。 假設方法找到適當的來源篩選準則,然後建立該篩選的實例、將它新增至圖形,並使用檔案名呼叫篩選的 IFileSourceFilter::Load 方法。

IGraphBuilder::Render

IGraphBuilder::Render方法會建置圖形的子區段。 它會從未連線的輸出針腳開始運作,並視需要新增新的篩選。 開始篩選準則必須已經位於圖形中。 在每一個步驟中, Render 方法會搜尋可連線到上一個篩選的篩選。 如果連接篩選器有多個輸出針腳,則資料流程可以分支。 當每個資料流程都有轉譯器時,搜尋就會停止。 如果 Render 方法停滯,它可能會使用一組不同的篩選來備份並再試一次。

若要連接每個輸出針腳, Render 方法會執行下列動作:

  1. 如果針腳支援 IStreamBuilder 介面,Filter Graph Manager 會將整個程式委派給針腳的 IStreamBuilder::Render 方法。 藉由公開此介面,針腳會負責將圖表的其餘部分向下建置至轉譯器。 不過,很少的針腳支援此介面。

  2. 篩選圖形管理員會嘗試使用記憶體中快取的篩選,如果有的話。 在 Intelligent Connect 程式中,篩選圖形管理員可能會快取程式中先前步驟中的篩選。 (另請參閱 Dynamic Graph Building.)

  3. 如果篩選圖表包含任何未連接輸入針腳的篩選,篩選圖形管理員會接著嘗試。 您可以在呼叫Render之前,先將該篩選新增至圖形,以強制Render方法嘗試特定篩選。

  4. 從 Windows 7 開始,DirectShow 具有特定媒體子類型的慣用篩選清單。 如果轉譯的媒體類型有慣用的篩選,篩選圖形管理員會嘗試下一個篩選。 應用程式可以使用 IAMPluginControl 介面來修改慣用篩選的清單。 清單的變更會影響應用程式的目前進程,並在進程結束時捨棄。

  5. 最後,如果找不到適當的篩選,篩選圖表管理員會使用 IFilterMapper2::EnumMatchingFilters 方法搜尋登錄。 它會嘗試比對輸出釘選的慣用媒體類型與登錄中列出的媒體類型。

    每個篩選準則都會註冊 為優點,這是一個數值,指出篩選準則相對於其他篩選準則的偏好程度。 EnumMatchingFilters方法會依優點傳回篩選,最低優點為 MERIT_DO_NOT_USE + 1。 它會忽略具有MERIT_DO_NOT_USE或更少優點 的篩選準則 。 篩選也會分組為 GUID 所定義的類別。 類別本身具有優點, 而 EnumMatchingFilters 方法會忽略任何具有 MERIT_DO_NOT_USE 或更少優點的類別,即使該類別中的篩選具有較高的價值值也一樣。

    從 Windows 7 開始,DirectShow 具有特定媒體子類型的封鎖篩選清單。 篩選圖表管理員會略過此清單上的篩選。 應用程式可以使用 IAMPluginControl 介面來修改封鎖篩選清單。 此清單的變更會影響應用程式的目前進程,並在進程結束時捨棄。

為了摘要說明, Render 方法會依下列順序嘗試篩選:

  1. 使用 IStreamBuilder
  2. 請嘗試快取的篩選。
  3. 請嘗試圖表中的篩選。
  4. Windows 7 或更新版本:如果有的話,請嘗試媒體類型的慣用篩選。
  5. 在登錄中查閱篩選準則。

IGraphBuilder::RenderFile

IGraphBuilder::RenderFile方法會從檔案名建置預設播放圖表。 在內部,這個方法會使用 AddSourceFilter 來找出正確的來源篩選,以及 Render 來建置圖形的其餘部分。

IGraphBuilder::Connect

IGraphBuilder::Connect方法會將輸出針腳連接到輸入針腳。 此方法會視需要新增中繼篩選,並使用 Render 方法所述的 演算法變化:

  1. 嘗試在篩選之間直接連線,但沒有任何中繼篩選準則。
  2. 請嘗試快取的篩選。
  3. 請嘗試圖表中的篩選。
  4. Windows 7 或更新版本:如果有的話,請嘗試媒體類型的慣用篩選。
  5. 在登錄中查閱篩選準則。

篩選類別

優點

使用 GraphEdit 模擬圖形建置

建置篩選圖形