一种MPEG-2基本流合成节目流的算法

(整期优先)网络出版时间:2019-07-28
/ 3

摘要 本文从MPEG-2的视频基本流(ES-Elementary Stream)的层次讨论了MPEG-2节目流(PS-Program Stream)的合成。在分析了MPEG-2码流的时间信息在音视频同步的作用后,提出了一种ES到PS包过程中时间信息的重建算法。同时,将打包后的数据包复用成完整的节目数据流。

关键字 同步;系统参考时钟;显示时间标签;解码时间标签;复用


1 前言

  随着数字电视技术日趋成熟,我国广播电视的数字化进程已经制定出了详细的时间表。当前广播电视主要通过有线电视网络的覆盖对城镇、乡进行广播。虽然传播中的信道编码具备多样性,但是广播电视的信源普遍采用MPEG-2国际标准处理的节目流(PS)方式。

  MPEG-2是一个框架性的标准,并没有规定系统复用的具体细节,所以基本流复用成节目流的方式不是唯一的。基于软件和硬件的实现方法都是可取的。本文通过分析MPEG-2码流结构,在ES合成PS过程中,提出了重建PES的时间信息、重建PS的时间信息和PES交织复用的一系列算法。保证了将基本流规范地复用成节目流。

2 MPEG-2码流结构

  MPEG-2的系统规范定义了三种数据包(PES、PS和TS)及两种数据流(PS和TS)。将具有共同时间基准的打包基本流(PES-Packetized Elementary Stream)复用而成的单一的数据流称为节目流(PS-Program Stream)。

  视频基本码流(ES-Elementary Stream)是指只包含1个信源编码器的数据流。每个ES都由若干个视频(包括I、P、或B帧)或者音频存储单元(AU-Access Unit)组成。每个AU包含了头部和编码数据两个部分。ES分组为PES之后,每个PES包是由包头、ES特有信息和包数据3个部分组成。ES到PES包的示意图见图1。

1013306656.jpg

  PES包头由起始码前缀、数据流识别及PES包长信息3部分构成。包起始码前缀是用23个连续“0”和1个“1”构成的;表示有用信息种类的数据流识别,是1个8bit的整数。由二者合成1个专用的包起始码,可用于识别数据包所属数据流(视频,音频,或其它)的性质及序号。包头和ES特有信息二者可合成1个数据头,包括时间信息预定显示时间PTS和解码时间DTS。PES流的包是可以任意长度的,甚至可以是整个序列的长度。

  PES进一步可以打成PS包或者TS包,形成节目流或传输流。这一特点决定了节目流PS和传输流TS之间是可以相互转换的。PS包由包头、系统头、PES包3部分构成。其中PS包头由PS包起始码、系统时钟基准(SCR-System Clock Reference)的基本部分、SCR扩展部分和PS复用码率4部分组成(见图2)。

1013309531.jpg

  一个完整的PS流应该包括三个部分:第一部分是节目流的头一个PS包,其中包含了PS包包头、系统头以及填充字节;第二部分是数目不等的含音视频数据的PS包。第三部分则是PS的结束标记,用32位字段来标示(0x000001B9)。PS包的长度可以根据需要设定,常见长度为2048字节。但是,PS包的长度最大值必须小于播放时间达到0.7s的数据量。

3 算法分析和实现

  在ES数据复用形成PS过程中,有ES、PES分组、PS三个层次,每种数据包都包含与时间相关信息。ES中有temporal_reference等;PES中有显示时间标签PTS和解码时间标签DTS;而PS层中有系统参考时钟SCR。码流复用过程中的一个关键技术就是从下一级的码流中或者下一级码流的编解码时序中获得的信息来形成上一级码流的时间同步信息。

3.1 PES时间信息重建

  在视频ES中,与时间信息或同步相关的是frame_rate_code、vbv_delay、temporal_reference和picture_coding_type等字段。frame_rate_code在视频基本码流的sequence_header()中,长度为4bit,表示视频序列帧速率;vbv_delay在视频基本码流的picture_header()中,长度为16bit,在播放开始时设置解码器缓冲区的初始分配;temporal_reference也在picture_header()中,长度为10bit,表示编码时图像输入的顺序;picture_coding_type在picture_header()中,长度3bit,表示编码图像帧的类型,对同步和计算PTS、DTS都起重要作用。

  音频ES则可以通过分析音频帧标题中的layer,sampling_frequency等字段计算获得时间同步信息。

3.1.1 视频PES时间信息的重建

  PES分组的时间同步信息是PTS和DTS。PTS(presentation_time_stamp)长33bit,表示此分组的第一个访问单元在系统目标解码器中的预定显示时间;DTS(decoding_time_stamp)长度也是33bit,表示此分组的第一个访问单元在系统目标解码器中的预定解码时间。PTS和DTS值都是以90KHz时钟周期作为计数值。

  PTS和DTS除了作为解码器在解码器中的显示和解码时间之外,PTS还是音视频交织时的同步判断依据。在交织音视频的PS包的时候,音视频PTS的差值小于一定范围(一般是0.1s视频对应的帧历时),就认为音视频同步。

  在MPEG-2标准的视频序列中,帧编码的顺序和解码后显示的顺序是不一样的。比如,在一个编码后生成的帧次序为I1P4B2B3P7B5B6I10B8B9的视频基本流中,解码时的显示顺序就是序列中的数字序号,我们可以从temporal_reference中获得这个序号(定义为Ref_Order)。根据MPEG-2的时序模型(见图3),我们知道视频的DTS值始终具有逐帧递增的特点,而PTS和DTS之间具有一定的差值关系。差值同帧速率、帧在帧所在图像组(GOP-Group of pictures)中的解码顺序以及帧在(GOP-Group of pictures)的帧序号(定义为GopFrameOrder)有关。因而,我们根据DTS确定PTS值。

1013305456.gif

图3、MPEG-2的时序模型


  首先,根据ES的frame_rate_code字段来计算视频帧的帧速率frame_rate。每一帧的帧历时为:frame_time=(1/frame_rate)*90000。MPEG-2视频压缩采用双向和单向两种预测编码,视频帧的编码顺序和显示顺序不同,视频帧的DTS和PTS的计算需要结合picture_header()中的参数得到。这些参数包括了:当前视频帧在码流中的帧数序号、在当前GOP中的视频帧序号、当前帧的类型。算法实现如下:

  1)、如果当前帧是I帧,并且是整个码流第一帧。

1013303405.gif(PtsIni指编码时设定的PTS初值)

1013304261.gif

  2)、如果当前帧是I帧或者P帧或者B帧,但不是第一帧,解码时间比显示时间的差值有恒定关系。应该注意,B帧的DTS并不显示在编码后的PES包中。

1013301965.gif

1013304915.gif

3.1.2 音频PES时间信息的重建

  将音频帧打包成一个PES分组,只需要读取合适长度的音频帧数据,在具有音频帧帧头标识的PES包上加上包头内容,如PTS,PES长度等字段的内容。其中PTS的算法如下:

1013307247.gif

  其中,AudioFrmOrder,当前音频帧的在完整码流的音频帧中的序号;AudioSamp,音频帧的样本点,与采样率有关;Sequence,时钟频率,90KHz;Sampling,音频采样率。

3. 2 PS时间信息重建

  为了使PS的码流具有良好的能控性,我们将每一个PES包的长度定为一个合适而固定的长度。在完成PES包的编码之后,我们需要将一个个视频PES包和音频PES包交织成PS包。

  在PS流中,时间同步信息是指SCR。SCR表示了系统的时间基准,其频率是27MHz。SCR是为了解决压缩编码图像同步问题而产生的。PTS、DTS以90KHz为单位。在PS包头插入42bit的SCR,从PS包头的第5到第10字节,表明SCR字段最后一个字节离开编码器的时间。MPEG-2编解码的时序也表明在解码端解码时,用本地SCR相位和输入的瞬时SCR相位锁相比较确定解码的同步。SCR的值由复用数据率和统一系统时钟的27MHz频率确定。采用时间标志PTS、DTS和SCR是解决音视频同步、帧正确显示、防止系统目标解码器缓存器上溢或下溢的好方法。

  SCR编码的时候被分成两个部分,一部分以系统时钟的1/300为单位,称为SCR_Base;一部分以系统时钟为单位,称为SCR_Ext。SCR的计算方法如下:

1013308575.gif

  令i=0,即可以得到当前i'字节编码的SCR值的计算公式,从而得到:

1013303994.gif

1013316410.gif

  第一个PS包定义SCR初值、PS平均码率,其系统头规定了比特率范围和音视频缓冲区的大小。我们以GOP为单位,在一定范围内修正其码率,再根据该码率计算SCR,确保SCR与PTS、DTS不发生翻转。

4 结束语

  按照上述算法,在VC++6.0环境下,编码完成PS合成软件。合成的PS在各种播放软件中播放流畅,同时也满足应用广泛的神龙卡、Opitibase等播放卡的硬播放需求。测试结果表明,本软件合成PS的速度达到TMpgEnc的合成工具的1.3~1.5倍,而且码流的规范性上也强于TMpgEnc,解决了TMpgEnc合成的码流在硬播放中找点播放时常出现的不同步、抖动、和卡死等问题。本软件已经被广泛应用于州市各级电视台。实践证明,具有非常可靠的稳定性和规范性。

参考文献

【1】ISO/IEC 13818-1,13818-2, Generic coding of moving pictures and associated audio[S]. 1994

【2】 ISO/IEC 11172-3, Generic coding of moving pictures and associated audio for digital storage media at up to about 1.5Mbit/s[S]. 1994-11-13

【3】郭斌. MPEG-2压缩编码技术.北京:电视制播数字化网络化技术文集,2003-08