基于Android的OpenMAX框架研究与开发硕士学位.docx
- 文档编号:12704952
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:57
- 大小:1.14MB
基于Android的OpenMAX框架研究与开发硕士学位.docx
《基于Android的OpenMAX框架研究与开发硕士学位.docx》由会员分享,可在线阅读,更多相关《基于Android的OpenMAX框架研究与开发硕士学位.docx(57页珍藏版)》请在冰点文库上搜索。
基于Android的OpenMAX框架研究与开发硕士学位
基于Android的OpenMAX框架研究与开发
摘要
从近几年手机的发展趋势看,智能手机越来越流行,Android手机表现的尤为强劲。
而多媒体播放的娱乐功能显得尤为重要。
如何更好地提高多媒体效率成为了用户选择使用的一大契机。
本文主要研究在Android平台上实现硬件编解码。
主要是jni技术实现数据交换,通过对OpenMAX框架的抽象封装,流程控制,数据输入输出。
从而实现硬件编解码,并且把OpenMAX框架硬件编解码集成到项目中,加强多媒体文件编解码速度,提高性能。
论文的研究结果可以提供一个优秀的OpenMAX硬件编解码框架,为其他Android手机开发者参考。
本文的主要创新点和贡献点如下:
1,实现多媒体硬件编解码,提高多媒体文件的编解码效率。
2,对OpenMAX框架的抽象和封装,更加便于开发调用。
3,实现更加精简的代码便于后期维护。
4,加强产品的使用性,提高产品的用户体验。
本文同时介绍了GoogleAndroid平台及多媒体框架的工作机制,OpenMAX框架,硬件编解码。
详细分析OpenMAX框架的运行机制。
对Android和OpenMAX有一个更加详细的了解。
关键词:
Android,OpenMAX,多媒体框架,编解码
Abstract
Developmenttrendsofmobilephonesinrecentyears,smartphonesbecomeincreasinglypopular,Androidphoneisparticularlystrong.Theentertainmentfeatureofmultimediaplayerisparticularlyimportant.HowtobetterimprovethetheMultimediaefficiencyhasbecomeagreatopportunityfortheusertochoose.
ThispapermainlystudieshardwarecodecontheAndroidplatform.Themainisthejnitechnologyfordataexchange,theabstractencapsulationfortheOpenMAXframework,processcontrol,datainputandoutput.Inordertoachievehardwarecodec,andOpenMAXframeworkhardwarecodecintegratedintotheproject,toenhancemultimediafileencodinganddecodingspeed,improveperformance.ThethesisresultscanprovideanexcellenttheOpenMAXhardwarecodecframeworkofreferenceforotherAndroidphonedeveloper.Themaininnovationandcontributionofthisarticleareasfollows:
1,multimediahardwarecodec,improvetheefficiencyofencodinganddecodingofmultimediadocuments.
2,abstractionandencapsulationoftheOpenMAXframeworkeasiertodevelop.
3,toachieveamorestreamlinedcodetofacilitatelatermaintenance.
4,toenhancetheuseoftheproduct,toimprovetheuserexperience.
ThispaperdescribestheworkingmechanismoftheGoogleAndroidplatformmultimediaframework,theOpenMAXframework,hardwarecodec.DetailedanalysisoftheoperatingmechanismoftheOpenMAXframework.AmoredetailedunderstandingoftheAndroidandOpenMAX.
KeyWords:
Android,OpenMAX,multimediaframework,Hard-codec
图目录
表目录
绪论
本章为本文的绪论,主要介绍了项目的背景,研究的目的和意义,较为详细的介绍了当前Android手机设备的软件编解码和硬件编解码在手机中的使用情况,最后对本人进行的主要工作和本文的章节安排进行描述。
项目背景
目前,Android上的多媒体软件大部分都还没有使用OpenMAX硬件编解码提高手机性能,如何通过硬件编解码提高多媒体的性能仍处于需要加强的阶段,需要通过实际手机设备提高性能,与实际应用联系不够,所使用的多媒体软件性能不够强大。
基于此,本文主要结合视频编辑器项目和OpenMAX框架的结合,研究如何在Android项目中通过OpenMAX实现视频硬件编解码,以提高项目的编解码效率,提高性能。
Android系统对OpenMAX 层进行使用部分,基本上使用的都是标准OpenMAX 层之上的接口,只是对其进行了简单的封装。
标准的OpenMAX 实现非常容易以插件的形式嵌入到Android系统中。
Android中的多媒体引擎OpenCore和StageFright都是使用OpenMAX 作为多媒体编解码上的插件,只是没有直接通过OpenMAX 层提供的纯C接口调用,而是对纯C接口进行了一定的抽象封装。
并且Android上的多媒体引擎OpenCore和StageFright大部分都是采用了软件形式的编解码,很少采用通过硬件形式的编解码。
项目研究目的和意义
多媒体—无论图像、视频还是声音,都早已经成为了手机移动设备受到广泛欢迎的主要原因。
到目前,基本上每个手机设备都会有一个以上的摄像头,并且随着手机技术的不断更新,同时越来越多的手机设备都需要拥有更为高档次的多媒体性能。
目前使用者都是非常频繁地用手机来进行拍摄和浏览照片,同时也有录制声音和观看视频功能[1]。
Android系统的多媒体解决方案一般都是软件编解码,解码效率不高,并且代码复杂纷乱,不容易调试,这样满足不了消费者的需求,也不容易维护。
运用OpenMAX硬件编解码既可以解析大多数流行的媒体文件,而且编解码效率也是增加不少,这样既可以满足消费者的要求,对开发和OEM来说也方便维护。
本文通过对Android的OMXCodec的封装和抽象,对OpenMAX的控制,对数据的循环输入和输出,对代码的精简,对硬件编解码的控制。
实现了一个基于Android系统的,编解码效率更加强大的OpenMAX 多媒体编解码框架。
它是通过研究OpenMAX来实现一个更加简洁,功能更加强大的代码框架,而且便于后期维护,提供新的多媒体编解码解决方案。
目的实现可以屏蔽硬件特性,最大发挥硬件编解码效率的框架。
国内外现状分析
Android是以Linux为核心的手机操作平台,使用Java作为主要编程语言,但可以通过NDK支持C/C++,主要使用于便携设备[2]。
Android是Google公司在2007年11月5日公布的智能手机操作系统[3]。
早期是由原名是"Android"的公司来开发,谷歌在2005年收购"Android.Inc"公司后,继续对Android系统进行深入开发运营推广,它采用了4个主要层次架构,包括LinuxKernel(Linux内核层),Library(函数库)和AndroidRuntime(Android运行时库),ApplicationFramework(应用软件架构),Application(应用程序)[4]。
2012年初数据显示,无论设备的出货量还是手机的数据流量都已经成为了手机系统里面的老大,已经完全超过了IOS,黑莓系统,还有称霸十年的塞班系统,使Android系统成为了我们最为喜爱的智能手机系统[5]。
目前,Android系统不仅广泛应用于各种手机设备,而且平板电脑的数量也在急剧上升。
采用Android系统开始广泛流行,主要厂商众多包括HTC、三星、LG、摩托罗拉等,中国大陆厂商如:
华为、中兴、联想等[6]。
目前多媒体蓬勃发展,Android手机设备已经深入到了大众生活。
手机设备上的多媒体应用更加显的流行了。
更是由于3G时代的来临,多媒体功能越来越受到大众的喜欢。
编解码效率的提高对多媒体的性能提高有极大的帮助。
现在的手机上的编解码大体主要分为两类:
分为硬件解码和软件解码两种。
硬件解码的话,音质主要取决于内置的解码芯片,而如今的技术发展比较快,更为强劲出色的解码芯片已经不比
MP3差了,效率比较高。
而软件解码就是通过CPU的运算进而实现视频音频的播放,使用操作系统的手机一般采用上面这种方法。
当前的智能手机使用的CPU频率已经非常高,并且解码软件也非常成熟,支持解码MP3变得非常轻松的一件事情,输出的音频视频的质量还是非常高[7]。
一般播放器都会识别多种视频格式封装(即文件格式),例如,Coreplayer能播放AVI,WMV,MP4等多种格式,RUN播放器能播放rm,rmvb格式的视频。
Android系统中的的多媒体主要为OpenCore和StageFright。
Android的多媒体引擎OpenCore和StageFright都是通过OpenMAX 作为多媒体问卷的编解码插件,只是没有直接通过OpenMAX 层提供的纯C接口的调用,而是对纯C接口进行了一定的抽象封装。
OpenMAX是无授权费的,实现跨平台的应用程序接口API,目的是使媒体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。
也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。
OpenMAXAPI将会和处理器一起提供,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层的硬件结构[8]。
OpenMAX标准主要是针对嵌入式移动设备和手机移动设备的多媒体软件架构。
在架构底层上为多媒体的编解码和数据处理定义了一套非常完整的统一的编程接口即(OpenMAXILAPI),并且对多媒体数据编解码进行了非常系统的抽象,同时用户可以不用关注底层硬件的细节了。
因此,大多数的多媒体软件和多媒体框架就是通过OpenMAXIL实现了一种可以用统一的方式来让codec和其他多媒体数据实现处理功能,屏蔽了底层硬件的差异性。
本人主要工作
在这个项目开发中,本人主要进行的工作:
1.研究Android系统的多媒体框架。
2.研究OpenMAX 框架的运行机制。
3.设计软件的架构。
设计了OpenMAX框架硬件编解码的处于的层次,及OpenMAX框架硬件编解码的逻辑设计,对硬件控制,数据控制进行了详细的设计。
4.编写OpenMAX 模块的的代码,加入逻辑控制。
5.将功能集成到项目。
6.优化代码,提高编解码效率。
7.测试项目,修改出现的问题。
章节安排
第二章:
对Android系统的介绍,描述Android的结构及多媒体框架的现状。
第三章:
对OpenMAX 的具体介绍,具体分析了OpenMAX框架的关系和接口,为下一步设计做好准备。
第四章:
对OpenMAX 框架进行设计,详细地阐述了如何设计整个框架。
设计对硬件的控制,对数据的控制。
第五章:
对OpenMAX 框架进行实现,详细地阐述了如何实现整个框架。
第六章:
对OpenMAX 框架的应用,把OpenMAX框架集成到项目里面,能够在项目中远行。
第七章:
对OpenMAX 框架的效果显示
第八章:
对全文进行总结,并对进一步工作进行展望。
第1章Android系统的介绍
本章介绍了Android操作系统,首先简要介绍了一下Android系统的背景,然后分别从系统架构,多媒体框架和目前的编解码等方面详细的介绍了一下,并重点介绍了Android多媒体框架中的OpenMAX的作用。
最后给出了搭建开发环境的步骤并对开发步骤做出介绍。
1.1Android系统的简介
由Google牵头和30多家业内移动技术和无线应用领域非常领先的企业组成的一个开放手机联盟(OpenHandsetAlhance)同时发布了其Android智能手机平台[9]。
Android一词的原义就是指“机器人”,同时也是Google于2007年11月发布的基于Linux平台上的开源智能手机操作系统的名称。
这个平台由用户使用界面、linux操作系统、应用程序以及中间件一起组成,号称是第一个为移动手机终端打造的非常强劲和全面的移动智能手机系统[10]。
每当谷歌发布它的新一版本的智能手机操作系统之后,各家手机厂商都会把升级他们上一版本智能手机系统便会进行了,同时也会把下一版本智能手机系统的消息放在互联网上流出,这样的形式目前已经成为谷歌在推广Android手机操作系统的一种常用方式。
在Android2.3姜饼马上发布的时候,Android3.0系统蜂巢就会被曝光,当各家手机厂商都在把自己的精力放在把Android手机升级到Android2.2操作系统的同时,国外媒体就会有消息传出Android下一版本手机操作系统名称已经被确定了,该操作系统的系列产品代号为IceCreamSandwich,简称为ICS,直译过来的名字就是冰激凌三明治。
并且谷歌方面已经明确的告诉大家:
Android4.0是把各手机系统与平板电脑系统融合在一起的产品,并没有限定最低硬件要求,理论上来讲,现有的Android2.2/2.3设备都可以升级到Android4.0。
在硬件上没有设限。
Android智能手机操作系统采用的是软件堆层(softwarestack,又名软件叠层)的架构,主要分成了三部分。
底层Linux内核一般只提供了最基本的功能,其他的应用软件是由各设备生产公司自行开发,当然部分程序是以Java编写。
1.2Android平台的架构
如图2.1所示,Android基本上就是在嵌入式Linux系统的上面再加上一些重要的手机应用开发的软件,如果深入研究Android系统架构,就会发现整体自底向上主要是由4个主要层次构成,包括LinuxKernel(Linux内核层),Library(函数库)和AndroidRuntime(Android运行时库),ApplicationFramework(应用软件架构),Application(应用程序)。
图2.1Android系统的构成
1.2.1LinuxKernel(Linux内核层)
Android核心系统服务都是基于Linux内核上的,如安全性、内存管理、进程管理、网络协议栈和驱动模型等模块。
Linux内核同时也是连接硬件和软件栈之间的桥梁。
1.2.2Library(函数库)
Android包含了C/C++库,Android系统中的上层应用程序可以调用这些库。
它们主要是通过Android应用程序框架来为软件开发者提供调用一些接口的服务。
下面是Android的主要核心库:
系统C库:
C系统的函数库(LibC),它是专门为基于嵌入式Linux手机
移动设备专门定制的;
媒体库:
基于Stagefright,该库主要为音频、视频格式文件的回放和录制,静态图像文件的编解码的调用,编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG;
SurfaceManager:
管理图像显示的子系统,同时为软件提供了2D和3D图层的无缝融合[11];
SGL:
负责底层2D图形的引擎;
3D库:
在OpenGLES1.0API基础上实现;该库提供了可以使用3D硬件的加速或使用非常优化的3D软件加速;
FreeType:
位图(Bitmap)和矢量(Vector)字体显示;
SQLite库:
一个小型的数据库引擎,可以被所有程序使用,并且功能非常强。
1.2.3AndroidRuntime(Android运行时库)
Android包含一个核心库,为Java编程语言核心类库提供了各种可用的功能,使得每个Android程序都是虚拟机中的一个实例,都有自己的进程,拥有对立性。
Dalvik虚拟机为应用程序提供了一个良好的远行环境,同时一个设备可以远行多个Dalvik虚拟机。
Dalvik虚拟机执行的是.dex文件。
1.2.4ApplicationFramework(应用软件架构)
开发者使用所有API框架可以和核心应用程序一样的权限。
该应用程序的架构设计简化了组件的重用;每一个人都可以发布自己写的应用程序里面的功能块,同时其他开发者也可以调用他的功能块来开发应用程序。
同样,由于应用程序的可复用机制也使各个用户可以非常方便地替换各个程序组件。
每个软件开发都会有服务和系统支撑,这其中包括:
视图(Views):
效果非常好可以扩展,可以被应用程序调用,并且很丰富,它包括按钮(Buttons),列表(Lists)、文本框(TextBoxes)、网格(Grids)、甚至包括可嵌入的Web浏览器;
内容提供器(ContentProviders):
让各个应用程序可以实现数据的共享,可以一个程序访问另外一个程序的数据,实现咯数据的分享;
资源管理器(ResourceManager):
管理和访问各种非代码的资源,包含对本地字符串、布局文件(LayoutFiles)
和图形的管理;
1.2.5Application(应用程序)
Android发布的时候会和它同一系列一些核心应用程序包一起发布,该应用程序重要包括JAVA编写的一些应用程序,比如一些视频播放器,摄像程序,图片浏览等等。
所有的应用程序都是使用Java语言编写[12]。
1.3Android系统的多媒体框架
Android的多媒体主要框架部分包含了应用程序、JAVA框架层、C语言框架层、硬件抽象层等环节。
媒体的播放的时候实际上就是由下层的OpenCORE或Stagefright等多媒体框架实现的[13]。
Android的系统的多媒体框架在Android2.2版本之前主要使用的是OpenCORE,在Android2.3版本之后使用的是Stagefright。
具体的分析如下
图2.2Android多媒体播放整体框架
最上层的JAVA应用程序是使用媒体URI(媒体文件或者流媒体)来作为多媒体框架输入设置给媒体播放器,经过了Java框架层,到Jni层,在到本地框架层,一直设置到引擎PVPlayer。
这个过程就是为媒体设置了媒体URI的路径,但是这个时候数据传递还没有开始。
当开启了PVPlayer,再进入到P
VPlayer后开始进行了解析,再根据媒体的格式把文件分成了音频流(MP3,AMP,AAC等)和视频流(H263,H264,MPEG4等),然后经过编解码器的处理,把数据变成原始数据(音频通常是PCM,视频通常是YUV或RGB格式)。
再把音视频原始数据放在音频和视频的输出播放环节(扬声器或者显示屏等硬件)进行输出[14-15]。
AwesomePlayer是Stagefright的核心类,创建并管理Parser(MediaExtractor),Codec(OMXCodec),Render(AwesomeRendererer)及AudioPlayer等。
音频播放功能流程通过调用AwesomePlayer的setDataSource函数来设置数据源;AwesomePlayer通过调用MediaExtractor的Create函数来识别该文件的格式,MediaPlayer判断该文件为WMA格式后,会创建一个WMAExtractor,在创建WMAExtractor的同时,WMAExtractor会解析文件头,获取文件中的相关信息。
然后调用WMAExtractor的getTrack函数创建一个WMASource;AwesomePlayer通过OMXCodec创建一个WMADecoder;AwesomePlayer接着创建一个AudioPlayer,并把WMADecoder做为数据源传给AudioPlayer,并调用AudioPlayer的start函数;AudioPlayer获取WMADecoder中的相关参数:
文件类型、采样率、声道数,并根据该数据开启AudioSink,并把AudioSinkCallback做为回调函数传给AudioSink。
AudioPlayer先调用WMADecoder解第一帧数据,并把该数据传给AudioSink去播放,当播放完成后AudioSink会调用回调函数AudioSinkCallback再取解码后的数据,AudioSinkCallback又会调用FillBuffer函数获取解码后的原始数据,解码后数据如果被取完后,AudioPlayer又会调用WMADecoder解下一帧数据给AudioSink,来回反复,直到文件中数全部被播放。
在拉动滚动条时,上层会传来SeekTime,经AudioPlayer传给WMADecoder再传给WMAExtractor,WMAExtractor根据上层传来的SeekTime判断出要播放的原始数据的起始位置,然后从该位置读取一个数据包传给WMADecoder解码[16]。
本章小结
本章为全文的第二章,介绍了Android操作系统构成,重点介绍了Android多媒体框架的组成,最后介绍了目前的编解码。
第2章OpenMAX 介绍
本章主要分析了OpenMAX 框架的主要运行的模式,介绍了几个重要功能模块和接口函数。
和Android中的情况。
2.1OpenMAX 的简介
OpenMAX是无授权费的,实现跨平台的应用程序接口API,目的是使媒体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。
也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。
OpenMAXAPI将会和处理器一起提供,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层硬件结构[8]。
2.2OpenMAX的概述
2.2.1OpenMAX标准化接口[17]
OpenMAX是Khronos公司制定的针对手持设备和嵌入式移动设备的行业标准。
它是无授权费的,跨平台的API接口。
OpenMAX标准主要是针对嵌入式移动设备和手机移动设备的多媒体架构。
并且在架构底层上可以为多媒体文件进行的codec或数据处理定义了一套完整统一的编程接口(OpenMAXAPI),同时对多媒体数据处理的时候进行了系统的封装抽象,屏蔽了底层的结构,更加快速开发程序。
因此, 大多数的多媒体软件和多媒体框架都是通过OpenMAX来实现一套非常完整统一的接口,让codec和其他多媒体的数据处理功能变的更加方便,同时实现了跨越软硬件平台的可移植性[18]。
OpenMAX共分为3层:
OpenMAXIL(Integrati
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android OpenMAX 框架 研究 开发 硕士学位
![提示](https://static.bingdoc.com/images/bang_tan.gif)