基于Nexperia PNX1300的MPEG-4实时远程视频监控系统
鄢强 朱维乐| 摘自《中国有线电视》| 2004-11-01

1引言
    MPEG-X是由ISO下属的运动图像专家组(Moving Picture Expert Group)开发的数字视频编码标准,其标准系列包括MPEG-1、MPEG-2到MPEG-4以及将来的MPEG-7和MPEG-21。近年来,多媒体技术的发展推动了MPEG系列数字视频编码标准的迅速推广和应用,目前除了已经被广泛采用的MPEG-1和MPEG-2外,1999年1月公布的MPEG-4是新一代基于对象的数字视频压缩编码标准。与MPEG-1和MPEG-2相比较而言,MPEG-4在许多地方进行了改进,使其具备了一些更先进的功能,例如各个视频对象的交互性,内容的可分级性和高效的差错复原性。除此之外,标准本身的开放性使得原有的编解码算法可以不断得到改进,并使得一些新的算法被陆续采用。同MPEG-1、MPEG-2相比,它能够具有更高的编码效率,能在更低的码率下,实现同等甚至更好的图像质量。结合当前迅速发展和普及的网络通信技术,使得MPEG-4成为目前网络视频传输以及构建远距离视频监控系统的理想视频编码方案,本文阐述一种基于Philips公司的Nexperia PNX1300多媒体DSP进行MPEG-4实时编解码的实现方案,并在此基础上,结合网络通信技术构建一个远程视频监控系统。
2MPEG-4数字视频编解码原理
    视频编码主要是在保证原始视频信号的图像质量失真很小或使失真保持在容许的范围内的前提下,尽量压缩视频文件的大小,降低视频信号的码率,以便于进行视频的传输和存储。视频信号的压缩主要利用了视频图像在空间上的冗余性(即图像帧空间上相邻区域的相关性),以及相邻图像帧序列在时间上的冗余性(即在时间上相邻的图像帧序列间的相关性)和人眼的心理视觉冗余特性。对于图像的空间冗余,主要采用信号变换,去掉空间上的相关性,保留信号的必要空间信息,去掉多余信息,达到在图像的帧内进行压缩的目的,主要的变换有离散余弦变换DCT(Discrete Cosine Transform)以及小波变换等。对于图像序列在时间上的冗余性,主要采用运动估计和运动补偿,由当前帧之前的图像帧对当前帧进行预测,仅对预测残差进行编码,以达到在图像的著行压缩的目的。根据预测的不同情况,可分为单向预测和双向预测,相应的帧称为P帧和B帧,以及不进行预测的I帧。I帧是作为对P帧和B帧进行预测的参考帧,有时也在编码序列中有意地插入一些I帧以防止预测误差的扩散。此外,还利用人眼的视觉特性,采用视觉滤波的方式,在保证主观感觉失真不易察觉的情况下,以更大的图像失真换取更低的码率,从而去掉图像的心理视觉冗余。与此相反,视频解码则要根据编码后的内容尽量恢复原始的视频信号,因此它包括信号的反变换以及对预测帧的运动补偿。

MPEG-4的设计主要是提供对新一代交互性多媒体的支持。MPEG-4是基于对象的视频编码标准,为此引入了视频对象VO(Video Object)的概念。VO可以是场景中的某一物体或层面,或计算机产生的二/三维图形,也可以是传统的矩形帧。编码器首先要进行VO的分割,然后进行VO的码率分配和码流复合(MUX),解码则为相反的过程。一个VO由几个视频对象层(VOL)组成,而一个场景又由几个VO组成。VOL的一个瞬间称为视频对象平面(VOP),这些VOP被分别编码,并在解码器中合成一个场景,类似地,根据预测方式的不同,就有I-VOP,P-VOP和B-VOP。
    由于MPEG-4标准具有开放性,编码算法的不断改进可以使MPEG-4的编码效率得到提高,但同时带来的问题可能是算法的复杂性增加了,进而引起编码器计算量的增大,降低编码速度。为此,对嵌入式系统而言,实现MPEG-4的实时编码就必须同时考虑编码速度和编码效率两个方面的问题:首先必须选择适合进行多媒体处理的高效的处理器,同时还要对编码算法进行优化,并在必要时根据应用的需求,在速度和效率之间进行合理的折中。
3Nexperia多媒体处理平台
    Nexperia PNX1300是Philips公司推出的一款高性能的32位多媒体处理DSP芯片,其工作频率达到了200 MHz。无论是硬件配置还是汇编指令集,该芯片的设计都明显地针对多媒体应用,它包括了16 Mb的数据Cache,32 Mb的指令Cache,一个图像协处理器以及PCI接口、I2C接口、通信线路接口以及128个通用的32位寄存器。该芯片采用了VLIW(very long instruction word)超长指令字结构,其指令的调度与规划是在编译时决定的。VLIW的并行特性使得每个时钟周期最多可以有5条指令同时得到执行,从而可以在较低的时钟频率下达到很高的处理速率。此外,该芯片还根据多媒体处理的特点,提供了一些针对多媒体处理的专用指令,采用这些指令,可以使多媒体处理算法的指令数大大减少,结合VLIW超长指令字结构,可以极大地提高对多媒体的处理速度。
    Nexperia支持pSOS实时嵌入式操作系统,支持基于C/C++和汇编语言的程序设计。C语言的程序设计比较直观、方便,可读性强,而汇编语言效率更高,特别是一些专用的汇编指令可以大大加快程序的运行速度,因此,在软件设计过程中,绝大部分语句采用了C语言,而在部分关键算法上采用汇编语言以提高效率,以兼顾程序可维护性和运行效率的要求。
4系统结构和工作原理
    该监控系统的总体结构大致可以分为3个部分:视频的采集和编码、视频的网络传输和视频的解码/播放。
    在视频采集端,视频采集卡通过Philips SAA7114将摄像头获取的PAL/NTSC制式的模拟信号转变为数字信号,该信号为4∶2∶2的YUV格式,采集到的数字视频信号再由MPEG-4编码软件进行压缩编码,成为MPEG-4格式的视频数据。
    编码后的MPEG-4格式的视频数据通过网络传输到远端的PC机,在这里,采用UDP协议进行基本的数据传输;RTP/RTCP协议建立在UDP之上,提供端到端的支持和对实时应用的支持,主要是提供时间信息和实现流同步以及对当前的网络传输状况进行监控、反馈和管理。
在远端的PC机接收到数据后,除了进行基本的解码和播放外,解码器还要进行差错复原和错误隐藏,以避免网络传输错误可能导致的解码程序的运行错误。另外,解码端还要通过网络向数据采集端反馈一些控制指令,以实现远程的监控者对编码参数和数据采集过程的控制,如码率的调整、图像大小的调整、视频的帧率控制等等。
    解码端的另一个重要功能就是要进行视频图像的运动目标检测,当检测到当前监视区域内有运动目标时,对运动目标的运动参数,如运动区域的大小、运动的速度等进行检测和估计,根据运动参数值范围的不同,适当调整当前系统的数据采集和编码的参数,并通过网络向数据采集端发出调整这些参数的指令。例如,当检测到运动目标时,可以向编码器发出提高帧率和编码器的输出图像质量的指令,以便更清楚地了解目标的运动细节,而没有运动目标时,可以降低编码端的帧率和图像质量,以降低网络传输的负荷并减少视频信号总的数据量。
5软件结构、算法和优化
5.1软件结构和算法
    视频数据的采集是由一个视频输入定时中断函数VI(Video In)完成的,以PAL制式为例,PAL制式每秒25帧(50场),相应的中断为每秒50次,每次采集一场。VI采集到的数据按Y,U,V分量分别放在3个连续的内存区域中。采集的数据经过亚采样,从YUV4∶2∶2格式转换成为YUV 4∶2∶0格式,被送到编码器进行编码。编码后的MPEG-4信号直接通过网络通信口进行传送,原始的视频数据也可以通过一个视频输出定时中断函数VO(Video Out)进行本地输出,输出的数字视频信号通过Philips SAA7121转换为模拟信号在本地的显示设备上进行显示,中断频率也是50次/秒。
    为了提高处理速度和节省内存空间,视频输入、输出和编码/网络传输模块共用一片内存区域作为编码前的原始数据缓存,编码后的数据则被存到另一个单独的发送队列中。该内存区域被设计成为一组环型的数组链,为了防止各模块之间的内存访问冲突,给每个缓冲区(数组)设置了一个状态标志,表示该缓冲区当前的状态,并给各个模块设置一个指针,指向本模块当前访问的缓冲区。所有模块的访问指针初始值都指向同一个起始缓冲区,缓冲区的初始状态标志都设为IN,表示当前缓冲区为空,可以进行数据写入。在视频输入中断函数VI中,判断当前访问的缓冲区的状态标志,如果为IN,则将采集到的视频数据写入该缓冲区,之后将该缓冲区状态标志设为MM,表示该缓冲区已经写入有效数据,并将VI的访问指针向前移动,否则抛弃当前采集到的视频数据。视频编码/网络传输模块始终不停地检测本模块访问指针指向的缓冲区的状态标志,如果为MM,表示该缓冲区存有待编码的数据,则将数据读出进行编码,编码后的数据被保存到输出队列中,最终通过网络传输模块向网络发送。编码后将原缓冲区状态标志置为OUT,表示该缓冲区的数据可以进行本地输出和显示(如果不进行本地显示,则将状态标志置为IN,表示原始数据已经被编码,可以重新写入新的数据),并将本模块的访问指针指向下一个缓冲区。视频输出模块VO在定时中断函数中判断当前模块访问指针指向的缓冲区的状态标志,如果为OUT则将缓冲区数据进行输出显示,然后将上一缓冲区状态标志置为IN,使视频采集模块VI可以重新对它进行写入,并将本模块的访问指针向前移动。在整个过程中,缓冲区的数据并没有发生变化,通过状态标志的改变使其可以相继为各个处理模块利用,从而避免模块间对缓冲区的访问冲突。
    对于MPEG-4编码模块,有几个主要的编码算法对于编码的速度和性能有着决定性的影响。在运动估计部分,运动矢量的搜索算法采用菱形搜索法,该搜索算法利用了视频图像运动矢量的中心偏移特性(即运动矢量常常集中在搜索窗口的中心附近),减少了总的搜索点数,可以明显提高搜索速度,同时也具有较高的搜索精度。在信号变换部分,采用DCT变换,由于DCT变换的算法比较成熟,有许多现成的算法可以参考,计算量也不是太大,可以使得算法更精练,加快运行速度。
    在解码端,除了要完成视频解码和播放外,还要进行运动目标检测,根据检测到的目标的运动参数,对视频采集和编码参数进行动态的调整。在这里,运动参数主要指的是目标的运动速度和运动范围,因此,在实现方法上,首先求得相邻图像著行均值滤波,然后进行门限检测,去掉低于给定阈值的像素点,以忽略可能的缓慢的背景运动,以及避免个别像素点由于干扰等因素造成的灰度值的突变。然后利用分形算法,对求得的图像进行腐蚀(Erosion),以进一步去掉某些像素点很少的微小目标的运动。最后对图像进行膨胀(Dilation),根据膨胀后像素点的数目可以判断运动目标的范围大小,而根据像素点的平均灰度值的大小可以判断目标运动的速度快慢,并据此对采集和编码参数进行调整。
5.2软件优化
    在完成整个程序的原理验证和测试之后,还要对程序进行优化。由于嵌入式系统的系统资源非常有限,而数字视频处理的计算量又非常大,除了采用快速、高效的编解码算法,如已经提到的在运动矢量搜索中采用的菱形搜索方法,以及高效的DCT变换算法等等,根据Nexperia提供的指令集和硬件环境,对应用程序进行优化,是提高程序运行速度和效率的必不可少的环节。优化策略主要包括以下几个方面:首先是程序代码的优化。在视频编解码过程中,有些函数主要是进行大量重复的数学计算,这些函数的调用次数又非常多(如SAD的计算),单个地看,这些函数的运行时间并不太长,但反复地进行调用就要占用相当多的系统资源,对程序总体的运行速度有着很大的影响。考虑到Nexperia汇编代码的执行效率要比C代码高出许多,因此,对这部分代码采用汇编语言进行替换,将大大提高其执行速度。因为这些函数调用次数很多,函数每节省一个指令周期,对程序整体来讲,就可能节省成百上千甚至更多的指令周期,从而可能使替换后程序的整体运行速度有非常明显的提高。另外,在编写汇编代码时,要充分利用Nexperia的VLIW指令结构的特点,精心安排指令运行的先后顺序,使尽可能多的指令同时并行运行,提高程序的运行速度。同时在汇编指令的选择上,应尽可能地使用Nexperia提供的针对多媒体处理的专用指令,这样可以大大减少代码长度和代码的运行时间。此外,还要对具体算法的函数结构进行宏观考虑,尽量避免使用一些运行周期长的指令,如跳转指令(jmpf等)。采用汇编语言书写的函数经过优化后,程序的可读性降低了,但相对于程序处理速度的提高而言,这种代价是值得的,因为对于嵌入式的实时视频编码系统,处理速度始终是一个需要关注的核心问题,然后就是对编译器的优化。Nexperia的编译器提供了一些自动的优化策略,如循环展开、函数内联、代码嫁接以及对内存变量进行别名分析等等,其优化等级分为6级,根据具体情况对优化参数进行调整,并选择恰当的优化等级后,编译器可以自动对程序代码进行优化处理。与不进行优化的代码相比,优化后的代码可能要大一些,然而程序的运行速度更快了。除了编译器的自动优化之外,一些手工的优化措施,如手工的循环展开等等,可以弥补编译器自动优化的不足,也是非常必要的。
6结语
    本文介绍了基于Nexperia PNX1300的MPEG-4远程视频监控系统的工作原理和各部分的具体实现方法,该系统已经在Philips公司的Nexperia视频采集卡上开发调试成功,并已投入实际使用。该系统具有以下特点:①支持640×480及其以下的多种图像大小,其中包括CIF(352×288)、QCIF(176×144)等格式。②帧率连续可调,如PAL制式的帧率在1~25帧/s范围内连续可调。③码率连续可调。如对CIF(352×288)格式的原始图像,根据输出图像质量的不同,其码率在几十kbps到1 Mbps之间连续可调,码率大小与编码输出的图像大小、图像质量以及画面是否有运动目标及其运动剧烈程度有关。④在解码端,通过运动目标检测,提取目标的运动参数,并经由网络的反馈,实现动态的视频采集、编码参数调整,进而改变视频信号的码率和图像的视觉效果,因此,在出现运动目标时,解码端能够通过提高图像质量和改变图像的大小,获取运动目标的更多细节。系统具有灵活、高效的特点,因此具有很高的实际应用价值。

责任编辑:lmtwadmin

分享到:
版权声明:凡注明来源“流媒体网”的文章,版权均属流媒体网所有,转载需注明出处。非本站出处的文章为转载,观点供业内参考,不代表本站观点。文中图片均来源于网络收集整理,仅供学习交流,版权归原作者所有。如涉及侵权,请及时联系我们删除!