MPEG-2 系统概述

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本部分提供 MPEG-2 系统层的一般非技术概述。 MPEG-2 系统是定义如何在 MPEG-2 中多路复用音频和视频流的标准。

基本流

MPEG-2 多路复用从一个或多个字节流开始,这些流称为基本流 (ES) ,其中包含视频、音频或其他数据。 例如,视频 ES 包含压缩的视频帧、序列标题、图片组 (GOP) 标头,以及解码器解码流所需的任何其他内容。 系统层不定义 ES 字节流的内容。

基本流被分解为数据包,形成数据包 化的基本流 (PES) 。 PES 数据包的长度可变。 数据包的内容称为 有效负载。 每个 PES 数据包还包括一个标头。 多路复用器将 1 字节流 ID 分配给每个 PES;单个 PES 数据包由数据包标头中的流 ID 标识。 对于音频流,流 ID 的格式为 110xxxxx。 对于视频,流 ID 的格式为 1110yyyy

MPEG-2 标准定义了两种传送数据包化基本流的方法: 程序流传输流

程序流

程序流专为相对无错误的环境设计,例如本地文件存储。 在程序流中,PES 数据包被多路复用并组织成称为 pack 的单元。 程序流中的所有 PES 流都同步到同一时钟。

传输流

TS) (传输流适用于不可靠或容易出错的环境,例如网络广播。 此外,它们可以包含同步到不同时钟的多个程序。 传输流添加第二层数据包化 - PES 流打包在传输流数据包中,每个数据包的大小固定为 188 字节。 TS 数据包还可以包含程序信息流,如下一节所述。

每个 TS 数据包都有一个 4 字节标头,以及一个包含其他标头信息的可选适应字段。 多路复用器将程序 ID (PID) 分配给每个 PES 流或程序信息流。 PID 用于标识 TS 数据包,类似于流 ID 标识 PES 数据包的方式。 (如果传输流包含多个程序, 则流 ID 可能不唯一,但 PID 分配在传输流中是唯一的。)

计划特定信息

由于传输流可以携带多个程序,因此必须有一种方法将各种 PES 数据包与其所属的程序相关联。 这是使用标识程序流的表完成的。 此数据统称为“程序特定信息 (PSI) 。 PSI 数据在 TS 数据包中传输,就像 PES 数据一样。 有各种类型的 PSI 数据,包括:

  • 程序关联表 (PAT) 。 PAT 始终分配给 PID 0x000。 PAT 中的每个条目都是一个 PID,用于标识该程序的 PMT 数据包, (看到下一项) 。

  • PMT) (程序映射表。 每个 PMT 定义一个程序。 PMT 包含流列表;每个表项都提供该流的 PID,以及标识流类型的代码。 ISO/IEC 13818-1 定义了一些标准流类型;下表显示了一个缩写列表。

    stream_type 说明
    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 支持