帝国cms获取网站地址,资料库网站源码,做网站的图片分类,快速搭建网站视频教程一、引言
本文对MPEG2-PS格式进行简介。
进行简介之前#xff0c;请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的#xff0c;ISO/IEC是付费的#xff0c;所以我们主要阅读ITU提供的官方文档#xff0c;比如较新…一、引言
本文对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流简介》。