ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:106.19KB ,
资源ID:2373782      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2373782.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(mini移动平台系统构建齐天宇22.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

mini移动平台系统构建齐天宇22.docx

1、mini移动平台系统构建齐天宇22 课程结业报告题 目:mini移动平台系统构建课程名称:移动编程技术班 级: 20092012学 号: 2009201222学生姓名: 齐天宇指导教师: 李洁沁哈尔滨工程大学2011年11月18日摘 要随着移动通信技术和多媒体技术的迅速发展,融合手机、网络、多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务已经成为可能。全球移动用户数非常庞大,因此移动流媒体服务具有巨大的市场潜力,也正成为移动业务的研究热点之一。在这一背景下,针对移动网络和移动终端的特点,提出移动流媒体客户端的解决方案很有现实意义。 移动流媒体客户端结合FFmpeg

2、源码的解码流程设计出基于分层结构的流媒体播放器的系统架构,并讨论了FFmpeg的修剪优化方法,使其效率等特性适用于移动终端,再将优化后的代码移植到Android手机开发平台。该播放器能够播放本地文件,并且能够对流媒体文件进行播放。 关键词:Android ; FFmpeg;音乐播放器1 移动平台系统设计1.1 功能描述与系统总体设计随着移动通信技术和多媒体技术的迅速发展,融合手机、网络、多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务已经成为可能。全球移动用户数非常庞大,因此移动流媒体服务具有巨大的市场潜力,也正成为移动业务的研究热点之一。在这一背景下,针对移动网

3、络和移动终端的特点,提出移动流媒体客户端的解决方案很有现实意义。 本论文结合FFmpeg开源代码中解码流程,提出了移动终端流媒体播放器基于分层体系架构的设计方案。该设计的特点是在底层屏蔽不同类型文件解码时对媒体流处理的差异,并且提供了对外部摄像头设备的控制功能,最终在Android平台上实现该播放器。 播放器无论播放本地文件或是网络流媒体文件,都需要有获取媒体数据,解码音视频媒体流,将解码后媒体数据显示给用户三个处理阶段,根据文件播放的流程中这三个明显的处理阶段,本文提出基于层次的播放器结构设计。 由于本地文件和网络流媒体文件的数据获取方式是不相同的,若要保持上层解码的一致性,需要对两类文件进

4、行预处理,形成相同格式的数据提供给上层解码。根据以上特性,结合文件解码流程本文中面向实时监控的播放器设计采用分层结构,每层独立完成任务,使系统的耦合度降低,利于各层独立扩展而不影响上下层的应用。从下至上依次是数据提取层、数据预处理层、音视频解码层和用户界面。 用户界面层主要提供用户和播放器之间的交互接口,如播放本地文件时可以实现暂停、快进、快退等功能,在观看流媒体文件时可以通过数字键、导航键或者播放器上方向按钮控制摄像头的焦距、方向等信息。 音视频解码层主要有解码选择组件、各种主流音视频格式的解码器和多路媒体流之间同步的功能。解码选择组件从本地文件或者流媒体文件头中获取到媒体的解码格式信息,根

5、据该格式信息选择相应的解码器对压缩后媒体流进行解码。该部分是由FFmpeg修剪优化后作 为播放器的解码模块的。多路媒体之间同步包括视频流和音频流的同步,在播放本地文件时可能还需要字幕的同步1。该流媒体播放器分层结构如图1所示。图 1面向实时监控播放器的分层结构 数据预处理层对本地文件按照其媒体格式解封装,获取文件的音视频或字幕等信息并将其按帧放入相应上层待解码缓冲区。对流媒体文件将去除RTP的包头信息,并将RTP中音视频信息组帧,将完整的数据帧传给上层待解码缓冲区。而封装控制信息组件按照PELCO-D/P协议规定的文本格式封装用户的控制输入,并将控制信息传递给下层。 数据获取层的功能包括本地文

6、件、流媒体文件的获取和摄像头控制信息的发送,前者只需读取本地文件即可,流媒体文件的获取需要从流媒体服务器获取媒体数据信息。流媒体文件获取部分包括前期会话协商部分、数据发送部分和数据缓冲部分。其中媒体信息协商部分需要使用RTSP协议2协商媒体流常规信息,如媒体类型(视频和音频)、传输协议(RTP/UDP/IP)和媒体格式(H263、mpeg)和媒体传输端口等信息2。1.1.1 FFmpeg到Android平台的移植FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。本播放器只需要FFmpeg中对文件解封装及音视频解码部分的功能,若将FFmpeg整个解决方案全部移植到目

7、标平台上会造成大量的代码冗余。并且FFmpeg代码的开发时基于Linux操作系统的,并没有考虑到手机平台的处理能力小,能源不足等限制,因此针对手机上特定功能需求将FFmpeg代码进行修剪及优化是十分重要的。 1.1.2 FFmpeg修剪及优化从FFmpeg如此庞大并且代码结构复杂的源代码中找出本文需要的代码确实是一项非常艰难的工作。在Linux下编译运行FFmpeg代码时需要经过configure、make、make install三步才能将FFmpeg正确的编译到Linux系统当中。其中configure阶段会生成一个configure.h和make文件,从这两个文件中可以查找出该次编译都编

8、译了那些文件3。 经研究发现在configure源代码的时候可以加入很多配置参数,其中参数分为基本选项参数、高级选项参数还有专门提供的优化参数。优化参数主要负责配置在编译时需编译的内容。对FFmpeg的修剪也恰是将本系统中不需要的文件去除,因此本文利用选择适当的优化参数的方法找出播放器所需文件。对这些参数仔细研究后,得出编译时设置的参数如下: ./configure -enable-version3 -disable-encoders -enable-encoder=h263 -enable-encoder= amr_nb -disable-parsers -disable-bsfs -ena

9、ble-muxer=tgp -disable-protocols -enable-protocol =file。 以上面所示的参数配置编译源文件时,系统只将h263、amr_nb的编码方法和3gp的文件封装格式及其所有的解码格式、解封装文件的源代码部分编译到了链接库。 此时被编译到链接库的源代码集合即为本文所需的源代码有效集,通过查找configure.h和make文件中的后缀名为.o文件,后缀名为.o的文件是编译.c代码时生成的目标文件,每一个被编译的.c文件都会生成.o文件,所以通过查看所有的后缀名为.o的文件名,便可得知在该配置参数下被编译源文件有哪些,因此可以得出本文所需编译的源文件最

10、小集合。 FFmpeg开源代码虽然能够跨平台编译运行,但其代码的设计都是针对于PC机而言的,PC机和手机从CPU处理能力、能源、内存等各方面的资源都具有很多大差异,本文中针对手机的特点主要从以下几个方面优化代码: 1. 去除冗余代码、规范程序结构、减少if-else 的判断、调整局部和全局变量、使用寄存器变量代替局部变量,减少不必要的代码冗余,去除FFmpeg 调试过程中的打印语句; 2. 用逻辑移位运算代替乘除操作,因为乘除运算指令的执行时间远远大于逻辑移位指令,尤其是除法指令,使用逻辑移位运算可以减少指令的运行时间; 3. 注意循环函数的调用,尽量减少多重循环的使用,编写代码时尽量减弱上次

11、循环与下次循环的相关性,减少不必要的代码计算量; 4. 设置合理的缓存。针对FFmpeg 移植的目标平台Android平台,设置适合此本台的缓存大小4。 1.1.3 FFmpeg移植 Google发布的NDK的makefile文件即Android.mk文件语法和普通的makefile文件有很多不同之处,在跨平台编译FFmpeg源代码时并不能使用原有的makefile文件。所以移植的先决条件就是将FFmpeg里的makefile文件全部替换为NDK中的Android.mk文件。 通过分析FFmpeg的模块结构得知avutil是基础模块,avcodec模块的编译基于已经编译好的avutil模块,a

12、vformat基于前两者,按照这种模块结构本文编译移植的顺序为avutil、avcoedec、avformat5。1.2 驱动层设计本文设计的系统需要进行部分的设备驱动程序的开发,主要的驱动开发工作在于CF网卡和SD存储卡两个设备。1.3 内核运用描述Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件堆栈之间的硬件抽象层。整体架构上来看,Android相比其它平台显示出了自身的特点,如集成了WebKit浏览器、Dalvik虚拟机等模块6。 1.4中间层库设计1.4.1数据获取层该层完成主要功

13、能为与流媒体服务器协商媒体信息细节,并根据协商结果从服务器端获取流媒体数据,将流媒体数据存入缓冲区,按照本文中缓冲策略将数据包发送给数据预处理层,其结构图如图2所示:图2 数据获取模块结构图 本文中该层一共启动五个线程,其中一个线程中启动TCP连接,用于RTSP会话协商,并且在RTP数据传输期间,该TCP连接必须一直保留。两个线程分别为接收音频和视频RTP数据的线程,另外两个线程分别为接收以及发送音频和视频的RTCP数据包。 1.4.2 数据预处理层本层对本地文件的预处理完全依赖于FFmpeg提供的功能文件解封装功能,而流媒体文件的预处理需将一个或多个RTP数据包整合在一起,这部分技术已经相对

14、成熟,本文将不再复述。 本文设计的PELCO-D协议文本,最初默认情况下位命令字1、命令字2全部为0,数据字1和数据字2值为20H。通过上层发送的按键消息修改相应命令字1、命令字2的相应位。2 移动平台开发环境2.1 描述开发环境整体结构搭建Android开发环境需要的软件:1.操作系统:Windows XP或Linux2.软件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)3.IDE环境:Eclipse IDE+ADT Eclipse3.3以上4.JDK:J

15、ava Runtime Environment虚拟机 、(JDK)Java Development kit2.2 编译环境Android运行时包含一组核心库,提供了Java语言核心库内的大部分功能。每一个Android应用运行在自己的进程里,应用自己的Dalvik虚拟机实例。Dalvik可以让个设备高效的运行很多个VM。Dalvik虚拟机执行DalvikExecutable(dex)格式的文件,该格式的文件经过优化占用很小的内存。该虚拟机是基于存储器的,运行经过Java语言编译器的类,这些类通过“dx”工具被转换成dex格式。Dalvik虚拟机依赖Linux kernel来实现一些潜在功能,例

16、如线程和底层内存管理。2.3 Make工具1. 关于config.h和config.mak 首先说明一下FFmpeg自带的 makefile的框架,FFmpeg在经过configure命令之后会产生一个config.h文件和一个config.mak文件,这两个文件加起来共有 600-700个宏定义,用来描述编译后代码的各个方面参数设置,其中有关于体系架构、编译器、链接库、头文件、版本、编解码器等等相关的宏定义。在这一部分必须要修改关于平台差异方面的定义,比如必须把体系架构改成Android平台的ARMv5TE,这时文件编译的时候指令集就会选择ARM的指令集而不是X86的指令集。这两个文件很重要

17、,以后很多文件都要include config.h这个文件,编译器会根据这个文件而选择性对代码进行编译。 2. 编译libavutil.a 在libavutil建立一个Android.mk的文件,libavutil里的makefile文件需要调用subdir.mak,这个其实就是真正的编译,但是书写在Android.mk下,这个make文件可以不要,但需要直接把对应的源文件引入,标准的makefile是指定.o目标文件,但在Android.mk中需要直接指定.c源文件,Android.mk文件如下所示: LOCAL_PATH := $(call my-dir) include $(CLEAR_

18、VARS) LOCAL_MODULE := avutil LOCAL_SRC_FILES:=adler32.c include $(BUILD_STATIC_LIBRARY) 其它模块按照相同的方法书写Android.mk文件,移植到Android平台最为本文中播放器的解码模块7。 2.4 目录结构Android体系结构包括了以下几个层次:第一层:操作系统层。Android操作系统是基于Linux2.6开发,Linux也是一个开放的操作系统。本层主要处理各种设备的驱动。第二层:类库与android运行时系统层。本层对应一般嵌入式系统,相当于中间件层。主要类库主要包括了C库、多媒体框架、SGL、

19、SSL、OpenGL、界面管理工具、SQLite、Webkit等等;android运行时系统主要是android虚拟机技术-Dalvik。Dalvik是基于JVM(java虚拟机)开发,执行dex格式的文件。第三层:应用程序械框架层。Android应用程序框架层主要是为android应用开发者提供的API层。由于它上层的应用程序是java开发的,因此本层提供了包含UI中所需要的各种控件,具体包括了Views、Lists、Grids、Buttons、Ativity、Service、Content Prodvider等等。第四层:应用程序层,也是最上面的一层。该层是Java的应用程序层,Andro

20、id内置的Google Maps、E-mail、即时通信工具、浏览器、MP3播放器等处于该层,Java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。优点:上面四个层次中,下层给上层服务,上层支持下层支持,调用下层的服务,这种严格的分层机制,为Android系统带来很大的灵活性,稳定性和可扩展性。也利于不同层的开发人员专心于该层次的开发任务。3 结论音乐播放器系统实现了播放器的基本功能:播放,暂停、停止、上/下一首、音量调节、歌词显示、播放模式、歌曲搜索、文件浏览器、播放列表查询等功能。运用的系统平台是现今最热门的Androi

21、d系统,是一个开源的基于Linux系统的手机平台。是以Java语言编写+SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理。实现了音乐播放器的系统编程。本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclipse+Java语言的支持,Android Development Tool的插件,和Android SDK2.1版本的全面结合,才使整个音乐播放器系统得以实现。经过对Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,

22、这对我以后的Android项目开发有很大的帮助。参考文献1 张孝祥著java就业培训教程M北京:清华大学出版社,2007.2 余志龙编著Google Android SDK开发范例大全M北京:人民邮电出版社,2009-7-1.3 E2ECloud工作室著深入浅出Google AndroidM北京:人民邮电出版社,2009-08-1.4 靳岩 姚尚朗著Google Android开发入门与实战M北京:清华大学出版社,2009-07-01.5 高昂著支持动态语言的Android平台M北京:人民邮电出版社,2009-05-07. 6 高焕堂编Android 应用框架原理与程式设计(第三版)M北京:清华大学出版社,2008-10-037 杨丰盛主编Android 应用开发揭秘M西安:机械工业出版社,2010-01-25

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2