当前位置:文档之家› 一种快速的多媒体视频解码算法

一种快速的多媒体视频解码算法

2000年第21卷第4期华 北 工 学 院 学 报V ol.21 N o.4 2000 (总第72期)JOURNAL OF NORTH CHINA INSTITUTE OF TECHNOLOGY(Sum N o.72)文章编号:1006-5431(2000)04-0354-07一种快速的多媒体视频解码算法马 礼1,张永梅1,马 兰2,张永莲3(1.华北工学院计算机科学与技术系,山西太原030051; 2.长征航天控制工程公司,北京100038;3.十三冶职工医院,山西太原030009)摘 要: 目的 找出一种对多媒体视频流的快速解码方案.方法 对多媒体信息流的编码解码过程进行剖析,提出粗跳、细跳算法定位视频流中的I图像.结果 找到了一种快速搜索I图像的算法.结论 多媒体信息流的解码可以用较快的算法实现,从而提高解码速度、节省解码用时间.关键词: 多媒体;视频;系统流;节目流;解码;编码中图分类号: T P37 文献标识码:A0 引 言随着经济的发展和科学技术的进步,当今人类社会的列车已进入了信息化的新时代.在这一阶段,有关多媒体技术的研究、开发、和应用显得格外有生气,并且以极快的速度向普及和产业化方向深入,这种技术的发展是前所未有的.进入信息时代的现代社会,各种信息以极快的速度出现,人们对信息的需求在日益增加,这个增加不仅表现在数量的剧增,同时还表现在信息种类的不断增加.这个巨大的社会需求(或者说市场需求)就是多媒体通信技术发展的基本的内在动力.另一方面,电子技术、计算机技术、电视技术及芯片技术的飞速发展,为多媒体技术的发展提供了确实的外部保证.在美国洛杉矶召开的1993年首届国际多媒体会议上共发表了52篇论文,包括17篇专题,其中约有一半的专题与通信有关[2].此项技术必将为21世纪的信息时代做出更大的贡献[1].目前,多媒体信息的传输技术在国内外的研究较多,并有相应的产品推出.如中国公用数字数据网(CHINADDN),利用数字传输通道(光纤,微波,卫星)和数字交叉复用节点组成的数字数据传输网,为用户提供各种速率的高质量的专用电路和其他新业务,以满足用户多媒体通信和组建中、高速计算机通信网的需要.DDN与传统的模拟电话专线不同,其显著特点是采用数字电路,传输质量高,延时小,通信速率可根据需要选择;电路可以自动迂回,可靠性高;一线可以多用,既可以通话,传真,传输数据,还可以组建会议电视系统等[1].在众多的多媒体研究领域内,媒体的编码和解码技术是人们一直在探求的主题,如何对多媒体信息进行高效编码,对于容量大得惊人的数据量来说,其重要程度是可以想象的,同样,解码方法的研究、再现方案的提出和实现,也为业内人士所关注.在经过对多媒体的解码方法进行研究和实验后,本文提出一种快速搜索关键图像的方法,以达到快进、快倒等特殊效果,在实际应用中取得了较好的效果.1 解码方案1.1 图像和视频信号的表示彩色空间彩色是一种心理感觉,它与照明源的分布及观察者的视觉有关.例如,晚上的天空看上去呈黑色或 收稿日期:2000-06-16 作者简介:马 礼(1968-),男,讲师,硕士.从事专业:计算机应用.灰色,白天则呈不同深浅的蓝色,日出时又出现桔红或红色.这表明色感依赖于光的物理成分和视觉系统的生理学,并进而引起色彩的心理感觉:亮度、色度和饱和度.在各种彩色模型中,最成功的是三基色模型.在三基色模型中,认为人眼有红,绿,蓝三种色感细胞,它们的最大感光灵敏度分别落在红色、绿色和蓝色区域.由此可推断出,任何色彩都可用红,绿,蓝三种基色相加来配制.根据三基色原理,用三幅红、绿、蓝为基色的图像可生成一幅彩色图像.在编码时采用亮度、色度空间,即YUV 空间,用YU V 空间表示图像有一个问题需要解决,就是现在所有的显示系统都采用R ,G ,B 值来驱动显示器,这就要求在每个像素之前,必须把YUV 值转换成RGB 值,其转换关系如式(1)、式(2)所示.RGB 到YUV 的转换关系YU V=0.2990.5870.114-0.1687-0.33130.50.5-0.4187-0.0813R G B (1) YUV 到R GB 的转换关系RG B =10 1.4021-0.34414-0.714141 1.17720Y U V (2) YUV 格式能把大部分图像信息量集中到亮度分量上,把小部分的信息量集中到色度分量上.1.2 MPEG 信息编码格式按M PEG 格式经过编码的多媒体视频流,分为6个层次.1.2.1 块块是亮度和色度成分的正交8×8部分,它是编码器和解码器的最小单位.块的数据是按Z 型扫描存放.其中第一个数据为DC 系数,该系数按差分编码;剩下的63个为AC 系数,AC 系数按行程编码.1.2.2 宏块宏块由16×16个像素组成,宏块头标中包含了防止下溢的宏块填补代码“00000001111”;宏块地址增量(1~11位长),它表示当前宏块和过去编码宏块地址之间的差分值,用它可求出当前宏块的绝对地址,在求宏块地址增量时,有可能出现转义码“00000001000”,它表示当前地址增量再加33;还有1~6位长的宏块类型,对于I 图像则只有两种宏块类型,“1”表示不重新设置量化器尺度,“01”表示重新设置量化器尺度,这时接着的5位为重新设置量化器尺度的值.宏块头标之后是定义宏块中6个块的数据,6个块中有4个亮度块和2个色度块,它们的存放顺序是从顶到底,从左到右:先Y,后U 和V.1.2.3 片片由整数个以光栅扫描顺序排列的宏块组成.开始的宏块是图像的左上角,然后从左到右,从上到下按光栅扫描顺序存放,片之间不能覆盖,且不能有间隙.片在一个图像中可以有不同的大小,一个图像中开始代码的最低8位,定义了该片中第一个宏块在图像中的第几行.片由片头标(00000101-000001AF)和若干宏块组成,在片头标中除了片开始代码以外,接下来的5位是量化器尺度,该值不能为0.片头标之后定义宏块的代码.1.2.4 图像一个图像(Picture )相应于动态视频的帧,它有4种类型:(1)I 图像或称帧内编码图像,这种图像不参考任何其他图像而被解码;(2)P 图像或称预测编码图像,这种图像解码时用到了前面的I 图像或P 图像的运动补偿;(3)B 图像(双向预测编码图像),这种图像解码时用到前面和后面的I 或P 图像的运动补偿;(4)D 图像,这种图像只对应于快速向前搜索模式.图像由图像头标和一系列片组成.图像头标以图像开始代码“00000100”开始,接着的10位是图像的时间引用,定义图像的显示顺序(由于图像不以显示顺序传送,而是以解码器解码它们所需的顺序(位流355(总第72期)一种快速的多媒体视频解码算法(马 礼等)顺序)传送,所以时间引用是很有用的).接下来的3位是图像类型,头标中的其他标志不影响解码I 图像,其编码类型如表1所示.1.2.5 图像组\;图像组是一个随机存取点,即它是最小的编码单位,能在一个序列中被独立解码,它由一个头标和一些图像组成.图像组的头标包含了时间和编码信息.表1 图像编码类型Tab .1 Gr aph coded typ e 图像编码类型图像000禁止001I 图像010P 图像011B 图像100D 图像101~111保留图像组是一系列编码图像,有利于序列进行随机访问.图像组可以有任意长度,图像组可包含一个或多个图像.需要随机访问、快进、快倒或正常播放的应用程序可以使用相对较短的图像组.图像组可以从场景终止处开始,也可以从其他运动补偿无效之处开始.图像组内的图像排序有显示顺序和位流顺序,输入解码器的为位流顺序.1.2.6 视频序列视频序列是视频编码的顶层.序列的开始是序列头标,它定义了解码器需要的重要参数.头标之后是一或多个图像组.图像组由一或多个图像组成.序列可包含其他的序列头标.序列以序列结束代码结束.1.3 M PEG 中I,P,B 图像的解码过程因ISO/IEC11172-2的编码方式是按相应的层次结构的层排列的,所以其解码过程也应按这种顺序来解码.首先,序列是编码层次的顶层,也是解码的最初入口.序列由一个头标和一些图像组(GOP)组成.序列的头标初始化解码器的状态,允许解码器能解码任何序列而不受前面解码情况的影响.一种典型的编码方式是I ,P和B 图像的一个最小组合.通常一个I 图像可以约30s 出现一次,为了给出合理的快速随机存取,在每对I 或P 图像之间插入两个B 图像,如图1所示.图1中箭头表示预测和双向预测编码图像的依赖关系.该组图像的显示顺序为: I B B P B B P B B P B B I 0 1 2 3 4 5 6 7 8 9 10 11 12由于B 图像依赖于后续(按显示顺序)的I 或P 图像,故在此B 图像之前传送和解码I 或P 图像.其位流顺序(解码器的输入顺序)为: I P B B P B B P B B I B B 0 3 1 2 6 4 5 9 7 8 12 10 11按此位流顺序,输入位流在输入缓冲器中聚集起来,由可变长码(VLC)解码器解码第一个图像(图像0)的头标,并确定它是一个I 图像.VLC 解码器产生相应于量化DCT 的量化系数.通过“Z ”形顺序扫描这些量化解码系数,把图像中每个8×8像素块汇集起来.逆量化器使用量化步长大小产生实际的系数DCT.通过逆DCT 变换器,系数变换成像素值并存放在过去图像存储区和显示缓冲区中.图像在合适的时间被显示.VLC 解码器解码下一个图像(图像3)的头标,并确定它是一个P 图像.对每个块,VLC 解码器解码运动向量,从保存的过去图像给出偏移量,然后把系数转换成像素差分值,并加入到预测块中,预测块是通过把运动向量应用于保存着过去图像的块中产生的.导出的块存放在将来图像存储区和显示缓冲区中,直到B 图像1和2已经接收、解码和显示以前,该图像不能被显示.VLC 解码器解码下一个图像(图像1)的头标,并确定它是一个B 图像.对每个块,VLC 解码器解码运动向量,从保存的过去或将来图像或两者中给出偏移量.这些量化的系数逆量化产生实际的DCT 系356华 北 工 学 院 学 报2000年第4期数,然后这些系数逆向转换成像素差分值并加入到预测块中.预测块是通过把运动向量应用于保存的图像产生的.导出的块存放在显示缓冲区中,它可以在合适的时间显示.VLC 解码下一帧图像(图像2)的头标,并确定它是一个B 图像.采用与图像1相同的方法对它进行解码.对图像2解码之后,在过去图像存储区的图像0不再需要,可以丢弃了.VLC 解码器解码下一帧图像(图像6)的头标,并确定它是一个P 图像.在将来图像存储区的图像被拷贝到过去图像存储区中,然后执行与图像3相同的解码过程,直到图像4和5已被接收和显示,图像6才被显示.然后继续重复进行.2 I 图像的解码过程(1)通过一函数定位到视频流,找到序列头标(000001B3),解码出图像的长度和高度,求出量化矩阵.然后定位到图像组开始代码(000001B 8).(2)从图像组中找出图像开始代码(00000100H )解码图像类型.(3)若当前图像的类型为I(在图像开始代码后是10位参考位,3位图像类型码,图像类型码如表1),则开始解码I 图像.(4)在I 图像中找到片开始头标(01H -AFH)使用函数由片开始代码的最低字节解码出图像中该片的第一个宏块在图像中的行号.然后取接下去的5位便是片头标中设置的量化尺度,去掉额外信息便可开始解码一个宏块.对于片中的第一个宏块通过MB A =(片开始代码最低字节-1)×图像中每行的宏块个数+当前宏块的地址增量-1;求出该宏块在片中的绝对地址.对于接着的宏块地址可由MBA =MB A +MB Ainc (当前宏块地址增量)或等同的算法求出.每解码完一个宏块之后判断是否遇到下一个片的开始代码,假如没有遇到该代码,则继续解码下一个宏块,直到遇到下一片的开始代码为止.然后便可解码下一个片,依次解码,退出的条件是图像中的所有宏块解码完成,即宏块绝对地址等于图像中宏块的总个数.(5)对于宏块的解码,通过函数求出宏块的地址增量,接着解码宏块的编码类型.判断该类型宏块是否要重新设置量化尺度(qu-scale),若需重新设置,则接着的5位值便是重新设置的量化值.若不需重新设置,则使用先前的量化尺度.然后开始对每一宏块中的各个块进行解码,解码的顺序为:0→1→2→3→4→5.(6)对于块的解码,首先判断是亮度块(0~3),还是色度块(4,5).对于亮度块:先通过函数解码出DC 系数差分值的长度,然后再根据长度取出DC 系数差分值,求出DC 系数差分值之后,加上预测的DC 系数值便可求出当前块的DC 系数.再乘8进行解量化,从而重构出DCT 系数的DC 系数值.同时将该数值保存,作为下一亮度块的DC 系数差分值的预测.对于片中第一个宏块的第一个亮度块DC 系数的预测值为0,两个色度块的DC 系数也分别为0.对于其他宏块中的第一块使用前一宏块的第三块DC 系数作为预测值.接着解码AC 系数,对解码出来的AC 系数进行反量化,即乘以量化尺度和量化矩阵中的相应项,重构出DCT 矩阵的AC 系数,对于A C 系数在进行反量化之前必须进行逆Z 型变换才可.(7)每一个块重构DCT 系数进行逆量化后进行IDCT 变换再加上128,便可再现未压缩前的Y,U ,V 的值.每一宏块对应4个亮度块,2个色度块.其组合为4个亮度块共用一个色度块U 和一个色度块V ,第0个亮度块对应于色度块U,V 的左上角部分,第1个亮度块对应于色度块U ,V 的右上角部分,依次为2到左下角,3到右下角.在图像复原时,必须使用RGB 格式,而解压缩出来的是YUV 格式,所以需要从YUV 到RGB 的转换.每个像素点用3个字节R,G,B 表示便可构成24位位图,从而进行显示.在显示时使用24位位图显示程序.在解码过程中涉及了很多VLC 的查表过程,所以VLC 的查表将成为本解码程序解码速度的关键问题.若使用传统的查Huffman 代码的方法,逐位地进行匹配,即先从位流中取出一位,判断该代码是否在357(总第72期)一种快速的多媒体视频解码算法(马 礼等)表中,若没有匹配的代码,则再从位流中取出下一位,与先前取出的1位组合成两位,再查Huffman表,看是否有匹配的代码,重复前面的操作直到在Huffman表中找到匹配的代码,或位流中取出的位数大于Huffman表中最长代码的位数还没有匹配时为止.显然这种方法对于解码来说是不可取的.在本解码程序中,对每一个VLC表,根据VLC代码的长度将表中的代码分成几组,再分别组成数组.数组中存放VLC代码对应的值和VLC代码的实际长度,至于如何将该代码对应的值和长度存入数组对应的地址中.具体作法是利用算法使VLC代码和它对应于数组中的地址联系起来.则在查VLC代码时就可直接根据其对应于数组中的地址进行映射,然后取出对应的值和VLC代码的实际长度,从而利用VLC代码的实际长度便可从缓冲区中将该代码移走.具体实例如下:在多媒体计算机上进行编辑和回放时,需解决这样一个问题,即如何在M PEG系统流上搜索I图像,严格讲,应是搜索I图像的编码表示,或称存储单元.一般说来,可以采用逐字搜索法,即在码流上搜索图像头,并通过图像类型信息判断是否已搜索到I图像,但这种方法的搜索速度很慢.这里,采用了一种粗跳步与细跳步相结合的快速搜索方法,应用于恒定比特流的对象中,取得了较好的效果.在M PEG-2系统标准中定义了节目流(Pro gram Str eam[2])和传输流(T ransport Stream[2])两种系统流.节目流与M PEG-1中的系统流[3]类似,但有扩充.为了描述问题方便,这里仅以M PEG-2节目流为例进行阐述.在具体描述前,作以下假设:(1)假设视频流的图像组GOP(Group of Picture)的长度固定;(2)假设MPEG流为恒定速率比特流;(3)假设系统流包的摆放方式是按输入数据的速率均匀摆放的.以上三个假设对目前流行的多媒体信息流来说是成立的.由于流的比特速率恒定,且GOP长度固定,就可以认为,在系统流上两个相邻I图像之间的字节数基本相同,同时考虑到构成系统流的包层次结构,那么,可以尽可能地跳过非图像数据和非I图像数据,以达到快速搜索I图像的目的.为了叙述方便,这里以M PEG-2节目流为例进行阐述,对于MPEG-2传输流和M PEG-1系统流来说,其方法类似.以下是在M PEG-2节目流上正向和反向快速搜索I图像的方法.2.1 估计在节目流上相邻两个I图像间的字节数记为By teCountGOP,同时,将节目流的比特速率记为Mux Rate(bits/s),视频流的GOP长度记为N,这些都可从流中获得或测得,则ByteCountGOP可按式(3)求得B yteCountGOP=Mux Rate×N/P ictureRate8(3)式中,Pictur eRate为图像速率(frame/s),也可从流中获得.2.2 粗跳 粗跳的步长记为Step A,它是由By teCountGOP来决定的.S tep A可以由式(4)计算Step A=(B y teCountGOP/2)×S p eedUP(4)式中 Sp eed UP是加速因子,可以根据不同的应用需要而设定不同的值.假设当前I图像的第一个PES分组在节目流中的位置为I-File-Po inter.如果正向搜索下一个I图像,则应先将文件指针挪到I-File-Pointer+Step A位置上,然后再搜索I的起头PES分组;如果是反向搜索上一个I图像,则应先将文件指针挪到I-File-Po inter-Step A位置上,然后再反向搜索I的起头PES分组,粗跳如图2所示.358华 北 工 学 院 学 报2000年第4期2.3 细跳当做完粗跳时还可以做细跳以进一步提高搜索I 图像的速度.首先是正向细跳方法:为了搜索下一个I 图像,则应先找到I 图像的一个PES 分组.在搜索过程中,当遇到如下情况时,可做细跳转: 搜索到包头字,则可适当作包头跳转,将头部的一些域信息跳过; 搜索到系统起头字,则可根据其长度作系统头跳转,将系统信息跳过; 搜索到音频等非视频PES 分组时,根据分组长度直接跳过;!搜索到视频PES 分组,但非I 图像起头PES 分组,则同样根据分组长度跳过.反向细跳的方法是,为了搜索到上一个I 图像,则也应找到上一个I 图像的头一个PES 分组.搜索的方法是:将做完粗跳的文件指针位置记录下来,放在变量如File -Pointer 中,然后将文件指针往前移M (如M =2048)个字节,并将File-Pointer 减去M ,把当前指针后的M个字节读入缓冲区中,然后再在这M 个字节中搜索I 图像的头一个PES 分组,如果没找到,则File -Po inter 再减去M ,并将文件指针指向该位置,读入M 个字节,继续在新读入的M 个字节中搜索I 图像的头一个PES 分组,如此往复,直至搜索到为止.当在M个字节中搜索到视频PES 分组的前部分,但不能确定是不是I 图像的头一个PES 分组时,可将其后的数据读入,进一步确认.显然,反向的细跳步规则与正向相同,只不过反向的细跳局限于M个字节,超出M 个字节时,则不必往下搜索,接着读入前M 个字节,继续搜索.上面阐述的方法是通过粗跳步与细跳步来加速的,通过对加速因子Sp eedUP 的调整可以获得不同档次的加速需求.快进和快退算法流程图如图3.359(总第72期)一种快速的多媒体视频解码算法(马 礼等)360华 北 工 学 院 学 报2000年第4期2.4 倒播为了获得特殊的视觉效果,往往需要将视频图像序列反序播放出去,即倒播.要想实现视频图像倒播,则必须首先反向搜索到最近的一个I图像,并一次解码一个GOP,然后再反序播放出去.如果解完一个GOP,然后在播放出去,这样则势必导致播放过程的中间停顿.为了克服停顿,可以先预解一个GOP,然后在解下一个GOP的同时穿插播放上一个GOP的图像,这时为了方便,可申请一个双图像组缓冲区.图4为具体的算法流程图.2.5 从YUV到RGB的变换算法解码结束后,得到的是YUV格式的图像数据,要经过转换变成RGB格式之后才能显示,所以要由YUV格式变换到RGB格式,变换依据按式(2)进行.3 结 论多媒体信息流的解码可以用较快的算法实现,从而提高解码速度、节省解码用时间.多媒体信息解码在整个多媒体领域内只是一小部分,但从工作过程中可以看出多媒体技术飞速发展的趋势.研究取得了一些成绩,更主要的是通过研究发现了自己的不足之处,同时也找到了努力的方向.在信息时代的今天,信息的传递胜过一切,谁能掌握最新最及时的信息,谁就能抓住机会,多媒体技术无疑为信息时代的发展贡献了力量.参考文献:[1] 中国公用数字数据网[EB/O L].htt p://guig ang ptt g x cn/teleco m/ddn html,2000-5.[2] 陈维强,高文.M PEG视频编码比特速率控制算法的改进[J].软件学报,1998,(11):806~810.[3] 杨品,钟玉琢.M PEG-1运动图像压缩编码标准(ISO/IEC11172)[M].北京:机械工业出版社,1995.[4] 王兴伟,刘积仁,李华天.多媒体通信:需求与对策[J].小微型计算机系统,1997,18(3):1~7.[5] 李晓明.视听多媒体通信研究展望[J].电信科学,1995,(11):53~56.[6] 宋军,顾冠群.多媒体通信媒体间同步技术综述[J].电信科学,1996,(9):3~8.[7] 钟玉琢,李树青,林福宗,等.多媒体计算机技术[M].北京:清华大学出版社,1993.255~280.[8] Inter natio nal Sta ndar d ISO/I r matio n T echnolog y-G eneric Co ding o f M o ving Pictur es and A sso ciatedA udio[EB/CD].I SO/IEC JT C1/SC29/WG11,1994.A Fast Decoding Algorithm for Multimedia Video SingalM A Li1,ZH ANG Yong-mei1,M A Lan2,ZHANG Yong-lian3(1.Dept.of Co mputer Science and T echnolog y,No rt h China I nstitute of T echno lo gy,T aiyuan030051,China;2.L ong M ar ch A er ospace Co nt ro l Eng ineering Company,Beijing100038,China;3.Emplo yee Hospital o f the T hir teenth M etallur gy and Co nstr uct ion Com pany,T aiyuan030024,China)Abstract:Aim Finding a fast decoding metho d of m ultimedia video signal str eam.Methods By analyzing the coding and decoding process of multim edia video signal stream,it issug gested that the I imag e in the str eam is determined by combining the coarse and finesearching pr ocesses.Results An alg orithm for fast searching I image is fo und.Conclusion Decoding m ultimedia stream may be realized by a quicker algo rithm,im pro ve decodingspeed and save decoing tim e.Key words: m ultimedia;video;sy stem stream;prog ram stream;deco ding coding。

相关主题