釘選連線
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
篩選會透過 IPin 介面連線到其針腳。 輸出釘選會連線到輸入針腳。 每個針腳連線都有媒體類型,由 AM_MEDIA_TYPE 結構描述。
應用程式會藉由在 Filter Graph Manager 上呼叫方法來連接篩選,絕不會呼叫篩選或釘選本身上的方法。 應用程式可以呼叫 IFilterGraph::ConnectDirect 或 IGraphBuilder::Connect 方法,直接指定要連線的篩選:或者,可以使用圖形建置方法間接連接篩選,例如 IGraphBuilder::RenderFile。
若要讓連線成功,這兩個篩選條件都必須在篩選圖表中。 應用程式可以呼叫 IFilterGraph::AddFilter 方法,將篩選新增至圖形。 篩選圖形管理員也可以將篩選新增至圖表。 新增篩選條件時,Filter Graph 管理員會呼叫篩選的 IBaseFilter::JoinFilterGraph 方法來通知篩選。
線上程式的一般大綱如下:
- Filter Graph 管理員會在輸出釘選上呼叫 IPin::Connect,並將指標傳遞至輸入釘選。
- 如果輸出釘選接受連線,它會在輸入釘選上呼叫 IPin::ReceiveConnection。
- 如果輸入針腳也接受連線,連線嘗試會成功,並連接針腳。
當篩選作用中時,某些針腳可能會中斷連線並重新連線。 這種類型的重新連線稱為動態 重新連線。 如需詳細資訊,請參閱 動態圖形建置。 不過,大部分篩選都不支持動態重新連線。
篩選通常會以下游順序連接,換句話說,篩選條件的輸入針腳會在輸出接點之前連接。 篩選應一律支援此連接順序。 有些篩選條件也支援相反順序的連線:輸出針腳先,後面接著輸入針腳。 例如,在連接 MUX 篩選器的輸入針腳之前,可能先將 MUX 篩選的輸出釘選連接到檔案寫入器篩選。
當呼叫 pin 的 Connect 或 ReceiveConnection 方法時,針腳必須確認它可以支持連線。 詳細數據取決於特定篩選條件。 最常見的工作包括下列各項:
- 檢查媒體類型是否可接受
- 交涉配置器
- 查詢其他針腳以取得必要的介面。