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

上传人:b****2 文档编号:2373782 上传时间:2023-05-03 格式:DOCX 页数:10 大小:106.19KB
下载 相关 举报
mini移动平台系统构建齐天宇22.docx_第1页
第1页 / 共10页
mini移动平台系统构建齐天宇22.docx_第2页
第2页 / 共10页
mini移动平台系统构建齐天宇22.docx_第3页
第3页 / 共10页
mini移动平台系统构建齐天宇22.docx_第4页
第4页 / 共10页
mini移动平台系统构建齐天宇22.docx_第5页
第5页 / 共10页
mini移动平台系统构建齐天宇22.docx_第6页
第6页 / 共10页
mini移动平台系统构建齐天宇22.docx_第7页
第7页 / 共10页
mini移动平台系统构建齐天宇22.docx_第8页
第8页 / 共10页
mini移动平台系统构建齐天宇22.docx_第9页
第9页 / 共10页
mini移动平台系统构建齐天宇22.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《mini移动平台系统构建齐天宇22.docx》由会员分享,可在线阅读,更多相关《mini移动平台系统构建齐天宇22.docx(10页珍藏版)》请在冰点文库上搜索。

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

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

课程结业报告

 

题目:

mini移动平台系统构建

课程名称:

移动编程技术

班级:

20092012

学号:

2009201222

学生姓名:

齐天宇

指导教师:

李洁沁

哈尔滨工程大学

2011年11月18日

摘要

随着移动通信技术和多媒体技术的迅速发展,融合手机、网络、多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务已经成为可能。

全球移动用户数非常庞大,因此移动流媒体服务具有巨大的市场潜力,也正成为移动业务的研究热点之一。

在这一背景下,针对移动网络和移动终端的特点,提出移动流媒体客户端的解决方案很有现实意义。

移动流媒体客户端结合FFmpeg源码的解码流程设计出基于分层结构的流媒体播放器的系统架构,并讨论了FFmpeg的修剪优化方法,使其效率等特性适用于移动终端,再将优化后的代码移植到Android手机开发平台。

该播放器能够播放本地文件,并且能够对流媒体文件进行播放。

关键词:

Android;FFmpeg;音乐播放器

 

1移动平台系统设计

1.1功能描述与系统总体设计

随着移动通信技术和多媒体技术的迅速发展,融合手机、网络、多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务已经成为可能。

全球移动用户数非常庞大,因此移动流媒体服务具有巨大的市场潜力,也正成为移动业务的研究热点之一。

在这一背景下,针对移动网络和移动终端的特点,提出移动流媒体客户端的解决方案很有现实意义。

本论文结合FFmpeg开源代码中解码流程,提出了移动终端流媒体播放器基于分层体系架构的设计方案。

该设计的特点是在底层屏蔽不同类型文件解码时对媒体流处理的差异,并且提供了对外部摄像头设备的控制功能,最终在Android平台上实现该播放器。

播放器无论播放本地文件或是网络流媒体文件,都需要有获取媒体数据,解码音视频媒体流,将解码后媒体数据显示给用户三个处理阶段,根据文件播放的流程中这三个明显的处理阶段,本文提出基于层次的播放器结构设计。

由于本地文件和网络流媒体文件的数据获取方式是不相同的,若要保持上层解码的一致性,需要对两类文件进行预处理,形成相同格式的数据提供给上层解码。

根据以上特性,结合文件解码流程本文中面向实时监控的播放器设计采用分层结构,每层独立完成任务,使系统的耦合度降低,利于各层独立扩展而不影响上下层的应用。

从下至上依次是数据提取层、数据预处理层、音视频解码层和用户界面。

用户界面层主要提供用户和播放器之间的交互接口,如播放本地文件时可以实现暂停、快进、快退等功能,在观看流媒体文件时可以通过数字键、导航键或者播放器上方向按钮控制摄像头的焦距、方向等信息。

音视频解码层主要有解码选择组件、各种主流音视频格式的解码器和多路媒体流之间同步的功能。

解码选择组件从本地文件或者流媒体文件头中获取到媒体的解码格式信息,根据该格式信息选择相应的解码器对压缩后媒体流进行解码。

该部分是由FFmpeg修剪优化后作为播放器的解码模块的。

多路媒体之间同步包括视频流和音频流的同步,在播放本地文件时可能还需要字幕的同步[1]。

该流媒体播放器分层结构如图1所示。

图1面向实时监控播放器的分层结构

数据预处理层对本地文件按照其媒体格式解封装,获取文件的音视频或字幕等信息并将其按帧放入相应上层待解码缓冲区。

对流媒体文件将去除RTP的包头信息,并将RTP中音视频信息组帧,将完整的数据帧传给上层待解码缓冲区。

而封装控制信息组件按照PELCO-D/P协议规定的文本格式封装用户的控制输入,并将控制信息传递给下层。

数据获取层的功能包括本地文件、流媒体文件的获取和摄像头控制信息的发送,前者只需读取本地文件即可,流媒体文件的获取需要从流媒体服务器获取媒体数据信息。

流媒体文件获取部分包括前期会话协商部分、数据发送部分和数据缓冲部分。

其中媒体信息协商部分需要使用RTSP协议[2]协商媒体流常规信息,如媒体类型(视频和音频)、传输协议(RTP/UDP/IP…)和媒体格式(H263、mpeg…)和媒体传输端口等信息[2]。

1.1.1FFmpeg到Android平台的移植

FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。

本播放器只需要FFmpeg中对文件解封装及音视频解码部分的功能,若将FFmpeg整个解决方案全部移植到目标平台上会造成大量的代码冗余。

并且FFmpeg代码的开发时基于Linux操作系统的,并没有考虑到手机平台的处理能力小,能源不足等限制,因此针对手机上特定功能需求将FFmpeg代码进行修剪及优化是十分重要的。

1.1.2FFmpeg修剪及优化

从FFmpeg如此庞大并且代码结构复杂的源代码中找出本文需要的代码确实是一项非常艰难的工作。

在Linux下编译运行FFmpeg代码时需要经过configure、make、makeinstall三步才能将FFmpeg正确的编译到Linux系统当中。

其中configure阶段会生成一个configure.h和make文件,从这两个文件中可以查找出该次编译都编译了那些文件[3]。

经研究发现在configure源代码的时候可以加入很多配置参数,其中参数分为基本选项参数、高级选项参数还有专门提供的优化参数。

优化参数主要负责配置在编译时需编译的内容。

对FFmpeg的修剪也恰是将本系统中不需要的文件去除,因此本文利用选择适当的优化参数的方法找出播放器所需文件。

对这些参数仔细研究后,得出编译时设置的参数如下:

./configure--enable-version3--disable-encoders--enable-encoder=h263--enable-encoder=amr_nb--disable-parsers--disable-bsfs--enable-muxer=tgp--disable-protocols--enable-protocol=file。

以上面所示的参数配置编译源文件时,系统只将h263、amr_nb的编码方法和3gp的文件封装格式及其所有的解码格式、解封装文件的源代码部分编译到了链接库。

此时被编译到链接库的源代码集合即为本文所需的源代码有效集,通过查找configure.h和make文件中的后缀名为.o文件,后缀名为.o的文件是编译.c代码时生成的目标文件,每一个被编译的.c文件都会生成.o文件,所以通过查看所有的后缀名为.o的文件名,便可得知在该配置参数下被编译源文件有哪些,因此可以得出本文所需编译的源文件最小集合。

FFmpeg开源代码虽然能够跨平台编译运行,但其代码的设计都是针对于PC机而言的,PC机和手机从CPU处理能力、能源、内存等各方面的资源都具有很多大差异,本文中针对手机的特点主要从以下几个方面优化代码:

1.去除冗余代码、规范程序结构、减少if-else的判断、调整局部和全局变量、使用寄存器变量代替局部变量,减少不必要的代码冗余,去除FFmpeg调试过程中的打印语句;

2.用逻辑移位运算代替乘除操作,因为乘除运算指令的执行时间远远大于逻辑移位指令,尤其是除法指令,使用逻辑移位运算可以减少指令的运行时间;

3.注意循环函数的调用,尽量减少多重循环的使用,编写代码时尽量减弱上次循环与下次循环的相关性,减少不必要的代码计算量;

4.设置合理的缓存。

针对FFmpeg移植的目标平台Android平台,设置适合此本台的缓存大小[4]。

1.1.3FFmpeg移植

Google发布的NDK的makefile文件即Android.mk文件语法和普通的makefile文件有很多不同之处,在跨平台编译FFmpeg源代码时并不能使用原有的makefile文件。

所以移植的先决条件就是将FFmpeg里的makefile文件全部替换为NDK中的Android.mk文件。

通过分析FFmpeg的模块结构得知avutil是基础模块,avcodec模块的编译基于已经编译好的avutil模块,avformat基于前两者,按照这种模块结构本文编译移植的顺序为avutil、avcoedec、avformat[5]。

1.2驱动层设计

本文设计的系统需要进行部分的设备驱动程序的开发,主要的驱动开发工作在于CF网卡和SD存储卡两个设备。

1.3内核运用描述

Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。

Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。

整体架构上来看,Android相比其它平台显示出了自身的特点,如集成了WebKit浏览器、Dalvik虚拟机等模块[6]。

1.4中间层库设计

1.4.1数据获取层

该层完成主要功能为与流媒体服务器协商媒体信息细节,并根据协商结果从服务器端获取流媒体数据,将流媒体数据存入缓冲区,按照本文中缓冲策略将数据包发送给数据预处理层,其结构图如图2所示:

图2数据获取模块结构图

本文中该层一共启动五个线程,其中一个线程中启动TCP连接,用于RTSP会话协商,并且在RTP数据传输期间,该TCP连接必须一直保留。

两个线程分别为接收音频和视频RTP数据的线程,另外两个线程分别为接收以及发送音频和视频的RTCP数据包。

1.4.2数据预处理层

本层对本地文件的预处理完全依赖于FFmpeg提供的功能文件解封装功能,而流媒体文件的预处理需将一个或多个RTP数据包整合在一起,这部分技术已经相对成熟,本文将不再复述。

本文设计的PELCO-D协议文本,最初默认情况下位命令字1、命令字2全部为0,数据字1和数据字2值为20H。

通过上层发送的按键消息修改相应命令字1、命令字2的相应位。

2移动平台开发环境

2.1描述开发环境整体结构

搭建Android开发环境需要的软件:

1.操作系统:

WindowsXP或Linux

2.软件包:

AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)

3.IDE环境:

EclipseIDE+ADTEclipse3.3以上

4.JDK:

JavaRuntimeEnvironment虚拟机、(JDK)JavaDevelopmentkit

2.2编译环境

Android运行时包含一组核心库,提供了Java语言核心库内的大部分功能。

每一个Android应用运行在自己的进程里,应用自己的Dalvik虚拟机实例。

Dalvik可以让~个设备高效的运行很多个VM。

Dalvik虚拟机执行DalvikExecutable(.dex)格式的文件,该格式的文件经过优化占用很小的内存。

该虚拟机是基于存储器的,运行经过Java语言编译器的类,这些类通过“dx”工具被转换成.dex格式。

Dalvik虚拟机依赖Linuxkernel来实现一些潜在功能,例如线程和底层内存管理。

2.3Make工具

1.关于config.h和config.mak

首先说明一下FFmpeg自带的makefile的框架,FFmpeg在经过configure命令之后会产生一个config.h文件和一个config.mak文件,这两个文件加起来共有600-700个宏定义,用来描述编译后代码的各个方面参数设置,其中有关于体系架构、编译器、链接库、头文件、版本、编解码器等等相关的宏定义。

在这一部分必须要修改关于平台差异方面的定义,比如必须把体系架构改成Android平台的ARMv5TE,这时文件编译的时候指令集就会选择ARM的指令集而不是X86的指令集。

这两个文件很重要,以后很多文件都要includeconfig.h这个文件,编译器会根据这个文件而选择性对代码进行编译。

2.编译libavutil.a

在libavutil建立一个Android.mk的文件,libavutil里的makefile文件需要调用subdir.mak,这个其实就是真正的编译,但是书写在Android.mk下,这个make文件可以不要,但需要直接把对应的源文件引入,标准的makefile是指定.o目标文件,但在Android.mk中需要直接指定.c源文件,Android.mk文件如下所示:

LOCAL_PATH:

=$(callmy-dir)

include$(CLEAR_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、SSL、OpenGL、界面管理工具、SQLite、Webkit等等;android运行时系统主要是android虚拟机技术-Dalvik。

Dalvik是基于JVM(java虚拟机)开发,执行dex格式的文件。

第三层:

应用程序械框架层。

Android应用程序框架层主要是为android应用开发者提供的API层。

由于它上层的应用程序是java开发的,因此本层提供了包含UI中所需要的各种控件,具体包括了Views、Lists、Grids、Buttons、Ativity、Service、ContentProdvider等等。

第四层:

应用程序层,也是最上面的一层。

该层是Java的应用程序层,Android内置的GoogleMaps、E-mail、即时通信工具、浏览器、MP3播放器等处于该层,Java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

优点:

上面四个层次中,下层给上层服务,上层支持下层支持,调用下层的服务,这种严格的分层机制,为Android系统带来很大的灵活性,稳定性和可扩展性。

也利于不同层的开发人员专心于该层次的开发任务。

3结论

音乐播放器系统实现了播放器的基本功能:

播放,暂停、停止、上/下一首、音量调节、歌词显示、播放模式、歌曲搜索、文件浏览器、播放列表查询等功能。

运用的系统平台是现今最热门的Android系统,是一个开源的基于Linux系统的手机平台。

是以Java语言编写+SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理。

实现了音乐播放器的系统编程。

本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclipse+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面结合,才使整个音乐播放器系统得以实现。

经过对Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,这对我以后的Android项目开发有很大的帮助。

 

 

参考文献

[1]张孝祥著.java就业培训教程[M].北京:

清华大学出版社,2007.

[2]余志龙编著.GoogleAndroidSDK开发范例大全[M].北京:

人民邮电出版社,2009-7-1.

[3]E2ECloud工作室著.深入浅出GoogleAndroid[M].北京:

人民邮电出版社,2009-08-1.

[4]靳岩姚尚朗著.GoogleAndroid开发入门与实战[M].北京:

清华大学出版社,2009-07-01.

[5]高昂著.支持动态语言的Android平台[M].北京:

人民邮电出版社,2009-05-07.

[6]高焕堂编.Android应用框架原理与程式设计(第三版)[M].北京:

清华大学出版社,2008-10-03

[7]杨丰盛主编.Android应用开发揭秘[M].西安:

机械工业出版社,2010-01-25

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

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

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