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

=================================================================

音视频入门基础:MPEG2-TS专题系列文章:

音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载

音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流

音视频入门基础:MPEG2-TS专题(5)——FFmpeg源码中,判断某文件是否为TS文件的实现

音视频入门基础:MPEG2-TS专题(6)——FFmpeg源码中,获取MPEG2-TS传输流每个transport packet长度的实现

音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现

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

音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现

音视频入门基础:MPEG2-TS专题(10)——PSI、SI简介

音视频入门基础:MPEG2-TS专题(11)—— TS中的Section

音视频入门基础:MPEG2-TS专题(12)—— FFmpeg源码中,把各个transport packet组合成一个Section的实现

音视频入门基础:MPEG2-TS专题(13)——FFmpeg源码中,解析Section Header的实现

音视频入门基础:MPEG2-TS专题(14)——PAT简介

音视频入门基础:MPEG2-TS专题(15)——FFmpeg源码中,解析Program association section的实现

音视频入门基础:MPEG2-TS专题(16)——PMT简介

音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现

音视频入门基础:MPEG2-TS专题(18)——PES流简介

音视频入门基础:MPEG2-TS专题(19)——FFmpeg源码中,解析TS流中的PES流的实现

音视频入门基础:MPEG2-TS专题(20)——ES流简介

音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现

音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现

音视频入门基础:MPEG2-TS专题(23)——通过FFprobe显示TS流每个packet的信息

音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现

音视频入门基础:MPEG2-TS专题(25)——通过FFmpeg命令使用UDP发送TS流

音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流

=================================================================

注:本文有部分内容引用了维基百科: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_length + 1)。当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值为基准的偏移量。

音视频同步,有三种方法:1.将视频同步到音频上,以音频的播放速度为基准来同步视频;2.将音频同步到视频上,以视频的播放速度为基准来同步音频;3.将视频和音频同步外部的时钟上,选择一个外部时钟为基准,视频和音频的播放速度都以该时钟为标准。PCR同步就是第3种音视频同步方法,即将视频和音频同步外部时钟。但是播放器可以不通过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,可以由编码器插入,被解码器丢弃。所以适配域还有一个用途是给不足 188 字节的数据做填充:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值