1.MPEG2-TS编码技术 1.1.MPEG-TS简介
MPEG2-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS或M2T)是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。
区别:
DVD节目中的MPEG2格式,确切地说是MPEG2-PS,全称是Program Stream(程序流),而TS的全称则是Transport Stream(传输流)。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,可添加字幕等一些程序操作。而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。
简单地说,将DVD上的VOB文件的前面一截cut掉(或者是数据损坏数据)就会导致整个文件无法解码,而电视节目是任何时候打开电视机都能解码(收看)的。所以MPEG2-TS格式的特点就是从视频流的任一片段开始都是可以独立解码。
1.2.基本概念及TS流概述
(1)ES流(Elementary Stream,基本流):数字电视各组成部分编码后所形成的直接表示基本元素内容的流,包含视频、音频或数据的连续码流。
(2)PES流(Paketized Elementary Stream,打包基本码流):是将基本的码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流。
(3)PS流(Program Stream,节目流):将一个节目的多个组成部分按照它们之间的互相关系进行组织并加入各组成部分关系描述后的码流。PS流是一种多路复用数字音频、视频等的封装容器,它是一个或多个具有共同的时间基准的PES流合并成一个整体流,主要用于节目存储。其包长不固定,且较长,一旦失去同步信息,接收机无法确定下一包的同步位置,会造成失步,导致严重的信息丢失。PS流适用于误码小、信道较好的环境,如演播室、家庭环境和存储介质中。
(4)TS流(Transport Stream,传输流):是将一个节目的多个组成部分按照它们之间的互相关系进行组织并加入各组成部分关系描述和节目组成信息,并进一步封装成传输包后的码流。TS流是将视频、音频、PSI等数据打包成传输包进行传送。主要用于节目传输。TS的传输包长度固定,一般为188字节。
(5)TS流和PS流是MPEG-2标准中规定的两种输出码流。TS格式中,从视频流的任意一片断开始都可以独立解码,而PS格式不可以。由于TS流具备较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS流的包格式。
(6)TS流的播放:播放前将TS流文件的后缀名改为.mpg或者.mpeg,用可以直接播放MPEG-TS流的播放器(一般的播放器都可以)打开播放即可。
(7)TS流的优点:
① 动态带宽分配:由于TS的传输包长度是固定的,因此可过PID将规定的信道总频带在视频、音频和数据信息进行实时的、灵活的分配。利用这一特性,可在广播付费节目前实时地将解密钥匙插入到TS流中送给广大用户。
② 可分级性:允许一个复用的传输码流与其他视音频基本码流进行二次复用,生产占用频带给宽的更高一级的TS流。
③ 可扩展性
④ 抗干扰性
⑤ 接收机成本低廉
(8)TS流的形成过程:
① 压缩【显示单元】产生【进入单元】,连续的【进入单元】组成一个基本码流。
② 对ES(基本码流)进行打包形成PES。
③ 在PES包中加入定时信息(PTS/DTS)。
④ 将PES包内容分配到一系列固定长度的传输包中。
⑤ 在传输包中加入定时信息(PCR)。
⑥ 在传输包中加入节目专用信息(PSI) 。
⑦ 连续输出传输包形成具有恒定比特率的MPEG-TS流。
1.3.基本流程
下图是在MPEG-2系统中编码端实现单一码流的详细过程:
(1)A/D转换后,通过MPEG-2压缩编码得到ES基本流。该流数据量很大,并且只是I P B帧的取样信息。
(2)通过PES打包器,打包并在每个帧中插入PTS/DTS标识,编程PES。原来是流的格式,现在成了数据包的分割形式。
(3)PES根据需要打包成PS或者TS包进行存储。
1.4.TS流传输包(简称TS包)结构分析
MPEG-2中规定TS传输包的长度为188字节。但通信媒介会为包添加错误校验字节,从而有了不同于188字节的包长。例如:
DVB规定中,使用204字节作为包长:① 通过调制器时,在每个传输包后增加了16字节的里德所罗门前向纠错码,因而形成了204字节的数据包。调制后总存在204字节的数据包。② 调制之前存复用器插入RS码或虚构的RS码。
ATSC规定中,使用208字节作为包长:添加20字节的RS(Reed-Solomon)前向纠错码。与DVB不同,ATSC规定RS码只能出现在调制的TS流中。
所有的TS包都分为包头和净荷部分。TS包中可以填入很多东西(填入的东西都是填入到净荷部分),有:视频、音频、数据(包括PSI、SI以及其它任何形式的数据)。
包头信息分析见1.4.1。TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。
1.4.1.TS包包头
TS包的包头提供关于传输方面的信息:同步、有无差错、有无加扰、PCR(节目参考时钟)等标志。TS包的包头长度不固定,前32比特(4个字节)固定,后面可能跟有自适应字段(适配域)。32个比特(4个字节)是最小包头。包头的结构固定如下:
typedef struct TS_packet_header { unsigned sync_byte : 8; unsigned transport_error_indicator : 1; unsigned payload_unit_start_indicator : 1; unsigned transport_priority : 1; unsigned PID : 13; unsigned transport_scrambling_control : 2; unsigned adaption_field_control : 2; unsigned continuity_counter : 4; } TS_packet_header;
sync_byte(同步字节):固定为0100 0111 (0x47);该字节由解码器识别,使包头和有效负载可相互分离。
transport_error_indicator(传输错误指示):‘1’表示在相关的传输包中至少有一个不可纠正的错误位。当被置1后,在错误被纠正之前不能重置为0。
payload_unit_start_indicator(开始指示):为1时,在前4个字节之后会有一个调整字节,其数值为后面调整字段的长度length。因此有效载荷开始的位置应再偏移1+[length]个字节。
transport_priority(传输优先级):‘1’表明优先级比其他具有相同PID 但此位没有被置‘1’的分组高。
PID:指示存储与分组有效负载中数据的类型。PID值0x0000-0x000F保留。其中0x0000为PAT保留;0x0001为CAT保留;0x1fff为分组保留,即空包。
transport_scrambling_control(加扰控制):表示TS流分组有效负载的加密模式。空包为‘00’,如果传输包包头中包括调整字段,不应被加密。
adaptation_field_control(适配域控制):表示包头是否有调整字段或有效负载。‘00’为ISO/IEC未来使用保留;‘01’仅含有效载荷,无调整字段;‘10’ 无有效载荷,仅含调整字段;‘11’ 调整字段后为有效载荷,调整字段中的前一个字节表示调整字段的长度length,有效载荷开始的位置应再偏移[length]个字节。空包应为‘10’。
continuity_counter(连续性计数器):随着每一个具有相同PID的TS流分组而增加,当它达到最大值后又回复到0。范围为0~15。
适配域:
1.4.2.TS包净荷部分
TS包中净荷所传输的信息包括两种类型:
① 视频、音频的PES包以及辅助数据;
② 节目专用信息PSI。
当然,TS包也可以是空包。空包用来填充TS流,可能在重新进行多路复用时被插入或删除。
在系统复用时,视频、音频的ES流需进行打包形成视频、音频的PES流,辅助数据(如图文电视信息)不需要打成PES包。PES包非定长,音频的PES包小于等于64K,视频的一般为一帧一个PES包。一帧图象的PES包通常要由许多个TS包来传输。MPEG-2中规定,一个PES包必须由整数个TS包来传输。如果承载一个PES包的最后一个TS包没能装满,则用填充字节来填满;当下一个新的PES包形成时,需用新的TS包来开始传输。
(1)PES相关
PES是打包过的ES,已经插入PTS和DTS,一般一个PES是一帧图像。
图1-2 一个打包基本流(PES)包的组成
PES经过打包成TS或PS流,往往一个PES会分存到多个TS包中。
① PES包的包起始码:
包起始码前缀是一个固定的码字结构,它的值是0x000001,用于收发两端对PES包进行同步。
② PES包的长度:
PES包的长度是可变的,PES包长度域有两个字节,共16比特,因此PES包的最大长度是65535字节
③ PES包头:
PES包头的功能根据特定的应用场合有所不同,包括加扰控制,优先级,ES流速率和CRC等,其中有两个重要的工作:PTS和DTS。
可以看到PTS/DTS是打在PES包里面的,这两个parameters是解决视音频同步显示,防止解码器输入缓存上溢或下溢的关键。PTS表示 显示单元出现在系统目标解码器(STD:system target decoder)的时间,DTS表示将存取单元全部字节从STD的ES解码缓存器移走的时刻。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。
(2)节目专用信息PSI(Program Specific Information)
管理各种类型的TS数据包,需要有些特殊的TS包来确立各个TS数据包之间的关系。这些特殊的TS包里所包含的信息就是节目专用信息。在不同的标准中它有不同的名字:
① MPEG-2中称为PSI;
② DVB标准根据实际需要,对PSI扩展,称为SI信息;
③ ATSC标准中为PSIP信息;
MPEG-2中,规定的对PSI信息的描述方法有以下几种:
- 表Table:节目信息的结构性的描述;
- 节目关联表Program Association Table(PAT)0x0000
- 节目映射表Program Map Tables(PMT)
- 条件接收表Conditional Access Table(CAT)0x0001
- 网络信息表Network Information Table(NIT)0x0010
- 传送流描述表Transport Stream Description Table(TSDT)
- 节Section:将表格的内容映射到TS流中;
专用段Private_ section
- 描述符Descriptor:提供有关节目构成(视频流、音频流、语言、层次、系统时钟和码率等多方面)的信息;
ITU-T Rec.H.222.0 | ISO/IEC 13818-1中定义的 PSI表可被分成一段或多段置于传输流分组中。一段就是一个语法结构,用来将ITU-T Rec.H.222.0 | ISO/IEC 13818-1中定义的PSI表映射到传输流分组中。
1)PAT表
TS流中包含一个或者多个PAT表。PAT表由PID为0x0000的TS包传送,其作用是为复用的每一路传送流提供所包含的节目和节目编号,以及对应节目的PMT的位置即PMT的TS包的PID值,同时还提供NIT的位置,即NIT的TS包的PID的值。
table_id:固定为0x00,标志该表是PAT表。
section_syntax_indicator:段语法标志位,固定为1。
section_length:表示这个字节后面有用的字节数,包括CRC32。节目套数:(section length-9)/4
transport_stream_id:16位字段,表示该TS流的ID,区别于同一个网络中其它多路复用流。
version_number:表示PAT的版本号。
current_next_indicator:表示发送的PAT表是当前有效还是下一个PAT有效。
section_number:表示分段的号码。PAT可能分为多段传输,第一段为0,以后每个分段加1,最多可能有256个分段。
last_section_number:表示PAT最后一个分段的号码。
Program number:节目号
network_PID:网络信息表(NIT)的PID,节目号为0时对应ID为network_PID。
Program map PID:节目映射表(PMT)的PID号,节目号为大于等于1时,对应的ID为program_map_PID。一个PAT中可以有多个program_map_PID。
CRC_32:32位字段,CRC32校验码Cyclic RedundancyCheck。
2)PMT表
PMT在传送流中用于指示组成某一套节目的视频、音频和数据在传送流中的位置,即对应的TS包的PID值,以及每路节目的节目时钟参考(PCR)字段的位置。
Table id:固定为0x02,标志该表是PMT表。
Section syntax indicator:对于PMT表,设置为1。
Section length:表示这个字节后面有用的字节数,包括CRC32。
Program number:它指出该节目对应于可应用的Program map PID。
Version number:指出PMT的版本号。
Current next indicator:当该位置‘1’时,当前传送的Program map section可用;当该位置‘0’时,指示当前传送的Program map section不可用,下一个TS流的Program map section 有效。
Section number:总是置为0x00(因为PMT表里表示一个service的信息,一个section的长度足够)。
Last section number:该域的值总是0x00 。
PCR PID:节目中包含有效PCR字段的传送流中PID。
Program info length:12bit域,前两位为00。该域指出跟随其后对节目信息的描述的byte 数。
Stream type:8bit域,指示特定PID的节目元素包的类型。该处PID由elementary PID 指定。下表所示为对应原始流的类型。
原始流的类型
1.5.PS节目流
对PS流而言,每个PES包头含有PTS和DTS,流识别码,用于区别不同性质ES。然后通过PS复用器将PES包复用成PS包。实际上是将PES包分解为更细小的PS包。在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解码。一个问题是:各个ES在解码时,如何保证视音频的同步呢?除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。在编码的时候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解码时,STC会再生,并通过锁相环路(PLL-phase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。最后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。PS格式摘录如下:
PS包的长度比较长且可变,主要用于无误码环境里,因为越长的话,同步越困难,且在丢包的情况下,重组也越困难。所以,PS适合于节目信息的编辑和本地内容应用的application。
2.MPEG-4编码技术 2.1.MPEG-4概述
MPEG-4全称为Moving Picture Experts Group 4,是一套用于音频、视频信息的压缩编码标准,由国际标准化组织(ISO)和国际电工委员会(IEC)下属的“动态图像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版在1999年12月通过。MPEG-4格式的主要用途在于网上流、光盘、语音发送(视频电话),以及电视广播。
MPEG-4的特点:
(1)对于不同的对象可采用不同的编码算法,从而进一步提高压缩效率;
(2)对象各自相对独立,提高了多媒体数据的可重用性;
(3)允许用户对单个的对象操作,提供前所未有的交互性;
(4)允许在不同的对象之间灵活分配码率,对重要的对象可分配较多的字节,对次要的对象可分配较少的字节,从而能在低码率下获得较好的效果;
(5)可以方便的集成自然音视频对象和合成音视频对象。
2.2.MPEG-4各部分
MPEG-4由一系列的子标准组成,被称为部,包括以下的部分。对于媒体编解码,重点关注Part2,Part 3,Part 10。
第一部(ISO/IEC 14496-1):系统
描述视频和音频的同步以及混合方式(Multiplexing,简写为MUX)。定义了MP4容器格式,支持类似DVD菜单这样的直观和互动特性等。
第二部(ISO/IEC 14496-2):视频
定义了一个对各种视觉信息(包括视频、静止纹理、计算机合成图形等等)的编解码器。对视频部分来说,众多“Profiles”中很常用的一种是Advanced Simple Profile (ASP),例如XviD编码就属于MPEG-4Part 2。包括3ivx,DivX4/Project Mayo,DivX 5,Envivio,ffmpeg/ffds,pegable,Nero Digital,QuickTime,Sorenson,XviD等常见的视频格式, 需要注意的是Divx 3.11,MS MPEG-4,RV9/10,VP6,WMV9并不属于标准的MPEG-4标准。
第三部(ISO/IEC 14496-3):音频
定义了一个对各种音频信号进行编码的编解码器的集合。包括高级音频编码(Advanced Audio Coding,缩写为AAC) 的若干变形和其他一些音频/语音编码工具。即AAC音频标准,包括LCAAC,HE AAC等,支持5.1声道编码,可以用更低的码率实现更好的效果(相对于MP3,OGG等)。
第四部(ISO/IEC 14496-4):一致性
定义了对本标准其他的部分进行一致性测试的程序。
第五部(ISO/IEC 14496-5):参考软件
提供了用于演示功能和说明本标准其他部分功能的软件。
第六部(ISO/IEC 14496-6):多媒体传输集成框架
即DMIF:Delivery Multimedia Integration Framework
第七部(ISO/IEC 14496-7):优化的参考软件
提供了对实现进行优化的例子(这里的实现指的是第五部分)。
第八部(ISO/IEC 14496-8):在IP网络上传输
定义了在IP网络上传输MPEG-4内容的方式。
第九部(ISO/IEC 14496-9):参考硬件
提供了用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
第十部(ISO/IEC 14496-10):进阶视频编码,也即ITU H.264,常写为H.264/AVC
或称高级视频编码(Advanced Video Coding,缩写为AVC):定义了一个视频编解码器(codec),AVC和XviD都属于MPEG-4编码,但由于AVC属于MPEG-4Part 10,在技术特性上比属于MPEG-4 Part2的XviD要先进。另外从技术上讲,它和ITU-T H.264标准是一致的,故全称为MPEG-4 AVC/H.264。
第十一部(ISO/IEC 14496-11):场景描述和应用引擎
可用于多种profile(包括2D和3D版本)的互交互媒体。修订了MPEG-4 Part 1:2001以及Part1的两个修订方案。它定义了应用引擎(交付,生命周期,格式,可下载Java字节代码应用程序的行为),二进制场景格式 (BIFS:Binary Format for Scene),可扩展MPEG-4文本格式(一种使用XML描述MPEG-4多媒体内容的文本格式)系统level表述。也就是MPEG-4 Part21中的BIFS,XMT,MPEG-J。
第十二部(ISO/IEC 14496-12):基于ISO的媒体文件格式
定义了一个存储媒体内容的文件格式。
第十三部(ISO/IEC 14496-13):IP
知识产权管理和保护(IPMP for Intellectual Property Management and Protection)拓展。
第十四部(ISO/IEC 14496-14):MPEG-4文件格式
定义了基于第十二部分的用于存储MPEG-4内容的视频文件格式。
第十五部(ISO/IEC 14496-15):AVC文件格式
定义了基于第十二部分的用于存储第十部分的视频内容的文件格式。
第十六部(ISO/IEC 14496-16):动画框架扩展(AFX : Animation Framework eXtension)。
第十七部(ISO/IEC 14496-17):同步文本字幕格式
第十八部(ISO/IEC 14496-18):字体压缩和流式传输(针对公开字体格式)。
第十九部(ISO/IEC 14496-19):综合用材质流(Synthesized Texture Stream)。
第二十部(ISO/IEC 14496-20):简单场景表示(LASeR: Lightweight Scene Representation)。
第二十一部(ISO/IEC 14496-21):用于描绘(Rendering)的MPEG-J拓展
第二十二部分(ISO/IEC 14496-22):开放字体格式(Open Font Format)。
第二十三部分(ISO/IEC 14496-23):符号化音乐表示(Symbolic Music Representation)。
第二十四部分(ISO/IEC 14496-24):音频与系统交互作用(Audio and systems interaction)。
第二十五部分(ISO/IEC 14496-25):3D图形压缩模型(3D Graphics Compression Model)。
第二十六部分(ISO/IEC 14496-26):音频一致性检查
定义测试音频数据与ISO/IEC 14496-3是否一致的方法(Audio conformance)。
第二十七部分(ISO/IEC 14496-27):3D图形一致性检查