音视频入门基础: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流简介》。

相关推荐
ai产品老杨41 分钟前
深度解析:基于异构计算的工业级AI视频中台架构,支持GB28181/RTSP接入与X86/ARM/NPU全场景部署
人工智能·架构·音视频
RTC老炮42 分钟前
音视频FEC前向纠错算法Reed-Solomon原理分析
网络·算法·架构·音视频·webrtc
ai产品老杨1 小时前
深度解析:基于 Docker 与异构计算的 AI 视频管理平台架构实现(支持 GB28181/RTSP 与源码交付)
人工智能·docker·音视频
reasonsummer1 小时前
【教学类-160-09】20260417 AI视频培训-练习010“豆包AI视频《熊猫找朋友》+豆包图片风格:水墨画”
python·音视频·豆包视频
AI服务老曹2 小时前
解密万物互联:基于 Docker 的 GB28181/RTSP 统一协议网关与 AI 视频平台架构实践
人工智能·docker·音视频
深度智能Ai2 小时前
微软语音合成Microsoft-TTS-API文档
microsoft·ai·音视频
byte轻骑兵2 小时前
【LE Audio】BASS精讲[2]: 从协议规则到交互逻辑全解
人工智能·音视频·le audio·低功耗音频·蓝牙通话
民乐团扒谱机13 小时前
【微实验】基于matlab的音频提取与信号滤波处理
开发语言·matlab·音视频
clear sky .16 小时前
[linux]视频实时推流项目
linux·服务器·音视频
IT观测18 小时前
2026年六家视频音频格式转换软件品牌深度解析:格式转化器选型指南
音视频