音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介

一、引言

本文对MPEG2-PS格式进行简介。

进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新版的《T-REC-H.222.0-202106-S!!PDF-E.pdf》。

《T-REC-H.222.0-202106-S!!PDF-E.pdf》总共有340页。本文下面所说的"页数"是指在pdf阅读器中显示的页数:

二、program stream

官方文档中把MPEG2-PS称为program stream。所以MPEG2-PS、program stream、程序流、节目流、PS流是同一个东西,只是叫法不同。

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第17页,PS流是一种流,专门用于在不太可能出错的环境中通信或存储一个节目的编码数据和其他数据。在出错可能性极低的环境,以及在系统编码处理(如软件处理)为主要考虑因素的环境中,PS流是专为通信或存储一个节目的编码数据和其他数据而设计的:

三、pack

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第90页,PS流由一个个pack(包装)组成,使用pack_start_code(包装起始码,值固定为0x000001BA)分割各个pack。PS流/PS文件以0x000001B9为结束标志(但是根据我的观察,FFmpeg生成的PS文件是没有这个结束标志的,所以结束标志实际不一定有):

TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的,这导致了它们对传输误码具有不同的抵抗能力。因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流。

四、pack header

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第283页,每个pack最开始的部分就是pack header:

所以,一个pack = 一个pack_header + 一个或多个PES_packet

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第90页,pack header包含下图所示部分:

其中,比较重要的属性有:

pack_start_code:占4字节,为一个pack的起始码。每个pack以固定的pack_start_code作为起始,其值固定为0x000001BA:

SCR

system_clock_reference_base属性(占33位)和system_clock_reference_extension属性(占9位)组成了system clock reference (SCR):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第33页,system clock reference (SCR)为PS流中的时间戳,从中可以推导出解码器的时间:

PS流中的SCR跟跟TS流中的PCR类似,关于PCR可以参考:《音视频入门基础:MPEG2-TS专题(8)------TS Header中的适配域》。

通过Elecard Stream Analyzer工具可以查看PS流中pack header的信息:

五、system header

当且仅当该pack为PS流中的第一个数据包时其pack header中会存在system header。根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第33页,system header包含PS流系统特性的信息:

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第91页,system header包含下图所示部分:

其中,比较重要的属性有:

system_header_start_code:占4字节,为system header的起始码。每个system header以固定的system_header_start_code作为起始,其值固定为0x000001BB:

header_length :占2字节,指定在这个字段后的字节数。所以,system header的长度 = header_length + 6:

stream_id:占1字节,指定PS流中各个ES流的类型和编号:

比如音频流取值为0xC0 至 0xDF,视频流取值为0xE0 至0xEF:

通过Elecard Stream Analyzer工具可以查看PS流中system header的信息:

六、PES packet

PS 流和 TS流的包都是基于 PES packet创建的。在PS流中,一个pack去掉pack header之后的数据就是PES packets。注意,一个pack可能包含一个或多个PES packet。

通过Elecard Stream Analyzer工具可以查看PS流中PES packet的信息:

关于PES packet的介绍可以参考:《音视频入门基础:MPEG2-TS专题(18)------PES流简介》。

相关推荐
shix .1 小时前
bilibili视频总结
音视频
lovep110 小时前
音频-文本对比学习:LARGE-SCALE CONTRASTIVE LANGUAGE-AUDIO PRETRAINING论文翻译和理解
音视频·glap·音频理解·音频对比学习·laion-audio·音频检索
codelancera1 天前
ffmpeg-调整视频分辨率
ffmpeg·音视频
天向上1 天前
手机端的音视频界面或者图片文档界面共享给大屏
智能手机·音视频·多平台·手机投屏·多屏互动
ECC&SM92 天前
Video_AVI_Packet(1)
笔记·音视频
Evaporator Core2 天前
Windows批处理脚本自动合并当前目录下由You-get下载的未合并的音视频文件
windows·音视频
ue星空2 天前
UE5配置MRQ编解码器输出MP4视频
ue5·音视频
CV实验室2 天前
CVPR 2025 | 北大团队SLAM3R:单目RGB长视频实时重建,精度效率双杀!
人工智能·计算机视觉·论文·音视频
chenchao_shenzhen2 天前
RK3568嵌入式音视频硬件编解码4K 60帧 rkmpp FFmpeg7.1 音视频开发
ffmpeg·音视频·rk3588·音视频开发·嵌入式开发·瑞芯微rk3568·硬件编解码
音视频牛哥2 天前
H.264、H.265 到 H.266:编码标准演进、RTSP支持与实时视频系统实战
音视频·大牛直播sdk·h.266编码·rtmp h.266·rtsp h.266·h.266解码·h.265和h.266差异