“本文转载自:[jimte_pro]的网络流媒体--PS封装格式”
本文相关系列:
1.PS格式概述
MPEG2-PS:一种多路复用数字音视频等的封装容器。PS是Program Stream(程序流或节目流)的简称。程序流将一个或多个分组但有共同的时间基准的基本数据流(PES)合并成一个整体流。它是为可靠稳定的储存媒介如光盘而设计的。
ES:Elementary Stream(基本码流),是由编码器输出的原始基础码流,它只含有解码器所必需的、并与原始图象或原始音频相接近的信息。由由压缩器输出的用于传送 单路视音频信号的原始码流。ES只包含一种内容的数据流,如只含视频或只含音频等。
PES:Packetized Elementary Streams (分组的ES),ES形成的分组称为PES分组,是用来传递ES的一种数据结构。PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。PES包由包头和payload组成。
PS:Program Stream(节目流),PS流由PS包组成,而一个PS包又由若干个PES包组成(到这里,ES经过了两层的封装)。PS包的包头中包含了同步信息与时钟恢复信息。一个PS包最多可包含具有同一时钟基准的16个视频PES包和32个音频PES包。
2.PS流基本封装格式
PS用到的基本术语如下:
PSH:Program Stream pack Header ,是PS包的包头;
PS system header:Partial system header,系统头;
PSM:Program Stream Map,节目流映射( PSM)提供节目流中基本流的描述及其相互关系。当在传输流中承载时,此结构将不修正。当 stream_id 值为 0xBC 时, PSM 作为 PES 包存在。
PES Header:PES Packetized Elementary Streams,PES流的基本单位是PES包。PES包由包头和payload组成。
PS封装结构:
一般来说一个完整的PS包封装格式如下所示:
- 视频关键帧的封装:

- 视频非关键帧的封装:

3.ps格式描述
3.1 PS header格式
(1)开始的数据:sync bytes
(2)SCR数据

(3)速率

PSH一般来说最少需要包含14个Byte,扩展长度根据stuffing lenght计算,最长为7个byte(stuffing lenght 只有3位长度),这些字段可以用于存放帧序号等参数。下图为一段码流的PS头:

3.2 Partial system headerg格式

(1)开始数据

(2)rate_bound

(3)其他数据


下图为一段码流的系统头:

3.3 Program Stream Map


下图为一段PS的map:

3.4 PS PES Header


PES头如下图所示:
