罗其朝,李太君,李延龙
(海南大学信息科学技术学院,海南海口570228)
自从Google公司在2007年11月5日推出了基于Linux内核的开源操作系统Android以来,Android凭借其良好的用户体验、低廉的成本和较高的开放性吸引着越来越多的终端厂商.Android具有以下优点:1)开源软件众多;2)操作方式新颖,可玩性高;3)不断地创新,并将其他系统远抛于后面;4)价格低廉,更适合工薪阶层.
随着无线通信技术和多媒体技术的迅速发展,全球移动终端用户数越来越庞大,特别是第3代移动通信技术(3G)在我国的不断演进与实现以及第4代移动通信的商业式运营的今天,通过移动通信网络为移动终端提供流媒体服务的业务也在迅速发展,更充足的带宽给移动流媒体技术的发展带来了广阔的前景,为丰富无线流媒体业务带来了新的契机.因此,移动流媒体服务具有巨大的市场潜力,并成为移动业务研究的热点之一.近几年,由于Android的兴起,使得基于Android的技术开发的需求日益增加,然而Android系统却一直没有高效的流媒体解码模块.而H.264作为高效的流媒体编解码标准应用于各类的流媒体系统,取得了很好的实际效果.正是在这样的背景下,笔者将高效的解码模块H.264移植到Android平台的移动终端,使其实现了对H.264的解码播放,获得了更高效的Android移动终端的流媒体系统.
1.1 移动终端的流媒体系统结构设计 将整个系统分为3个部分:流媒体源采集与制作、无线通信网络传输、Android移动终端解码播放,系统结构如图1所示.前端主要使用3种方式来获取流媒体源信息,使用实时采集设备对流媒体源信息进行实时的采集;从存储磁盘中获取相应的流媒体源信息;对其他的媒体素材进行转码得到流媒体源信息.
1.2 流媒体的无线通信网络传输 流媒体的无线通信网络传输过程中所需的主要协议在TCP/IP协议栈[1]中的位置如图2所示.
图1 移动终端的流媒体应用系统结构设计图
图2 流媒体协议在TCP/IP协议栈中的位置
Android支持RTSP/RTP的直播方案,在流式传输的实现方案中,协议的使用决定了数据是否能有效、可靠的传输.本系统主要协议的使用过程为:Android移动终端采用了应用层协议RTSP向流媒体服务器请求流媒体数据;流媒体服务器接收到移动终端的数据请求后,对相应的流媒体源进行数据的采集并制作成流媒体数据,再经传输层处理成RTP数据包,然后该数据包经过传输层RTP/UDP协议、网络层IP协议以及WLAN等无线协议发送给Android移动终端.实时传输的网络协议RTP(Real-time Transport Protocol)是用于Internet/Intranet针对多媒体数据流的一种传输协议.RTP协议本身包括2个部分:RTP数据传输协议和RTP传输控制协议,即RTCP(RTP Control Protocol).RTCP为RTP提供了可靠与有效的保障机制,确保了数据传输的有效性与可靠性[2].
Android的多媒体框架在2.2版本之前是Open Core.Open Core系统提供的解码格式较少,Open Core支持的音频格式有:3GPP(.3gp),MPEG-4(.mp4,.m4a),mp3,Type 0 and 1(.mid,.xmf,.mxmf),RTTTL/RTX(.rtttl,.rtx),OTA(.ota),Melody(.imy),Ogg(.ogg),WAVE(.wav);支持的视频格式只有 2 种:3gp和mp4,并没有对H.264的解码.在2.3版本之后是Stagefright,也没有对H.264的解码.Android几个版本的推出都缺乏对流媒体的解码,所以,要基于Android系统来开发移动终端的流媒体系统,就需要将相应的流媒体解码模块移植到Android系统.
面对复杂的无线传输环境,编码方式对移动终端的接收至关重要.H.264是由ITU和ISO/IEC联合制定的.在不同的测试速率下,H.264的峰值信噪比(PSNR)比MPEG-4平均要高2 dB,比H.263平均要高3 dB[3].其拥有的高效压缩比以及所提供的网络适应机制在很大程度上适应了无线通信条件下带宽窄以及网络状况不稳定等情况.使用H.264编码标准进行编码的流媒体数据能很好地适应在无线通信网络下的传输[4],H.264也因此成为在无线通信环境下流媒体传输优先考虑的视频压缩标准.
3.1 H.264解码原理 H.264标准编解码流程主要包括着5个部分:帧间和帧内预测、变换和反变换、量化和反量化、环路滤波以及熵编码.其利用到的技术有:运动预测技术,能使时间冗余达到最小;帧内预测编码模式技术,能使空间冗余达到最小;将运动预测与帧内编码的技术变换到频域中,减少了因压缩而出现的错误;熵编码,可以用来减小数字表示的信号冗余度的可变字长无损编码方法.
流媒体是一种流式传输的技术,是将所接收到的数据的开始部分存入内存,对数据包进行缓存,到一定的存储量时使视频正确输出,实现边下载边播放,这种流式技术大大缩短了启动时延,大量降低了对系统缓存容量的要求,并减少了客户端用户的等待时间.经过无线网络的传输并正确接收后,流媒体信息面对的问题就是对这些数据进行解码播放,对H.264的解码,是从NAL接收到的前端流媒体服务器进行压缩处理过的数据流中进行熵解码,并在重排序后获得一系列量化系数,然后通过反量化以及反变换获得残差的数据模块.而同时解码器使用解码的头信息创建预测的数据模块,残差的数据模块与预测的数据模块相加后所得到的数据经过滤波后就得到视频数据,实现了对H.264的解码[5].如图3所示,解码图像还原显示是将视频数据转化成RGB数据显示在屏幕上[6].
图3 H.264的解码器功能框图
3.2 H.264移植到Android的实现 实现基于FFmpeg的全功能的播放器比较容易,并且成本比较低,本文的解码器参考开源项目FFmpeg,选择移植FFmpeg到Android平台,虽然软解码的速度会比硬解码的速度慢,但是随着手机硬件的飞速发展,软解码完全能满足实际要求.将FFmpeg移植到Android平台上,可实现本文的Android终端的H.264解码部分.
JNI(Java Native Interface)是Java本地接口,通过它提供了若干的API,实现了将C库与Java进行衔接.解码程序通过JNI把对H.264解码的C语言库与Java进行衔接.移植的步骤如下:1.用Android ndk框架对FFmpeg源码编译成后缀为so的类库,该动态链接库文件就是FFmpeg框架.该so库进行JNI调用,可以由Java层调用的,而这些jni方法里用到的函数就是来自该so类库;2.使用jni方式撰写C代码,其中需要包含相应的FFmpeg头文件;3.撰写相应的Android.mk文件,里面指定需要编译的C代码以及需要链接的动态库;4.执行ndk-build生成相应的jni库;5.创建Android Java程序,代码中LoadLibrary相应FFmpeg库以及刚才生成的jni库.值得注意的是Android ndk的Makefile文件,即Android.mk文件语法和普通的Makefile文件有很多不同之处,所以在跨平台编译FFmpeg源码时一定不能还使用原来的Makefile文件.所以,想要移植就必须将FFmpeg里的Makefile文件全部替换为ndk中的Android.mk文件.移植到Android平台最终为本文中播放器的解码模块,将解码后的视频数据用Bitmap显示,Draw到Surface-View的方法显示到手机屏上.移动终端(手机或PDA掌上电脑),其中央处理器的速度和PC相比,其运算速度相对比较慢,在短时间内不可能得到很快提升.所以,移动终端的流媒体应用程序的编解码必须严格地规范[7],最基本的要求就是做到程序代码合理科学.
本文中Android移动终端的H.264解码器的模拟所用的工具为:
1)Android SDK为Android-sdk_r18-Windows版;
2)IDE 开发环境是 Eclipse 3.7IDE for Java Developers版,ADT 为18.0.0版;
3)PC主机开发环境是Windows XP,酷睿双核T6570,内存为2G.
实验测试采用了4个QCIF格式的标准序列:Foreman,Mother&Daughter,Claire和Grandma,序列都经过 H.264开源编码器JM10.1的Baseline编码,将4个测试文件在Android上进行解码.解码得到的效果如图4所示.
在Android1.6模拟器上显示了移植的H.264解码器对测试文件的解码效果,从测试结果可看出,对QCIF格式的标准序列的H.264码流解码后,播放的画面流畅、平稳,播放速度达到18~35 fps.在无线通信网络带宽不足的情况下,H.264能够提供比H.263,MPEG-4等更好的播放效果.在无线通信网络状况好的情况下,H.264的流媒体解码播放基本满足了实时性的要求.
图4 解码效果图
随着无线通信网络的快速发展,基于Android移动终端的流媒体系统的应用将有广阔的发展前景.本文基于Android平台的特点,设计并介绍了应用于Android移动终端的流媒体系统.并将高效的H.264解码标准实际移植到Android平台,同时作为该系统中移动终端播放的解码模块.实验效果表明,本文所介绍的应用系统完全能适用于实际的Android移动终端流媒体应用.
[1]王亚琴,董彦荣,薄静仪.流媒体传输协议及应用[J].办公自动化,2009(24):36-38.
[2]吴海军.浅谈流媒体的传输技术[J].科技信息,2011(14):239-240.
[3]WIEGAND T,SULLIVAN G J.Overview of the H.264/AVC video coding standard[J].IEEE Transactions,2003,7(13):560-576.
[4]刘易,李太君.3G移动终端流媒体播放技术的研究[J].通信技术,2011,44(3):123-124.
[5]毕厚杰.新一代视频压缩编码标准H.264/AVC[M].北京:人民邮电出版社,2005:245-257.
[6]寇毅,朱志祥.基于H.264标准的视频编解码器软终端的一种实现[J].西安邮电学院学报,2006,11(5):47-51.
[7]龚琪琳.基于H.264协议的手机实时视频播放的研究[J].计算机与现代化,2010(1):90-91.