設定 Demux 輸出針腳

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

當 MPEG-2 demux 收到資料封包時,它必須判斷哪一個輸出針腳應該剖析並傳遞資料。 在程式資料流程模式中,demux 會將串流識別碼對應至輸出針腳。 在傳輸資料流程模式中,它會將 PID 對應至輸出針腳。 例如,在傳輸資料流程模式中,如果 PID 0x31對應至 pin 0,則具有該 PID 號碼的每個 TS 封包都會路由傳送至輸出針腳 0。 如果 demux 收到資料流程識別碼或 PID 未對應至任何輸出針腳的封包,則只會捨棄封包。

在提取模式中,demux 會自動為檔案中的音訊和視訊串流建立輸出針腳,並將串流識別碼對應至釘選。

在推送模式中,輸出針腳必須由應用程式或其他篩選準則設定。 對於使用廣播驅動程式架構的數位電視來源 (BDA) ,網路提供者篩選準則適用于 TIF 篩選器來設定 demux。 應用程式不需要執行任何動作。 在其他情況下,應用程式必須設定輸出針腳。

demux 開頭沒有輸出針腳。 若要建立輸出釘選,請在篩選上呼叫 IMpeg2Demultiplexer::CreateOutputPin 方法。 此方法會採用媒體類型和釘選名稱,並傳回 IPin 指標。 當針腳連接到另一個篩選時,通常會使用媒體類型,通常是解碼器,例如 使用 Demux 搭配基礎資料流程一節。 釘選名稱可以是您想要的任何專案,但不允許重複的釘選名稱。

接下來,將一或多個資料流程識別碼或 PID 指派給新的輸出針腳。 針對程式資料流程,查詢 IMPEG2StreamIdMap 的針腳,並呼叫 IMPEG2StreamIdMap::MapStreamId。 針對傳輸資料流程,查詢 IMPEG2PIDMap 的針腳,並呼叫 IMPEG2PIDMap::MapPID

demux 可以透過數種方式剖析 TS 封包。 針對每個輸出針腳,剖析方法取決於MapPID方法的MediaSampleContent參數。

Description
MEDIA_ELEMENTARY_STREAM 篩選會傳遞 PES 承載。 在此模式中,篩選會解除封裝 PES 封包,因此下游篩選會接收 ES 位元組資料流程,而不需要 PES 封包標頭。 僅 (音訊和視訊串流。)
MEDIA_MPEG2_PSI 篩選會提供完整的 PSI 區段,例如 PAT 資料表、PMT 資料表、CAT 資料表等等。
MEDIA_TRANSPORT_PAYLOAD 篩選會從 TS 封包擷取承載,並傳遞它們,而不需進一步剖析。 對於基本資料流程,這表示 demux 會傳遞整個 PES 封包,包括 PES 封包標頭。
MEDIA_TRANSPORT_PACKET 篩選會傳遞整個 TS 封包。 demux 會根據其 PID 路由傳送 TS 封包,但不會檢查或處理封包。 發生錯誤的封包不會篩選掉。demux 不會重新多工處理封包,而產生的輸出資料流程不符合標準的 MPEG-2 傳輸資料流程。 此模式稱為 傳遞 模式。

 

針對程式資料流程,demux 一律會傳遞 PES 承載。

使用 MPEG-2 Demultiplexer