ts流格式详解

ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。

   ts文件分为三层:ts层Transport Stream、pes层 Packet Elemental Stream、es层 Elementary Stream. es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息

注: 详解如下

 (1)ts层     ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。ts header固定4个字节;adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充;payload是pes数据。

ts header

sync_byte 8b 同步字节,固定为0x47
transport_error_indicator 1b 传输错误指示符,表明在ts头的adapt域后由一个无用字节,通常都为0,这个字节算在adapt域长度内
payload_unit_start_indicator 1b 负载单元起始标示符,一个完整的数据包开始时标记为1
transport_priority 1b 传输优先级,0为低优先级,1为高优先级,通常取0
pid 13b pid值
transport_scrambling_control 2b 传输加扰控制,00表示未加密
adaptation_field_control 2b 是否包含自适应区,‘00’保留;‘01’为无自适应域,仅含有效负载;‘10’为仅含自适应域,无有效负载;‘11’为同时带有自适应域和有效负载。
continuity_counter 4b 递增计数器,从0-f,起始值不一定取0,但必须是连续的

     ts层的内容是通过PID值来标识的,主要内容包括:PAT表、PMT表、音频流、视频流。解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然后就可以找到音视频流了。PAT表的PID值固定为0。PAT表和PMT表需要定期插入ts流,因为用户随时可能加入ts流,这个间隔比较小,通常每隔几个视频帧就要加入PAT和PMT。PAT和PMT表是必须的,还可以加入其它表如SDT(业务描述表)等,不过hls流只要有PAT和PMT就可以播放了。

  • PAT表:他主要的作用就是指明了PMT表的PID值。

  • PMT表:他主要的作用就是指明了音视频流的PID值。

  • 音频流/视频流:承载音视频内容。

adaption

adaptation_field_length 1B 自适应域长度,后面的字节数
flag 1B 取0x50表示包含PCR或0x40表示不包含PCR
PCR 5B Program Clock Reference,节目时钟参考,用于恢复出与编码端一致的系统时序时钟STC(System Time Clock)。
stuffing_bytes xB 填充字节,取值0xff

     自适应区的长度要包含传输错误指示符标识的一个字节。pcr是节目时钟参考,pcr、dts、pts都是对同一个系统时钟的采样值,pcr是递增的,因此可以将其设置为dts值,音频数据不需要pcr。如果没有字段,ipad是可以播放的,但vlc无法播放。打包ts流时PAT和PMT表是没有adaptation field的,不够的长度直接补0xff即可。视频流和音频流都需要加adaptation field,通常加在一个帧的第一个ts包和最后一个ts包里,中间的ts包不加。

PAT格式

table_id 8b PAT表固定为0x00
section_syntax_indicator 1b 固定为1
zero 1b 固定为0
reserved 2b 固定为11
section_length 12b 后面数据的长度
transport_stream_id 16b 传输流ID,固定为0x0001
reserved 2b 固定为11
version_number 5b 版本号,固定为00000,如果PAT有变化则版本号加1
current_next_indicator 1b 固定为1,表示这个PAT表可以用,如果为0则要等待下一个PAT表
section_number 8b 固定为0x00
last_section_number 8b 固定为0x00
开始循环
program_number 16b 节目号为0x0000时表示这是NIT,节目号为0x0001时,表示这是PMT
reserved 3b 固定为111
PID 13b 节目号对应内容的PID值
结束循环
CRC32 32b 前面数据的CRC32校验码

PMT格式

table_id 8b PMT表取值随意,0x02
section_syntax_indicator 1b 固定为1
zero 1b 固定为0
reserved 2b 固定为11
section_length 12b 后面数据的长度
program_number 16b 频道号码,表示当前的PMT关联到的频道,取值0x0001
reserved 2b 固定为11
version_number 5b 版本号,固定为00000,如果PAT有变化则版本号加1
current_next_indicator 1b 固定为1
section_number 8b 固定为0x00
last_section_number 8b 固定为0x00
reserved 3b 固定为111
PCR_PID 13b PCR(节目参考时钟)所在TS分组的PID,指定为视频PID
reserved 4b 固定为1111
program_info_length 12b 节目描述信息,指定为0x000表示没有
开始循环
stream_type 8b 流类型,标志是Video还是Audio还是其他数据,h.264编码对应0x1b,aac编码对应0x0f,mp3编码对应0x03
reserved 3b 固定为111
elementary_PID 13b 与stream_type对应的PID
reserved 4b 固定为1111
ES_info_length 12b 描述信息,指定为0x000表示没有
结束循环
CRC32 32b 前面数据的CRC32校验码


(2)pes层

     pes层是在每一个视频/音频帧上加入了时间戳等信息,pes包内容很多,我们只留下最常用的。

pes start code 3B 开始码,固定为0x000001
stream id 1B 音频取值(0xc0-0xdf),通常为0xc0
视频取值(0xe0-0xef),通常为0xe0
pes packet length 2B 后面pes数据的长度,0表示长度不限制,
只有视频数据长度会超过0xffff
flag 1B 通常取值0x80,表示数据不加密、无优先级、备份的数据
flag 1B 取值0x80表示只含有pts,取值0xc0表示含有pts和dts
pes data length 1B 后面数据的长度,取值5或10
pts 5B 33bit值
dts 5B 33bit值

     pts是显示时间戳、dts是解码时间戳,视频数据两种时间戳都需要,音频数据的pts和dts相同,所以只需要pts。有pts和dts两种时间戳是B帧引起的,I帧和P帧的pts等于dts。如果一个视频没有B帧,则pts永远和dts相同。从文件中顺序读取视频帧,取出的帧顺序和dts顺序相同。dts算法比较简单,初始值 + 增量即可,pts计算比较复杂,需要在dts的基础上加偏移量。

     音频的pes中只有pts(同dts),视频的I、P帧两种时间戳都要有,视频B帧只要pts(同dts)。打包pts和dts就需要知道视频帧类型,但是通过容器格式我们是无法判断帧类型的,必须解析h.264内容才可以获取帧类型。

举例说明:

                         I          P          B          B          B          P

读取顺序:         1         2          3          4          5          6

dts顺序:           1         2          3          4          5          6

pts顺序:           1         5          3          2          4          6

点播视频dts算法:

dts = 初始值 + 90000 / video_frame_rate,初始值可以随便指定,但是最好不要取0,video_frame_rate就是帧率,比如23、30。

pts和dts是以timescale为单位的,1s = 90000 time scale , 一帧就应该是90000/video_frame_rate 个timescale。

用一帧的timescale除以采样频率就可以转换为一帧的播放时长

点播音频dts算法:

dts = 初始值 + (90000 * audio_samples_per_frame) / audio_sample_rate,audio_samples_per_frame这个值与编解码相关,aac取值1024,mp3取值1158,audio_sample_rate是采样率,比如24000、41000。AAC一帧解码出来是每声道1024个sample,也就是说一帧的时长为1024/sample_rate秒。所以每一帧时间戳依次0,1024/sample_rate,…,1024*n/sample_rate秒。

直播视频的dts和pts应该直接用直播数据流中的时间,不应该按公式计算。

(3)es层

     es层指的就是音视频数据,我们只介绍h.264视频和aac音频。

h.264视频:

     打包h.264数据我们必须给视频数据加上一个nalu(Network Abstraction Layer unit),nalu包括nalu header和nalu type,nalu header固定为0x00000001(帧开始)或0x000001(帧中)。h.264的数据是由slice组成的,slice的内容包括:视频、sps、pps等。nalu type决定了后面的h.264数据内容。

F 1b forbidden_zero_bit,h.264规定必须取0
NRI 2b nal_ref_idc,取值0~3,指示这个nalu的重要性,I帧、sps、pps通常取3,P帧通常取2,B帧通常取0
Type 5b 参考下表

nal_unit_type 说明
0 未使用
1 非IDR图像片,IDR指关键帧
2 片分区A
3 片分区B
4 片分区C
5 IDR图像片,即关键帧
6 补充增强信息单元(SEI)
7 SPS序列参数集
8 PPS图像参数集
9 分解符
10 序列结束
11 码流结束
12 填充
13~23 保留
24~31 未使用

     红色字体显示的内容是最常用的,打包es层数据时pes头和es数据之间要加入一个type=9的nalu,关键帧slice前必须要加入type=7和type=8的nalu,而且是紧邻。

在MPEG-2标准中,有两种不同类型的码流输出到信道:一种是节目码流(Program Stream, PS),适用于没有误差产生的媒体存储,如DVD等存储介质;另一种是传送流(Transport stream, TS),适用于有信道噪声产生的传输,目前TS流广泛应用于广播电视中,如机顶盒等。

一、基本概念

  ES流(Elementary Stream):基本码流,可以理解为编码后的裸数据;

  PES流:分割打包的ES流,加入了PES头。PES包是可变长度的,PES头中最重要的部分是显示时间标记(Presentation Time Stamp, PTS)和解码时间标记(Decode Time Stamp, DTS),有了PTS和DTS,再加上节目时钟参考PCR,解码器就能从TS流中重建视频流;

  TS流(Transport Stream):传输流。固定包长度为188B,TS流固定包长度的好处是便于找到帧的起始位置,易于从包丢失中恢复,适合于有误码的环境。

二、TS流格式

2.1 TS流格式

 

  TS header是4byte,分别是1byte的同步字节,1bit传输数据包差错指示, 1bit净荷单元起始指示, 1bit传送优先权, 13bit包标识符PID, 2bit传送加扰控制,2bit调整字段控制和4bit连续计数器。 

        同步字节(sync byte): 1B,其值固定为0x47,该字段是MPEG-2 TS传送包标识符;

  传输误差指示符(transport error indicator): 1bit,其值为1时,表示在相关的传送包中至少有一个不可纠正的错误位,只有在错误纠正之后,该位才能被重新置0;

  有效载荷单元起始符(payload unit start indicator: 1bit, 当TS包带有PES包数据时,置为1,表示TS包的有效净荷以PES包的第一个字节开始;置为0,表示该TS包的开始不是PES包;当TS包带有PSI数据时,置为1,表示TS包带有PSI部分的第一个字节,即第一个字节带有指针pointer_field;置为0,表示TS包不带有一个PSI部分的第一个字节,即有效净荷中没有指针pointer_field。空包时,该位置为0;

  传输优先级(transport_prority): 1bit, 置为1,表示相关的包比其他具有相同PID,但是此字段置0的包有更高的优先级;

  PID: 13bit, 表示传送包的有效净荷中的数据的类型。具体如下表:

PID取值 

PID值使用描述

0x0000

节目关联表(program association table, PAT)

0x0001

条件访问表(conditional access table, CAT)

0x0002

传送流描述表(transport stream description table, TSDT)

0x0003~0x000F

保留

0x0010~0x1FFE

可以分配为network PID, Program map PID,  elementary PID, 或其它

0x1FFF

空包(8191)

  PID信息非常关键,它直接表征本次TS包的用途。比较重要的是PAT和PMT,之后会有说明;

  传输加扰控制(transport scrambling control): 2bit,该字段用来指示传送流包有效净荷的加扰方式;

  自适应字段控制(adaption field control): 2bit,表示传送流包首部是否跟随有调整字段和/或有效净荷。具体如下表:

调整字段值

描述

00

保留

01

没有调整字段,仅含有184B长度的有效净荷

10

没有有效净荷,仅含有183B长度的调整字段

11

0~182B的调整字段后为有效净荷

  连续计数器(continuity counter): 4bit,随着具有相同PID TS包的增加而增加,达到最大则恢复为0.

2.2 TS流调整字段

  在MPEG-2 TS中,为了传送打包后长度不足188B的不完整TS,或者为了在系统层插入节目时钟参考(program clock reference, PCR),需要在TS包中插入可边长字节的调整字段。调整字段其中一个重要作用是解决编解码器的音视频同步问题。一般在视频帧中的TS包的调整字段中,每隔一定传输时间,传送系统时钟27MHz的一个抽样值给接收机,作为解码器解码时的时钟参考信息PCR。PCR通常每隔100ms至少被传输一次。PCR的数值所表示的是解码器在读完这个抽样值的最后那个字节时,解码器本地时钟所应处的状态。通常情况下,PCR不直接改变解码器的本地时钟,而是作为参考基准来调整本地时钟,使之与PCR趋于一致。

2.3 PES包格式

  PES包的第5个字节标识一整个PES包的长度,一般来说,一个PES包包含一帧图像,获取了PES的包长度Len,当接收到Len个字节后,将接收到的字节组成一个block,放入FIFO中,等待解码线程解码。DTS和PTS也在PES包中传送。

三、节目专用信息(Program Special Information, PSI)

  前边提到了PAT和PMT,它们都是PSI之一。MPEG-2 TS传送TS包,这些包携带两类信息:已压缩的音视频(PES)和与之相关的符号化表(PSI),由传送包的PID来识别。

3.1 节目关联表(Program Association Table, PAT)

  PAT定义了TS中的所有节目,其值为0x0000,是PSI信息的根结点。其格式如下图。

  上图中,程序在解析到N环部分的时候,会读取并保存节目列表及其PID。PAT信息在TS流中隔一段时间就会传送,接收机在接收时,以接收PAT表为起始。PAT表列出了TS流中所有的节目列表,以及节目对应的PID值,这个PID值表征的是该节目对应的PMT表的PID值(PMT表稍后说明)。PAT表与PMT的关系如下图。

3.2 节目映射表(Program Map Table, PMT)

  PMT提供一路节目包含的所有原始码流的PID映射表,其格式如下图。

 

  程序在读取N环的时候会读取该节目所有的码流列表及其PID,解析的时候可以根据PID来分离。这N环描述符包括的信息如下图所示。节目时钟参考PCR的PID和视频的PID是相等的。由PAT得出所有的节目列表,选定收看的节目后,筛选出等于该节目PID的TS包,就可以得到该节目的所有码流的PID映射表,这样接收机就可以只接收PID等于该节目的码流的TS包即可收看该节目。

 

 四、音视频同步

  前边介绍的是TS流用的最多的格式,以及PAT和PMT等,现在说一下TS流在解码时是如何做到音视频同步的。

4.1 时间标记与PTS和DTS

  时间标记本身是以90KHz单位表达的33bit二进制值,是MPEG-2系统层提供的一种机制,以便确保在解码器上相关的原始流之间正确的同步。时间标记有两类:一个是解码时间标记(DTS,Decode Time Stamp), 它规定了在某时间应该从解码器缓冲区中删除一个访问单元并解码,但是不进行播放;另一个是显示时间标记(PTS,Present Time Stamp),它规定了在某时刻,解码的图像最后从临时缓存中释放出来并进行播放。这样PTS将总是比与之相关的DTS大。

4.2 音视频同步

  在MPEG-2编码器中有一个系统时钟,该系统时钟用来生成一个共同的时序以便音视频能够正常的解码与播放。因为编码器有共同的系统时钟STC,解码器中的时钟可以根据PCR重新恢复。所以端到端的同步分为以下几个步骤:

(1) 解码器接收到PCR时,恢复系统时钟;

(2) 解码器接收到PTS/DTS时,存入对应的堆栈;

(3) 每幅图像解码前,用其对应的DTS与系统时钟STC进行比较,当两者相等时,就开始解码;

(4) 每幅图像播放前,用其对应的PTS与系统时钟STC进行比较,当两者相等时,就开始播放。

  实际应用时,解码器一般都有自主的系统时钟频率,不能直接拿编码器的PCR设置为解码器的系统时钟STC,而是利用接收到的PCR值,通过锁相环PLL校正解码器的系统时钟STC。

  VLC调试接收TS流的代码分析见链接:vlc源码分析(四) 调用libts接收TS流,对理解上述过程非常有帮助。

1、引言

  IPTV业务是指基于宽带互联网与宽带接入,以机顶盒或其它具有视频编解码能力的数字化设备作为终端,通过聚合SP的各种流媒体服务内容和增值应用,为用户提供多种互动多媒体服务的宽带增值业务。

  IPTV能否成功开展的一个关键点是采用什么样的视频编解码标准,因为IPTV业务需要在有限的网络带宽条件下提供清晰的图像质量,对编码效率有较高的要求;同时,视频编码标准的选择会直接影响到整个IPTV产业链的发展,涉及从内容编码到流媒体服务器以及组播复制点直至用户机顶盒各个层面,要从某一种编码格式转换为另一种编码格式,需要进行的系统升级甚至硬件更换的成本是极其巨大的。也正因为这一点,视频编码标准的选择一直是IPTV业界关注的首要问题。

  2、视频编解码标准简介

  视频编解码标准有很多种,目前国内IPTV产业中主要采用了MPEG-4、H.264技术以及中国提出的具有自主知识产权的标准AVS这3种标准,相对于H.264和AVS技术标准,MPEG4 ASP在流媒体和IPTV应用市场中起步时间最早,因此产业化程度最成熟,IPTV设备提供商的支持也最广泛;AVS的产业化程度最低,H

  .264次之。下面对这3种标准进行介绍。

  2.1 MPEG-4标准简介

  运动图像专家组(MPEG)于1999年2月正式公布了MPEG-4(ISO/IEC14496)标准第一版本。同年年底公布了MPEG-4第 2版,且于2000年年初正式成为国际标准。MPEG-4与MPEG-1和MPEG-2有着很大的差异,MPEG-4不只是具体压缩算法,它是针对数字电视、交互式绘图应用、交互式多媒体等整合及压缩技术的需求而制定的国际标准。

  MPEG-4除采用第一代视频编码的核心技术,如变换编码、运动估计与运动补偿、量化、熵编码外,还提出了一些有创见性的关键技术,其中包括:

  (1)视频对象提取技术

  MPEG-4标准同以前标准的最显著的差别在于它是采用基于对象的编码理念,即在编码时将一幅景物分成若干在时间和空间上相互联系的视频音频对象,分别编码后再经过复用传输到接收端,然后再对不同的对象分别解码,从而组合成所需要的视频和音频。这样可以实现对不同的对象采用不同的编码方法和表示方法,又有利于不同数据类型间的融合,同时也便于对各种对象进行操作及编辑。视频对象提取(即视频对象分割)是MPEG-4视频编码的关键技术,也是新一代视频编码的研究热点和难点。

  (2)VOP视频编码技术

  视频对象平面(VOP,Video Object Plane)是视频对象(VO)在某一时刻的采样,VOP是MPEG-4视频编码的核心概念。MPEG-4在编码过程中针对不同VO采用不同的编码策略,即对前景VO的压缩编码尽可能保留细节和平滑;对背景VO则采用高压缩率的编码策略,甚至不予传输而在解码端由其他背景拼接而成。这种基于对象的视频编码不仅克服了第一代视频编码中高压缩率编码所产生的方块效应,而且使用户可与场景交互,从而既提高了压缩比,又实现了基于内容的交互,为视频编码提供了广阔的发展空间。MPEG-4支持任意形状图像与视频的编解码。

  (3)视频编码可分级性技术

  MPEG-4通过视频对象层(VOL,Video Object Layer)数据结构来实现分级编码。MPEG-4提供了两种基本分级工具,即时域分级(Temporal Scalability)和空域分级(Spatial Scalability),此外还支持时域和空域的混合分级。每一种分级编码都至少有两层VOL,低层称为基本层,高层称为增强层。基本层提供了视频序列的基本信息,增强层提供了视频序列更高的分辨率和细节。

  (4)运动估计与运动补偿技术

  MPEG-4采用I-VOP、P-VOP、B-VOP3种帧格式来表征不同的运动补偿类型。它采用了H.263中的半像素搜索技术和重叠运动补偿技术,同时又引入重复填充(repetitive padding)技术和修改的块匹配(modified block matching)技术以支持任意形状的VOP区域。

  在MPEG-4视频编码中,运动估计相当耗时,对编码的实时性影响很大。因此这里特别强调快速算法。运动估计方法主要有像素递归法和块匹配法两大类,前者复杂度很高,实际中应用较少,后者则在H.263和MPEG中广泛采用。

  2.2 H.264标准简介

  2003年,ITU-T通过了一个新的数字视频编解码标准,即H.264标准,H.264是由ISO/IEC与ITU-T组成的联合视频组制定的新一代视频压缩编解码标准。国际电信联盟将该系统命名为H.264/AVC,国际标准化组织和国际电工委员会将其称为14496-10/MPEG-4 AVC。

  H.264标准只有3个子集:基本子集、主体子集和扩展子集。基本子集是专为视频会议应用设计的,能够提供强大的差错隐消技术,并且支持低延时编/解码技术,使视频会议显得更自然。主体子集和扩展子集更适合于电视应用(数字广播、DVD)和延时影响不会太大的视频流应用。

H.264标准的关键技术如下:

  (1)帧内预测编码

  帧内编码用来缩减图像的空间冗余。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测,然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。H.264提供6种模式进行4×4像素宏块预测,包括1种直流预测和5种方向预测,H.264也支持16×16的帧内编码。

  (2)帧间预测编码

  帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧,码流中包含SP帧后,能在有类似内容

  但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。

  (3)整数变换

  在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换。与浮点运算相比,整数 DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。此外,整数DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。

  (4)量化

  H.264中可选32种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描,大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。

  (5)熵编码

  视频编码处理的最后一步就是熵编码,H.264标准采用的熵编码有两种:一种是基于内容的自适应变长编码(CAVLC)与统一的变长编码(UVLC)结合;另一种是基于内容的自适应二进制算术编码(CABAC)。CAVLC与CABAC根据相临块的情况进行当前块的编码,以达到更好的编码效率。CABAC比CAVLC压缩效率高,但要复杂一些。

  2.3 AVS标准简介

  AVS是基于我国创新技术和部分公开技术的自主标准,AVS标准包括系统、视频、音频、数字版权管理等4个主要技术标准和一致性测试等支撑标准。2002年在信息产业部支持下,成立了“数字音视频编解码技术标准”工作组(简称AVS工作组),在国内外上百家企业和科研单位共同参与下,AVS标准制定工作进展顺利,其中最重要的视频编码标准于2005年通过国家广电总局测试,2006年1月得到信息产业部批准,2月国家标准化管理委员会正式颁布,3月1日起实施。

  AVS视频编解码的核心技术包括:8×8整数变换、量化、帧内预测、1/4精度像素插值、特殊的帧间预测运动补偿、二维熵编码等。

  (1)变换量化

  AVS的8×8变换与量化可以在16位处理器上无失配地实现,从而克服了H.264之前所有视频压缩编码国际标准中采用的8×8 DCT变换存在失配的固有问题。而H.264所采用的4×4整数变换在高分辨率的视频图像上的去相关性能不及8×8的变换有效。AVS采用了64级量化,可以完全适应不同的应用和业务对码率和质量的要求。

  (2)帧内预测

  AVS的帧内预测技术沿袭了H.264帧内预测的思路,用相邻块的像素预测当前块,采用代表空间域纹理方向的多种预测模式。但AVS亮度和色度帧内预测都是以8×8块为单位的。亮度块采用5种预测模式,色度块采用4种预测模式,而这4种模式中又有3种和亮度块的预测模式相同。在编码质量相当的前提下,AVS采用较少的预测模式,使方案更加简洁、实现的复杂度大为降低。

  (3)帧间预测

  帧间运动补偿编码是混合编码技术框架中最重要的部分之一。AVS标准采用了16×16,16×8,8×16和8×8的块模式进行运动补偿,而去除了H.264标准中的8×4,4×8,4×4的块模式,目的是能更好地刻画物体运动,提高运动搜索的准确性。较少的块模式,能降低运动矢量和块模式传输的开销,从而提高压缩效率、降低编解码实现的复杂度。

  (4)熵编码

  AVS熵编码采用自适应变长编码技术,在AVS熵编码过程中,所有的语法元素和残差数据都是以指数哥伦布码的形式映射成二进制比特流。采用指数哥伦布码的优势在于:一方面 ,它的硬件复杂度比较低,可以根据闭合公式解析码字,无需查表;另一方面,它可以根据编码元素的概率分布灵活地确定以k阶指数哥伦布码编码,如果k选得恰当,则编码效率可以逼近信息熵。

  3、三种编码标准的对比与选择

  3.1 基本性能对比

  3种编码标准的基本功能对比如表1:

  表1 3种视频编解码标准的基本功能

  

 

这3种主要编码技术各有优缺点,MPEG-4标准因为发布较早,产业化程度较高,因此产品相对成熟,内容比较丰富、价格也较低,同时算法复杂度较低,但相应的问题是编码效率也相对较低,需要占用较多的带宽,对网络要求较高,对于现有网络需要进行升级改造才能满足其需求。

  对于H.264标准,目前市场上已经有多家厂商提供H.264芯片和机顶盒,产品开始成熟,内容也逐渐丰富,而且因为采用了多项提高图像质量和增加压缩比的技术措施,在不影响视频效果的情况下能够比MPEG-4节约39%的码率,因而占用带宽较低。例如要达到标清的播放质量,MPEG-4编码需要1.5~2Mbit/s的码率,而H.264只需要1.2~1.5Mbit/s码率即可;对于高清图像质量,MPEG-4编码的视频码

  率需要 6~8Mbit/s,而H.264只需要4~6Mbit/s。因此采用H.264可以大大节约网络带宽,减少网络改造的压力,且在带宽相同的情况下能够覆盖更多的用户。同时,由于H.264是由ITU-T和ISO/IEC联合制定的,所以对解码兼容性有着明确的定义,具有较强的抗误码能力,容易获得稳定的图像,适用于丢包率高、干扰严重的信道传输。不过H.264的算法复杂度较高,系统开销也比较大。

  AVS是近几年才提出的视频标准,产业化进程落后于H.264。但是AVS的编码效率与H.264相当,而算法复杂度比H.264明显低,其编码复杂度相当于H.264的30%;解码复杂度相当于H.264的70%,软硬件实现成本都低于H.264;同时由于我国掌握主要知识产权,专利授权模式简单,专利费用低,因此可以预见AVS标准将会是支撑国家数字音视频产业发展的重要标准。

  3.2 专利费用对比

  如果采用国外的技术标准,不得不面临高昂的专利费用的问题。3种标准对应的专利费用如表2所示:

  表2 3种标准的专利费用

  

 

  可以看出在专利费方面AVS占有绝对的优势。MPEG-4和H.264不仅要收软硬件的专利费,而且还要收取节目点播费用等,如果按照这两种标准的专利收费标准,中国庞大用户群将给运营商带来每年数以亿计的巨大专利费负担;而AVS只收取1元人民币的象征性费用,对于运营商来讲非常具有吸引力。

  3.3 应用情况对比

  从目前的应用情况来看,MPEG-4和H.264在中国市场具有一定的发展优势,在中国电信和中国网通已经开展的IPTV试验及商用网中, MPEG4和H.264同时存在,例如中国电信在上海截止目前已经有15万左右的IPTV用户,使用的是H.264编码标准;广东电信的IPTV商用网也将实现MPEG4向H.264标准的整体平移。中国网通现已开展了基于AVS标准的IPTV试验。由于AVS推出较晚,还处于上下游产业链的完善阶段,在市场的推广和开拓方面还有待加强,真正商用有待验证其图像质量、商用情况是否满足商用要求和产业链的逐渐成熟。目前3种标准常见的应用场景列举如表3:

  表3 3种标准的应用场景

  

 

  3.4 三种编码标准的选择

  由上面的对比可以看出,3种编码标准在性能、设备成本、产业化程度及专利费用方面都各有千秋,具体选择哪种视频编码标准还需综合考虑各方面因素。对于IPTV产业来说,H.264得到了电信运营商及设备提供商的支持,目前已经逐渐占据市场主流的地位,而AVS凭借低廉的专利费优势,长远来说对运营商更具诱惑力,同时又得到了中国政府的支持,今后的应用前景将比较乐观。

  4、结束语

  本文讨论了目前国内IPTV产业中主要采用的3种编码标准MPEG-4、H.264及AVS。通过介绍和对比这3种标准,可以看出 H.264/AVS是目前主流的选择。当然事物都在不断发展,音视频编解码技术也处于不断演进的过程中,因此多种编码标准在相当长的时间内还将继续共存。今后的IPTV舞台上,编码标准将花落谁家,让我们拭目以待。

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注