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 文献标识码:A
0 引 言
随着经济的发展和科学技术的进步,当今人类社会的列车已进入了信息化的新时代.在这一阶段,有关多媒体技术的研究、开发、和应用显得格外有生气,并且以极快的速度向普及和产业化方向深入,这种技术的发展是前所未有的.
进入信息时代的现代社会,各种信息以极快的速度出现,人们对信息的需求在日益增加,这个增加不仅表现在数量的剧增,同时还表现在信息种类的不断增加.这个巨大的社会需求(或者说市场需求)就是多媒体通信技术发展的基本的内在动力.另一方面,电子技术、计算机技术、电视技术及芯片技术的飞速发展,为多媒体技术的发展提供了确实的外部保证.在美国洛杉矶召开的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 的转换关系
Y
U V
=
0.2990.5870.114-0.1687-0.33130.50.5-0.4187-0.0813R G B (1) YUV 到R GB 的转换关系
R
G 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 ictureRate
8
(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期
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论