摘要:本文介绍了一种基于嵌入式处理器的移动视频点播系统。系统基于Intel PXA255 硬件平台和嵌入式Linux的软件平台。通过RTP,RTCP协议完成流媒体的无线传输。在PDA终端实现媒体实时回放,并通过Intel IPP进行针对特定处理器的MPEG4软件解码优化。
关键词:IPP Qte/Qtopia WiFi MPEG4
1前言
近年来,伴随着计算机与通信技术的迅速发展,多媒体技术也突飞猛进。与之相关的嵌入式数字视频与监控技术也逐步进入人类生活和生产的各个领域。在多媒体技术的各种应用中,比如视频会议、远程教育、安防监测系统等,最终都会涉及到视频传输与视频回放的问题。尤其在嵌入式的视频终端得到最广泛的应用,比如高级PDA,多媒体智能终端Smart-Phone.具有相当的市场潜力与应用前景。基于Internet的视频流媒体传输是一项应用及其广泛的技术。但是,目前一般的视频终端都是由PC机或笔记本电脑充当,且一般采用有线方式把视频服务器和视频终端连接起来,因此在一些无法或不便于用有线方式传输视频流媒体的场合,目前的解决方案就不太适合。而且在终端的解码回放效率受处理器的限制而在算法实现上会有瓶颈,如果在处理器芯片级上对软件解码回放进行优化,则将大大提高播放效率。本设计将采用基于无线网络的宽带传输方式,并采用Intel的最新IPP[2]对关键算法进行优化,从而实现对采集视频进行优化解码回放。此设计有着相当的应用开发前景而且有走向主流的趋势.本论文主要任务是开发一种手持式多功能无线视频终端设备以满足需求,该设备可同时为媒体监控服务器提供远程监控服务。
2基于Linux集成开发环境和系统框架的搭建
2.1开发平台的搭建
针对视频点播系统的系统框架,从大体上来应该可以分成服务器端和作为客户端的嵌入式PDA终端。服务器和客户端都使用Linux作为操作系统和软件开发环境。本设计的大部分工作都集中于PDA终端,下面主要介绍终端的集成开发环境。
由于嵌入式系统本身不具有软件的集成开发能力,而且不方便调试。所以设计采用PC+目标机的开发方式,在运行linux2.4.20内核的PC机上为sitsang板提供开发和交叉编译环境。利用sitsang板[1]的FF串口作调试口与PC的串口相连,在PC终端下进入目标系统控制台,可方便地进行调试工作,利用sitsang板的以太网接口和PC相连,建立点对点的连结,在PC上建立FTP服务器,将应用程序及内核等文件通过以太网接口传到sitsang板上。
2.2交叉编译环境的建立
嵌入式设计必须在PC上建立一个针对PXA255芯片的交叉编译环境,为此,将使用交叉编译工具链,包括:交叉编译工具arm-linux-gcc、二进制文件处理工具arm-linux-binutils及链接和运行库arm-linux-blibc。
建立起交叉编译环境后,就可以用此交叉编译器为sitsang板编译其内核和应用程序了。整个开发环境的结构框图如下:
2.3基于QT/Embedded库的GUI开发环境的建立[6]
本系统设计采用Linux 2.4.19的内核作为手持终端的操作系统内核,并为此内核打了补丁:patch-2.4.19-sitsang2.gz。
为使在通用PC上编译连接的程序能在目标平台PXA255板上运行,必须在开发端PC上安装正确的库文件。QT/E安装包只提供所有QT类和一些辅助工具的源文件,针对目标平台PXA255板,还需要为QT/E库增加触摸屏的库文件,以使基于QT/E的应用程序能正确的接收到触摸屏事件。交叉编译工具使用专门针对Xscale系列arm-linux-gcc来编译。
2.4 系统的体系框架
如图2所示,本设计采用客户机/服务器模式。服务器端为视频流发布源,基于Linux操作系统,完成流媒体服务器的功能;客户端为播放移动终端,基于嵌入式Linux操作系统,完成网络数据接收、反向流量控制、上层用户界面、视频解码与再现等功能。
3.流媒体协议栈实现
3.1 流媒体实现原理[3]
MPEG4数据流分别被封装上RTP[5]报头、UDP报头和IP报头,然后IP数据包通过Internet向接收端发送。当发送端收到已被正常编码压缩的MPEG-4码流后,按照RTP数据传输协议的报文格式装入RTP报文的数据负载段,并配置RTP报文头部的时间戳、同步信息、序列号等参数,此时数据报文已被‘流’化了;同时发送端周期性地接收RTCP包,将Qos反馈控制信息发送到视频服务器,服务器利用这些信息动态地改变自身参数设置。接收端收到IP包后先分析RTP包头,判断版本、长度、负载类型等信息的有效性,更新缓冲区的RTP信息,如收到的字节数、视频帧数、包数、序列号数等信息;按照RTP时间戳和包序列号等进行信源同步,整理RTP包顺序,重构视频帧;最后根据负载类型标识进行解码,将数据放入缓存供解码器解码输出;同时接收端根据RTP包中的信息周期性回送包含Qos反馈控制信息的RTCP包到数据发送端以检测发送端和接收端数据的一致性。
3.2 流媒体编程过程介绍
流媒体指的是在网络中使用流技术传输的连续时基媒体,RTP是目前解决流媒体实时传输问题的好办法,JRTPLIB是一个面向对象的RTP库,他完全遵循RFC1889设计,下面介绍如何在Linux平台上运用RTP协议实现实时流媒体编程。
3.2.1 初始化
在使用JRTPLIB进行实时流媒体数据传输之前,首先应该生成RTPSession类的一个实例来表示此次RTP会话,然后调用Create()方法来对其进行初始化操作。RTPSession类的Create()方法只有一个参数,用来指明此次RTP会话所采用的端口号。
3.2.2 数据发送
当RTP会话成功建立起来之后,接下来就可以开始进行流媒体数据的实时传输了。首先需要设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,这可以通过调用RTPSession类的AddDestination()、DeleteDestination()和ClearDestinations()方法来完成。目标地址全部指定之后,接着就可以调用RTPSession类的SendPacket()方法,向所有的目标地址发送流媒体数据。
3.2.3 数据接收
对于流媒体数据的接收端,首先需要调用PollData()方法来接收发送过来的RTP或者RTCP数据报。由于同一个RTP会话中允许有多个参与者(源),因此既可以通过调用GotoFirstSource()和GotoNextSource()方法来遍历所有的源,也可以通过调用GotoFisstSourceWithDat()和GotoNextSourceWithData()方法来遍历那些携带有数据的源。在从RTP会话中检测出有效的数据源之后,接下去就可以调用RTPSession类的GetNextPacket()方法从中抽取RTP数据报,当接收到的RTP数据报处理完之后,要及时释放。
JRTPLIB为RTP数据报定义了3种接收模块,通过调用RTPSession类的SetReceiveMode()方法可以设置下列这些接收模式:
RECEIVEMODE_ALL:缺省的接收模式,所有到达的RTP数据报都将被接受;
RECEIVEMODE_IGNORESOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被接受,而被拒绝的发送者列表可以通过调用AddToIgnoreList(),DeleteFromIgnoreList()和ClearIgnoreList()方法来进行设置;
RECEIVEMODE_ACCEPTSOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被拒绝,而被接受的发送者列表可以通过调用AddToAcceptList(),DeleteFromAcceptList和ClearAcceptList()方法来进行设置。
3.2.4 控制信息
JRTPLIB是一个高度封装后的RTP库,只要PollData()或者SendPacket()方法被成功调用,JRTPLIB就能够自动对达到的RTCP数据报进行处理,并且还会需在要的时候发送RTCP数据报,从而能够确保整个RTP会话过程的正确性。
在本系统中,使用RTPSession JRTPLIB类库提供的方法来实现底层的RTP/RTCP操作,并且把他封装在CrtpTransmitter类中,该类从Media Sink类继承而来,接收到相应的媒体帧数据,使用RTPSession类库的操作把数据发送到网络上。
4.基于IPP优化的MPEG4解码模块设计与实现
通过网络传输,由RTP/RTCP/RTSP 层分离出的数据在系统中是以流数据的形式存在的,因此,首先要对流式文件进行解压缩。同时,为了提高传输效率从而提高视频图像质量,网络上传输的原始视频图像都进行了压缩编码,所以,还需要根据编码格式进行相应解码。本系统主要针对先进的MPEG-4 视频图像压缩编码文件,通过Intel 提供的IPP库对MPEG4进行解压缩及优化。
IPP(Integrated Performance Primitive)是Intel个人互联网用户架构中的重要组成部分,它在操作系统之上向应用程序提供功能调用,同时又直接立足于硬件,穿越了操作系统。IPP的最大优势在于对各个函数进行了汇编级上的优化;根据CPU的流水线和总线特性采取措施,可提高访问速度和处理速度[4]。
IPP库函数具有多层处理功能。对功能较弱的,可选择IPP库的底层函数;对于较强功能,可选用一个合适的高层IPP函数;用底层“原子”函数的组合也可替代高层函数,应算法要求还能作出改动,这使得对编解码算法优化有着很大的灵活性。
该系统对编解码的具体优化过程见图3,按照MPEG4编码规范,在Micro Block层和Block层,用IPP作出算法优化,达到了大幅度提高编解码效率和提升系统实时性的目的。
MPEG-4将音视频码流的语法层次分为视频会话VS、视频对象VO、视频对象层VOL和视频对象平面VOP。一个完整的视频序列由若干个VS构成。VO是给定场景中的一些具体对象,是用户能够存取和操作的实体。若干个VO构成一个VS;VOL是表明VO的空间和时间分辨率的一个类型,与空间和时间分级性密切相关。每个VO可有多层VOL;VOP是VO在某一时刻的表象,即某一帧VO,MPEG-4对每个VOP独立进行编解码。
利用IPP优化的步骤首先是程序结构的重新设计。由于IPP 提供的接口为固定接口,在原程序基础上以IPP函数代替,这意味着需要额外添加变量和步骤,如果程序结构设计不当将在相当程度上抵消使用IPP而带来的增益。为了避免这种情况,对于原来的程序结构往往不能限于局部的调整,而要围绕利用IPP提供的接口为核心,进行较大规模的调整和安排。本设计中采用了IPP包中关于MP3的解码高效算法,使得设计的代码具有了更高的效率。为了能让编译器arm-linux-gcc支持,设计中采用了IPP 3.0这个相对老的IPP包版本
5.流媒体播放器GUI的设计
本设计用QTE/QTopia[6]作为应用程序图形界面GUI的类库和桌面开发环境。Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本。采用framebuffer作为底层图形接口。Qt/Embedded类库完全采用C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面,使用X下的开发工具Qt Designer可以直接开发基于Qt/Embedded的UI(用户操作接口)界面。Qtopia是一个应用于PDA等高级嵌入式设备的嵌入式Linux桌面与窗口平台。其具体的实现过程在此就不再介绍。
6 结束语
目前的许多视频终端都是基于Windows平台和有线方式连接方式的,而本课题的设计是基于linux下的无线网络方式的视频监控终端,它可以满足无线局域网内的视频点播、实时监控等业务的需要。使用IPP底层API函数实现针对特定处理器的软件解码的优化和多线程播放。对特定的关键算法进行程序结构重组和实现效率优化,提高图象解码效率!
本系统设计完成后,配合视频监控和流媒体服务器,可实现在服务器的无线AP覆盖范围内进行视频点播和实时监控,同时也可通过internet在世界各地进行静态图像监控。在PDA移动终端通过使用IPP技术优化解码后进行监控图象的解码回放。
IPP能够实现底层的交差平台的软件开发,提供高集成的数据通讯,单信号处理以及多媒体功能等,Intel IPP并且能够帮助优化电力消耗,达到最佳的CPU执行效率。其嵌入式的移植应用更是为实现手持设备上的低功耗,高代码执行效率提供了一种可行的软件优化方案。
参考文献:
本文作者创新点:在基于Intel Xscale构架的PXA255手持PDA上构建嵌入式Linux系统和相应的GUI开发环境。使用IPP底层API函数实现针对特定处理器的软件解码的优化和多线程播放。对特定的关键算法进行程序结构重组和实现效率优化,提高图象解码效率!为手持设备实现低电力功耗高代码执行效率提供一种可行的软件优化方案!并且移植了此API接口,屏蔽了其底层复杂性。