☰
MPEG PS(Program Stream)介绍
2026/10/14 2:04:18 网站建设 项目流程

MPEG PS(Program Stream)是MPEG-2标准(ISO/IEC 13818-1)中定义的一种容器格式,主要用于将音视频等基本流复用为一个单一数据流,以便于存储或传输。


🧱封装基本单元与流程
MPEG PS封装的核心思想是将PES(Packetized Elementary Stream)包打包成PS 包。PES包本身是由原始的ES(Elementary Stream)(如H.264视频流或G.711音频流)加上PES包头(包含时间戳等信息)封装而成的。

封装流程通常遵循以下规则:

  • 视频关键帧(如H.264的IDR帧):其PS包结构通常为PS Header→System Header→PSM→PES Header+视频数据(如SPS, PPS, IDR帧)。这是因为SPS和PPS是解码器初始化所必需的信息,需要与关键帧放在一起以确保能正确开始解码。
  • 视频非关键帧(如P帧、B帧):结构较简单,通常为PS Header→PES Header+视频数据。
  • 音频帧:音频数据会被打包成音频PES包,通常与视频PES包交错排列在PS包中,形如PS Header→PES(video)→PES(audio)

🧱MPEG-PS 的分层结构

MPEG-PS Program Stream ┌──────────────────────────────────────────┐ │ Pack (以0x000001BA开头) │ │ ┌───────────────────────────────────┐ │ │ │ Pack Header (SCR, mux_rate) │ │ │ └───────────────────────────────────┘ │ │ ┌───────────────────────────────────┐ │ │ │ System Header (可选,全局流信息) │ │ │ └───────────────────────────────────┘ │ │ ┌────────────────────────────┐ ┌────────────────────────────┐ │ │ PES Packet (Video) │ │ PES Packet (Audio) │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ PES Header (PTS/DTS) │ │ │ │ PES Header (PTS/DTS) │ │ │ │ └───────────────────────┘ │ │ └───────────────────────┘ │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ Video ES (如I/P/B帧) │ │ │ │ Audio ES (音频帧) │ │ │ │ └───────────────────────┘ │ │ └───────────────────────┘ │ │ └────────────────────────────┘ └────────────────────────────┘ └──────────────────────────────────────────┘

🧱MPEG-PS 可能的分包方式

(1) 每个NAL组成一个PES包

SPS,PPS都分别作为一个PES包。
I帧被拆分成了多个PES,每个PES分包小于1400。当PS作为RTP负载用于网络流传输时,RTP 包的总大小通常受网络 MTU( Maximum Transmission Unit )1400的限制。

(1) 多个NAL组成一个PES包

有下图可见,多个SPS, PPS,I, P, B 帧共同组成了一个PES。

这个PES很大(10514 Byte)


🧱一个 MPEG-PS 的十六进制片段,并逐字段解析

示例:MPEG-PS 文件开头部分(十六进制):

0000: 00 00 01 BA 44 00 04 00 04 01 01 89 C3 F8 00 00 0010: 01 BB 00 0C 80 04 E2 1F FF FF C4 F9 00 00 01 E0 0020: 00 20 80 80 05 21 00 07 FF E1 00 00 01 67 4D 00 0030: E0 2C 0D 0D 0D 13 01 01 01 01 12 00 00 01 B5 14

(1) Pack Header (以0x00 00 01 BA开始)

00 00 01 BA → pack_start_code 44 00 04 00... → SCR (System Clock Reference,系统时钟参考) 01 01 89 → mux_rate
  • 0x000001BA:Pack start code。
  • SCR:对应时间戳基准,用于系统时钟同步。
  • mux_rate:表示码率,通常表示播放码率对齐。

(2) System Header(以0x00 00 01 BB开始)

00 00 01 BB → system_header_start_code
  • 定义了整体系统层 码率限制等。
  • 在文件开头区域经常出现一次,或者每个I帧前面出现,不一定每个 pack 都有。


参考 ITU H.222.0 Table 2-40

(3) Program stream map (PSM)(以0x00 00 01 BC开始)

00 00 01 BC → program_stream_map_start_code
  • 在文件开头区域经常出现一次,或者每个I帧前面出现,不一定每个 pack 都有。

  • PSM的核心作用主要体现在流识别与导航​:
    解码器通过解析PSM,可以知道当前PS流中包含了几个音视频流、每个流是什么编码格式(如H.264、H.265、G.711音频等),以及它们对应的PES包头的stream_id是什么。
    这样,当解码器在流中遇到一个以0xE0开头的PES包时,就能根据PSM知道这里面是H.264视频数据,并交给相应的视频解码器处理

  • map_stream_id: 总是0xBC

  • 举个例子(伪解析)

假设我们解析到一个 PSM:

packet_start_code_prefix=0x000001stream_id=0xBCprogram_stream_map_length=24elementary_stream_map_length=12// elementary_stream_info[0]:stream_type=0x1B(H.264)elementary_stream_id=0xE0// elementary_stream_info[1]:stream_type=0x04(MPEG-2Audio)elementary_stream_id=0xC0

解释:

0xE0 (Video stream 0) → H.264 视频流
0xC0 (Audio stream 0) → MPEG-2 音频流
这样解码器就可以正确地把数据交给相应的解码模块

  • 一些常见的 stream_type 值
stream_type含义
0x01MPEG-1 Video
0x02MPEG-2 Video
0x03MPEG-1 Audio
0x04MPEG-2 Audio
0x0FAAC Audio
0x1BH.264/AVC Video
0x24H.265/HEVC Video
0x90~0xFF私有或厂商扩展类型

详细参考 ITU H.222.0 Table 2-41

(4) PES Packet(视频流,start code =0x00 00 01 E0)

00 00 01 E0 → video_stream_id 00 20 → PES_packet_length = 32
  • 0xE0表示视频流 0(第一个视频轨道)。
  • PTS_DTS_flags表示是否包含PTS/DTS
  • PES Header 包含时间戳:
    • PTS(Presentation Time Stamp)。
    • DTS(Decoding Time Stamp,若有B帧)。

详细参考 ITU H.222.0 chapter 2.4.3.6 Table 2-21。 TS和PS共用同一个标准.

(5) ES:视频数据片段 (以h264为例)

00 00 01 67 → sps_header_code (h264 Video)

PES Payload 部分就是编码后的h264 Video ES 数据。
H.264采用 Annex B 格式

  • 0x00000167:H264 SPS NAL start code
  • 0x00000168:H264 PPS NAL start code
  • 0x00000165:H264 I frame NAL start code

⏰时间信息与同步
PS封装中包含重要的时间信息以实现音视频同步:

  • SCR (System Clock Reference):存在于PS Header中,用于系统时钟同步。
  • PTS (Presentation Time Stamp)和DTS (Decoding Time Stamp):存在于PES包头中,分别指示显示时间和解码时间,对于音视频同步至关重要。

🌐主要应用场景

  • 安防监控与GB28181:在安防领域,尤其是在*GB28181**标准中,规定可采用PS封装 over RTP进行视音频数据的网络传输。参考 GB28181 RTP的封装规范
  • DVD光盘存储:PS格式最初就是为DVD这类可靠稳定的存储介质设计的,但是DVD基本上没人用了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询