MPEG-2 系統概觀

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

本節提供 MPEG-2 系統層的一般非技術概觀。 MPEG-2 系統是定義音訊和視訊串流如何在 MPEG-2 中多工處理的標準。

基礎串流

MPEG-2 多工處理會以一或多個位元組資料流程開頭,稱為「基本串流」 (ES) ,其中包含視訊、音訊或其他資料。 例如,影片 ES 包含壓縮的視訊畫面,加上序列標頭、圖片群組 (GOP) 標頭,以及解碼器解碼資料流程所需的任何其他專案。 系統層不會定義 ES 位元組資料流程的內容。

基本串流會分成封包,形成 封包化基礎串流 (PES) 。 PES 封包的長度可變。 封包的內容稱為 承載。 每個 PES 封包也都包含標頭。 多工器會將 1 位元組資料流程識別碼指派給每個 PES;個別 PES 封包是由封包標頭中的資料流程識別碼所識別。 對於音訊串流,串流識別碼的格式為 110xxxxx。 針對影片,串流識別碼的格式為 1110yyyy

MPEG-2 標準會定義兩種方式來傳遞封包化的基本資料流程: 程式資料流程傳輸資料流程

程式資料流程

程式資料流程是針對相對無錯誤的環境所設計,例如本機檔案儲存體。 在程式資料流程中,PES 封包會進行多工處理,並組織成稱為 套件的單位。 程式資料流程中的所有 PES 資料流程都會同步處理至相同的時鐘。

傳輸資料流程

傳輸串流 (TS) 是針對不可靠或容易出錯的環境所設計,例如網路廣播。 此外,它們也可以包含多個同步處理至不同時鐘的程式。 傳輸資料流程會新增第二層封包化 — PES 資料流程會封裝在傳輸資料流程封包內,每個封包的固定大小為 188 個位元組。 TS 封包也可以包含程式資訊資料流程,如下一節所述。

每個 TS 封包都有 4 位元組標頭,加上選擇性的調適欄位,其中包含其他標頭資訊。 多工器會將程式識別碼 (PID) 指派給每個 PES 資料流程或程式資訊資料流程。 PID 可用來識別 TS 封包,類似于串流識別碼識別 PES 封包的方式。 (如果傳輸資料流程包含多個程式, 串流 識別碼可能不是唯一的,但 PID 指派在傳輸資料流程內是唯一的。)

程式特定資訊

因為傳輸資料流程可以攜帶多個程式,所以必須有方法可將各種 PES 封包與其所屬的程式產生關聯。 這是使用可識別程式資料流程的資料表來完成。 整體來說,此資料稱為程式特定資訊 (PSI) 。 PSI 資料會包含在 TS 封包中,就像 PES 資料一樣。 有各種類型的 PSI 資料,包括:

  • 程式關聯資料表 (PAT) 。 PAT 一律指派給 PID 0x000。 PAT 中的每個專案都是 PID,可識別該程式的 PMT 封包, (看到下一個專案) 。

  • 程式對應表 (PMT) 。 每個 PMT 都會定義一個程式。 PMT 包含資料流程清單;每個資料表專案都會提供該資料流程的 PID,以及識別資料流程類型的程式碼。 ISO/IEC 13818-1 定義一些標準資料流程類型;下表顯示縮寫清單。

    stream_type Description
    0x01 MPEG-1 影片
    0x02 MPEG-2 影片
    0x03 MPEG-1 音訊
    0x04 MPEG-2 音訊
    0x80 - 0xFF 使用者私人

     

    以 MPEG-2 為基礎的其他標準,例如 ATSC,可能會在「使用者私人」範圍中定義其他資料流程類型。 例如,ATSC 會將0x81定義為 Dolby AC-3 音訊。

  • 條件式存取資料表 (CAT)

  • (NIT) 的網路識別資料表

DirectShow 中的 MPEG-2 支援