音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS

一、引言

当TS Header中的adaptation_field_control属性的值为'10'或'11' 时,TS Header包含adaptation field(适配域):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第50到51页,适配域包含下图所示部分:

adaptation field(适配域) = 固定部分(固定2字节) + 可选部分 + 填充字节(stuffing_byte)

二、适配域的固定部分

适配域中的固定部分 = adaptation_field_length + discontinuity_indicator + random_access_indicator + elementary_stream_priority_indicator + PCR_flag + OPCR_flag + splicing_point_flag + transport_private_data_flag + adaptation_field_extension_flag

固定部分中的属性加起来总共2字节。

其中:

adaptation_field_length:占8位,为适配域长度,单位为字节,不包含当前字节(也就是说适配域长度不包含adaptation_field_length这个字节)。当adaptation_field_control的值为"11"时,适配域和载荷都存在,Adaptation_field_length的取值范围是0到182。当adaptation_field_control的值为"10"时,仅有适配域,Adaptation_field_length为183:

discontinuity_indicator:占1位,为不连续指示位。如果根据连续性计数器或PCR计算,确认当前分组处于不连续状态,则取值为1:

random_access_indicator:占1位,为随机访问指示位。如果当前分组是一个PES的起始,取值为1:

elementary_stream_priority_indicator:占1位,为ES优先级指示位。取值为1时ES优先级更高:

PCR_flag:占1位,为PCR标识。值为1表示适配域中有PCR域:

OPCR_flag:占1位,为OPCR标识。值为1表示适配域中有OPCR域:

splicing_point_flag:占1位,为接续点标识。值为1表示适配域中有接续倒数计数器域:

transport_private_data_flag:占1位,为传输私有数据标识,值为1表示适配域中有私有数据域:

adaptation_field_extension_flag:占1位,为适配域扩展标识,值为1表示适配域中有适配域扩展域:

三、适配域的可选部分

(一)PCR

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第32页,program clock reference (节目时钟参考,PCR)为MPEG2-TS传输流中的时间戳,从中可以推导出解码器的时间:

PCR使得解码后的内容可以正确地同步播放。最多每100ms,接收方会从TS分组(transport packet)的适配域中得到特定节目的PCR值,PCR的PID由该节目的PMT中的PCR_PID域指定。解码系统应当基于PCR生成高精度的系统校时时钟(System Timing Clock,STC),用于同步声音ES和视频ES的内容。STC是MPEG-2系统里校时的基准。例如,表示时间戳(Presentation timestamp,PTS)的值即是以PCR值为基准的偏移量。

当适配域的固定部分中的PCR_flag属性的值为1时,适配域包含PCR域。PCR域 = 33位的低精度部分(program_clock_reference_base) + 6位的填充部分(reserved) + 9位的高精度部分(program_clock_reference_extension)

program_clock_reference_base属性为PCR_base(i),program_clock_reference_extension属性为PCR_ext(i):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第39页,system_clock_frequency(系统时钟频率)的值以Hz为单位,并应满足以下约束:

27 000000 -- 810 ≤ system_clock_frequency ≤ 27 000000 + 810

system_clock_frequency随时间的变化率≤ 75 × 10^--3 Hz/s

也就是说system_clock_frequency的值约为27MHz:

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第40页,有如下公式:

PCR(i) = PCR_base(i) × 300 + PCR_ext(i)

PCR_base(i) = ((system_clock_frequency × t(i)) ÷ 300) % 2^33
PCR_ext(i) = ((system_clock_ frequency × t(i)) ÷ 1) % 300

所以:

PCR = program_clock_reference_base × 300 + program_clock_reference_extension

更多关于PCR的测量方法可以参考:《https://download.tek.com/document/25W_14617_1.pdf

(二)OPCR

OPCR为原PCR(Original PCR),格式与PCR相同,在TS复制时使用。当适配域的固定部分中的OPCR_flag属性的值为1时,适配域包含OPCR域。OPCR域 = 33位的original_program_clock_reference_base + 6位的reserved + 9位的original_program_clock_reference_extension:

(三)Splice countdown

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第55页,Splice countdown为接续倒数计时器,指示从当前分组起多少个分组之后接续点出现(取值可为负)。当适配域的固定部分中的splicing_point_flag属性的值为1时,适配域包含Splice countdown域:

四、适配域的填充字节(stuffing_byte)

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第61页,stuffing_byte为填充字节。其每个位的值都为1,可以由编码器插入,被解码器丢弃:

相关推荐
小曾同学.com3 小时前
【每天学点‘音视频’】前向纠错 和 漏包重传
音视频·fec·前向纠错
胖虎13 小时前
(二十)深入了解 AVFoundation-编辑:使用 AVMutableVideoComposition 实现视频加水印与图层合成(下)——实战篇
音视频·视频编辑·视频添加水印
AI浩4 小时前
跟踪不稳定目标:基于外观引导的运动建模实现无人机视频中的鲁棒多目标跟踪
目标跟踪·音视频·无人机
小学生波波6 小时前
如何免费给视频加字幕
音视频·免费字幕·加字幕·剪映加字幕
0x000712 小时前
C#项目集成海康SDK指南:从搭建环境到实现视频预览、录制、截屏
音视频
音视频牛哥13 小时前
如何计算 PCM 音频与 YUV/RGB 原始视频文件大小?
音视频·pcm·大牛直播sdk·rtsp播放器·rtmp播放器·yuv rgb计算大小·pcm计算大小
音视频牛哥15 小时前
从H.264到AV1:音视频技术演进与模块化SDK架构全解析
人工智能·音视频·大牛直播sdk·rtsp h.265·h.264 h.265 av1·h.265和h.266·enhenced rtmp
Antonio91516 小时前
【音视频】WebRTC 一对一通话 peerconnection_client 分析
音视频·webrtc
恒拓高科WorkPlus1 天前
局域网视频软件BeeWorks,内网顺畅沟通
音视频
关键帧-Keyframe1 天前
音视频面试题集锦第 26 期
面试·音视频