毕业设计(论文)基于Android手机操作系统的音频播放器_第1页
毕业设计(论文)基于Android手机操作系统的音频播放器_第2页
毕业设计(论文)基于Android手机操作系统的音频播放器_第3页
毕业设计(论文)基于Android手机操作系统的音频播放器_第4页
毕业设计(论文)基于Android手机操作系统的音频播放器_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、保密类别       编 号 20070803030 xx大学xx学院毕 业 论 文基于android手机操作系统的音频播放器系 别 计算机科学系专 业 计算机科学与技术年 级 学 号 姓 名 指导教师 xx大学xx学院2011年05月19日摘 要3g牌照在国内发放后3g、android、iphone、google、苹果、手机软件、移动开发等词越来越多充斥于耳。随着3g网络大规模建设和智能手机迅速普及,移动互联网时代已经悄然而至。在google及其开放手机联盟推出基于linux平台的开源手机操作系统android之后,google有不

2、惜重金举办了android开发者大赛,吸引了众多开发者的目光,android不仅功能强大,而且具有开放和免费的先天优势。随着android手机的普及,android应用的需求势必会越来越大,这将是一个潜力巨大的市场,会吸引无数开发者投身其中。纵观google对android的历次更新行动,我们不难看出,每一个版本的android在多媒体方面都会进行比较明显的改动,目的就是为了能更好地满足用户对于多媒体功能的需求。本文主要围绕以下几个方面进行讨论研究:1. 开发平台的介绍,本文的开发平台是由google提供的sdk和eclipse发环境构成,android的图形界面部分全部是由java实现的,a

3、ndroid的java虚拟机是由google为嵌入式设备量身定做的,底层的库函数由c/c+语言实现。2. 介绍了android音频解码播放原理,结合具体的功能,对android多媒体开发核心opencore以及多媒体类库mediaplayer进行综合论述。关键词:android eclipse opencoremediaplaye 手机软件开发audio players based on the android mobile operating systemabstractafter the 3g license was issued, such words as 3g, android, i

4、phone, google, apple, mobile software, mobile development are flooding into the market. as the 3g networks large-scale construction and smart phones rapidly growing popularization, mobile internet era has been just around the corner. after google and its open handset alliance having launched android

5、, the open-source mobile operating system based on the linux platform, google had spared no expense to hold the android developer contest which attracted large numbers of developers eyes. apart from its multifunctional trait, it presents established advantages of being open and free to the public. w

6、ith the popularization of android phones, the demand for android application will be growing and there inevitably is a huge potential market which will attract countless developers to join in.throughout all previous googles actions about updating android, we can easily see that each version of andro

7、id always has some obvious adaptations in multimedia systems. and the purpose of doing so is to meet the users demands for multimedia functions. this article mainly discuss on the following several aspects: 1. the introduction of development platformthe development platform of this paper is composed

8、 by sdk offered by google and eclipse velopment environment. the graphical interface of android is implemented by java whose virtual machine is personalized for embedded devices. besides, the underlying library function of android is realized by c/c + language. 2. introducing the theory of android a

9、udio decoding broadcastit combines with the specific function of android to conduct a comprehensive exposition about the open core and media player.keywords: androideclipseopencoremediaplayer目 录第1章 绪论11.1课题研究的背景和意义11.2 课题研究内容和目标11.3课题研究的主要工作21.4课题研究的组织结构21.5 本章小结3第2章 android应用开发平台简介42.1 android简介42.

10、1.1 系统简介42.1.2 系统架构42.1.3 系统特点62.2 eclipse简介72.2.1 ibm-eclipse语言拓展72.2.2 eclipse 插件开发环境82.2.3 eclipse的主要组成82.2.4 eclipse sdk82.3 adroid sdk开发环境简介82.3.1 核心包 (core packages)92.3.2 其他值得注意的包92.4 本章小结9第3章 android音频解码播放方法103.1 open core103.1.1 open core综述103.1.2 open core库113.1.3 splitter的定义与初始化123.1

11、.4 当前splitter的匹配过程133.2 mediaplayer143.2.1 概述143.2.2 整体架构163.3 本章小结18第4章 播放器程序的具体实现194.1 结构概述194.2 源代码分析204.2.1 src文件夹204.2.2 res文件夹244.2.3 androidmanfest.xml254.3 运行截图264.4 本章小结27结论28参考文献29附录30后记42第1章 绪论3g牌照在国内发放后3g、android、iphone、google、苹果、手机软件、移动开发等词越来越多充斥于耳。移动运营商、终端厂商、浏览器厂商、手机软件制造商也把目光聚集到3g、智能这些

12、新兴技术上。同时,随着3g网络大规模建设和智能手机迅速普及,移动互联网时代已经悄然而至。1.1课题研究的背景和意义google以及其开放手机联盟推出基于linux平台的开源手机操作系统android。android不仅功能强大,而且具有开放和免费的先天优势,全球范围的电信行业、手机制造商因此毫不犹豫地加入到android开放手机联盟中来。为android手机普及和android应用需求的扩大形成了巨大的契机。android系统最大的优势在于其开放性和服务免费。android是一个对第三方软件安全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了iphone等只能添加为数不多的固定软件的

13、枷锁;同时与与windows mobile、symbian等厂商不同,android操作系统免费相开发人员提供,这样可以节省近三成的成本。而及早的研究android平台,既是及时了解到国际上最先进的只能终端操作系统的机会,也是打破欧美移动平台操作系统垄断的大好机会。由于android是基于linux内核的,linux是一个开放的操作系统,android又是一个开放的平台,使得我们有了更大的自主定制服务的自由。随着科技不断更新和大规模集成电路高速发展,消费者对手机产品在商务和娱乐方面的要求越来越高,而在硬件的推动下,android系统随之不断更新,用户对手机软件的功能需求不断提高。为满足此种需求

14、手机多媒体技术开发也就不可避免成为热点。多媒体技术中最常见的就是音乐播放技术, android平台为开发者提供了完整的多媒体音频解决方案,使开发者可以较为方便地开发出相应的音乐播放应用。1.2 课题研究内容和目标android是基于linux内的的,不过仅仅在linux下实现音频播放功能是不够的。它的音频播放功能是依附于android下的音频系统的,android下的音频系统的对外接口是audiosystem接口类,应用程序可以通过此接口访问到音频资源。audiosystem的实现类是audioflinger。本文的主要研究内容就是如何实现音频资源在最新的android系统当中进行播放。本文主

15、要探讨如何利用开源手机操作系统android以及其开发环境通过java编程环境设计有效的实现其系统上的音乐播放解决方案。提出层次化的方法和策略来解决某些现有播放器无法实现的功能,并在目录播放、在线播放、后台播放、高清播放等几个方面进行了探索。 1.3课题研究的主要工作android系统是google及其开发联盟推出基于linux平台的开源手机操作系统。android平台为开发者不仅提供了完整的多媒体解决方案,而且提供了统一、简单、易用的开发接口,让我们可以轻松的开发出一个多媒体播放器。 android 播放器程序的设计基本任务有以下几点: (1).ui设计 ui就是我们所说的布局文件,ui是一

16、个应用程序的脸面,一个应用程序想要受到用户喜爱,ui不能差。(2).媒体信息管理为了使用户方便地管理曲目,我们将在启动播放器的同时自动获取手机和sd卡上的音频文件,并显示到listview视图中。(3).播放音乐音乐文件的播放功能是由mediaplayer类实现的,mediaplayer提供了常用的接口,比如播放、暂停、停止、快速定位等。1.4课题研究的组织结构本文首先对android系统开发平台结构体系进行了分析,然后是常见的音频解码技术和基于java的实现的介绍,并简要介绍android下的用户ui设计的实现方法,最后以androidsdk开发平台,对音频播放器进行设计和实现。本论文的结构

17、如下:第1章,绪论,主要介绍本课题研究的背景、意义、内容、目标。第2章,开发平台的介绍,本文的开发平台是由google提供的sdk和eclips开发环境构成,android的图形界面部分全部是由java实现的,android的java虚拟机是由google为嵌入式设备量身定做的,底层的库函数由c/c+语言实现。第3章,介绍了android音频解码播放原理,结合具体的功能,对android多媒体开发核心opencore以及多媒体类库mediaplayer进行综合论述。第4章,音频播放器的具体实现。给出本研究课题的结构概述,源代码分析,以及运行截图。最后给出本论文的结论。1.5 本章小结本章简要说

18、明了本次项目的命题背景、研究意义和主要技术要点。首先,介绍了android项目开发的技术背景、时代背景和研究背景,紧接着介绍了本次项目所需要用到的核心技术,并对整篇文章的行文结构进行了粗略说明。本章主要阐述的观点是在现行的条件之下android项目开发的经济及技术可行性是非常之高的,是很有前景的开发项目。第2章 android应用开发平台简介在google及其开放手机联盟推出基于linux平台的开源手机操作系统android之后,google有不惜重金举办了android开发者大赛,吸引了众多开发者的目光,android不仅功能强大,而且具有开放和免费的先天优势。随着android手机的普及,

19、android应用的需求势必会越来越大,这将是一个潜力巨大的市场,会吸引无数开发者投身其中。2.1 android简介android一词的本义指“机器人”,同时也是google于2007年11月5日宣布的基于linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。22.1.1 系统简介android是基于linux内核的操作系统,是google公司在2007年11月5日公布的手机操作系统。早期由原名为"android"的公司开发,谷歌在2005年收购"android.inc&qu

20、ot;后,继续进行对android系统开发运营,它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以java编写。2011年初数据显示,仅正式上市两年的操作系统android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,android系统不但应用于智能手机,也在平板电脑市场急速扩张。采用android系统主要厂商包括美国摩托罗拉(motorola)、英国索尼爱立信(sony ericsson)另外还有中国大陆厂商如:华为、中兴、联想、htc等。2.1.2 系

21、统架构(1).应用程序android以java为编程语言,从接口到功能,都有层出不穷的变化,其中activity等同于j2me的midlet,一个 activity 类(class)负责创建视窗(window),一个活动中的activity就是在 foreground(前景)模式,背景运行的程序叫做service。两者之间通过由serviceconnection和aidl连结,达到复数程序同时运行的效果。如果运行中的 activity 全部画面被其他 activity 取代时,该 activity 便被停止(stopped),甚至被系统清除(kill)。1view等同于j2me的display

22、able,程序人员可以通过 view 类与“xml layout”档将ui放置在视窗上,android 1.5的版本可以利用 view 打造出所谓的 widgets,其实widget只是view的一种,所以可以使用xml来设计layout,htc的android hero手机即含有大量的widget。至于viewgroup 是各种layout 的基础抽象类(abstract class),viewgroup之内还可以有viewgroup。view的构造函数不需要再activity中调用,但是displayable的是必须的,在activity 中,要通过findviewbyid()来

23、从xml 中取得view,android的view类的显示很大程度上是从xml中读取的。view 与事件(event)息息相关,两者之间通过listener 结合在一起,每一个view都可以注册一个event listener,例如:当view要处理用户触碰(touch)的事件时,就要向android框架注册view.onclicklistener。另外还有image等同于j2me的bitmap。(2).中介软件操作系统与应用程序的沟通桥梁,并用分为两层:函数层(library)和虚拟机(virtual machine)。 bionic是 android 改良libc的版本。android 同

24、时包含了webkit,所谓的webkit 就是apple safari 浏览器背后的引擎。surface flinger 是就2d或3d的内容显示到屏幕上。android使用工具链(toolchain)为google自制的bionic libc。1android采用opencore作为基础多媒体框架。opencore可分7大块:pvplayer、pvauthor、codec、packetvideo multimedia framework(pvmf)、operating system compatibility library(oscl)、common、openmax。android 使用sk

25、ia为核心图形引擎,搭配opengl/es。skia与linux cairo功能相当,但相较于linux cairo, skia 功能还只是雏形的。2005年skia公司被google收购,2007年初,skia gl源码被公开,目前skia 也是google chrome 的图形引擎。android的多媒体数据库采用sqlite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过contentresolver类(column)取得共用数据库。android的中间层多以java 实现,并且采用特殊的dalvik 虚拟机(dalvik virtual machine)。dalvik虚拟机是

26、一种“暂存器型态”(register based)的java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。dalvik虚拟机可以有多个实例(instance), 每个android应用程序都用一个自属的dalvik虚拟机来运行,让系统在运行程序时可达到优化。dalvik 虚拟机并非运行java字节码(bytecode),而是运行一种称为.dex格式的文件。(3).硬件抽像层android 的 hal(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。hal 的目的是为了把 android framework 与 linux kernel 隔开,让android不至过度依赖 linux ke

27、rnel,以达成 kernel independent 的概念,也让 android framework 的开发能在不考量驱动程序实现的前提下进行发展。hal stub是一种代理人(proxy)的概念,stub 是以 *.so 档的形式存在。stub向 hal“提供”操作函数(operations),并由 android runtime 向 hal 取得 stub 的 operations,再callback这些操作函数。hal 里包含了许多的 stub(代理人)。runtime 只要说明“类型”,即 module id,就可以取得操作函数。(4).编程语言android 是运行于linux

28、kernel之上,但并不是gnu/linux。因为在一般gnu/linux里支持的功能,android大都没有支持,包括cairo、x11、alsa、ffmpeg、gtk、pango及glibc等都被移除掉了。android又以bionic 取代glibc、以skia 取代cairo、再以opencore 取代ffmpeg等等。android 为了达到商业应用,必须移除被gnu gpl授权证所约束的部份,例如android将驱动程序移到userspace,使得linux driver 与linux kernel彻底分开。bionic/libc/kernel/并非标准的kernel header

29、 files。android的kernel header 是利用工具由 linux kernel header 所产生的,这样做是为了保留常数、数据结构与宏。目前android 的linux kernel控制包括安全(security),存储器管理(memory management),程序管理(process management),网络堆栈(network stack),驱动程序模型(driver model)等。下载android源码之前,先要安装其构建工具 repo来初始化源码。repo是android 用来辅助git工作的一个工具。2.1.3 系统特点(1).开放性在优势方

30、面,android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。5(2).挣脱运营商的束缚在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iphone上市,用户可以更加方便地连接网络,运营

31、商的制约减少。随着edge、hsdpa这些2g至3g移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。(3).丰富的硬件选择这一点还是与android平台的开放性相关,由于android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚symbian风格手机一下改用苹果iphone,同时还可将symbian中优秀的软件带到iphone上使用、联系人等资料更是可以方便地转移。(4).不受任何限制的开发商android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想

32、而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给android难题之一。(5).无缝结合的google应用如今叱咤互联网的google已经走过10年度历史。从搜索巨人到全面的互联网渗透,google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而android平台手机将无缝结合这些优秀的google服务。2.2 eclipse简介eclipse 是一个开放源代码的、基于 java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,eclipse 附带了一个标准的插件集,包括 jav

33、a 开发工具(java development tools,jdt)。2.2.1 ibm-eclipse语言拓展eclipse是著名的跨平台的自由集成开发环境(ide)。最初主要用来java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如c+和python的开发工具。eclipse的本身只是一个框架平台,但是众多插件的支持使得eclipse拥有其他功能相对固定的ide软件很难具有的灵活性。许多软件开发商以eclipse为框架开发自己的ide。eclipse 最初由oti和ibm两家公司的ide产品开发组创建,起始于1999年4月。ibm提供了最初的eclipse代码基础,包括plat

34、form、jdt 和pde。目前由ibm牵头,围绕着eclipse项目已经发展成为了一个庞大的eclipse联盟,有150多家软件公司参与到eclipse项目中,其中包括borland、rational software、red hat及sybase等。eclipse是一个开发源码项目,它其实是 visual age for java的替代品,其界面跟先前的visual age for java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括oracle在内的许多大公司也纷纷加入了该项目,并宣称eclipse将来能成为可进行任何

35、语言开发的ide集大成者,使用者只需下载各种语言的插件即可。52.2.2 eclipse 插件开发环境虽然大多数用户很乐于将 eclipse 当作 java ide 来使用,但 eclipse 的目标不仅限于此。eclipse 还包括插件开发环境(plug-in development environment,pde),这个组件主要针对希望扩展 eclipse 的软件开发人员,因为它允许他们构建与 eclipse 环境无缝集成的工具。由于 eclipse 中的每样东西都是插件,对于给 eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。基

36、于 eclipse 的应用程序的突出例子是 ibm 的 websphere studio workbench,它构成了 ibm java 开发工具系列的基础。例如,websphere studio application developer 添加了对 jsp、servlet、ejb、xml、web 服务和数据库访问的支持。2.2.3 eclipse的主要组成eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由eclipse项目、eclipse工具项目和eclipse技术项目三个项目组成,具体包括四个部分组成eclipse p

37、latform、jdt、cdt和pde。jdt支持java开发、cdt支持c开发、pde用来支持插件开发,eclipse platform则是一个开放的可扩展ide,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。eclipse platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。82.2.4 eclipse sdkeclipse sdk(软件开发者包)是eclipse platform、jdt和pde所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者

38、有效地建造可以无缝集成到eclipse platform中的工具。eclipse sdk由eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。eclipse项目生产的软件以 gpl发布,第三方组件有各自自身的许可协议。2.3 adroid sdk开发环境简介android以java作为开发语言,jdk是进行java开发时必须的开发包。eclipse是一款非常优秀的开源ide,在大量插件的“配合”下,完全可以满足企业级java到手机终端java游戏的开发。google官方也提供了基于eclipse的android开发插件adt.2.3.1 核心包 (core pack

39、ages)这些是基本包在通过android sdk来编写应用程序,这些包作为原始层,列出的是从最底层到最高层。10 android.util:包含一些列底层辅助类,例如特定的容器类,xml辅助工具类等等。 android.os:提供基本的操作服务,消息传递和进程进程间通讯ipc。 android.graphics: 作为核心渲染包。 android.text android.text.method android.text.style android.text.util:提供一套丰富的文本处理工具,支持富文本、输入模式等等。 andr

40、oid.database:包含底层api处理数据库。  android.content:提供各种服务访问数据在设备上,程序安装到设备和其他的相关资源,以及内容提供展示动态数据。android.view:核心用户界面框架。android.widget:提供标准用户界面元素,lists列表 buttons按钮,layout managers布局管理器等等,构建从view包中。 android.app:提供高层应用程序模型,实现使用activities。 2.3.2 其他值得注意的包 这些包提供附加指定域也行在android平台,这些必须在基本的应用

41、程序开发。9 vider:包含定义变量标准内容提供包含在平台中。  android.telephony:提供api交互和设备的通话栈 。 android.webikit:包含一系列api工作在基于web的内容。2.4 本章小结本章主要介绍了android常用的开发平台eclipse和androidsdk包中的类库。对sdk包中类库的所拥有的功能进行深入的了解对开发出一个好的程序是非常有必要的。同时对开发工具eclipse的理解能有效地架构开发环境,并能有效地对编写出的代码进行测试。第3章 android音频解码播放方法纵观

42、google对android的历次更新行动,我们不难看出,每一个版本的android在多媒体方面都会进行比较明显的改动,目的就是为了能更好地满足用户对于多媒体功能的需求。3.1 open coreopencore是android的多媒体核心,它是一个基于c+的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。所有android平台的音频、视频的采集以及播放等操作都是通过它来实现的。它也被称为pv(packet video),packet video是一家专门提供多媒体解决方案的公司。程序员可以同伙open core方便快速地开发出想要的多媒

43、体应用程序。63.1.1 open core综述opencore多媒体框架有一套通用可拓展的借口,针对第三方的多媒体编解码器,输入、输出设备等等。具体功能如下:7l 多媒体文件播放、下载,包括:3gpp,mpeg-4,aac和mp3 containers。l 流媒体的下载、实时播放,包括:3gpp,http和rtsp/rtp。l 动态视频和静态图像的编码、解码,包括例如:mpeg-4,h263和avc(h264),jpeg。l 语音编码格式:amr-nb和amr-wb。l 音乐编码格式:mp3,aac,aac+。l 视频和图像格式:3gpp,mpeg-4和jpeg。l 视频会议:基于h324-

44、m标准。opencore是一个多媒体的框架。从宏观上来看,它主要包含了两大方面的内容:l pvplayer:提供媒体播放器的功能,完成各种音频(audio)、视频(video)流的回放(playback)功能l pvauthor:提供媒体流记录的功能,完成各种音频(audio)、视频(video)流的以及静态图像捕获功能pvplayer和pvauthor以sdk的形式提供给开发者,可以在这个sdk之上构建多种应用程序和服务。在移动终端中常常使用的多媒体应用程序,例如媒体播放器、照相机、录像机、录音机等等。为了更好的组织整体的架构,opencore在软件层次在宏观上分成几个层次:l oscl:o

45、perating system compatibility library (操作系统兼容库),包含了一些操作系统底层的操作,为了更好地在不同操作系统移植。包含了基本数据类型、配置、字符串工具、io、错误处理、线程等内容,类似一个基础的c+库。l pvmf:packetvideo multimedia framework(pv多媒体框架),在框架内实现一个文件解析(parser)和组成(composer)、编解码的node,也可以继承其通用的接口,在用户层实现一些node。l pvplayer engine:pvplayer引擎。l pvauthor engine:pvauthor引擎。事实上

46、,opencore中包含的内容非常多:从播放的角度,pvplayer的输入(source)是文件或者网络媒体流,输出(sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码(decode)等方面的内容。除了从文件中播放媒体文件之外,还包含了与网络相关的rtsp流(real time stream protocol,实时流协议)。在媒体流记录的方面,pvauthor的输入(source)是照相机、麦克风等设备,输出(sink)是各种文件,包含了流的同步、音频视频流的编码(encode)以及文件的写入等功能。在使用opencore的sdk的时候,有可能需要在应用程序

47、层实现一个适配器(adaptor),然后在适配器之上实现具体的功能,对于pvmf的node也可以基于通用的接口,在上层实现,以插件的形式使用。3.1.2 open core库通过第一章的介绍,可以看出media framework处于libraries这一层,我们知道library是由cc+来实现的,它们通过java的jni方式来调用。open core的代码在android代码的external/opencore目录中,图3.1展示了opencore框架,其子目录及其具体功能描述如下:6l android:这里面是一个上层的库,它实现了一个为android使用的音视频采集、播放接口,及drm

48、数字版权管理的接口实现。l baselibs:包含数据结构和线程安全等内容的底层库。l codecs_v2:音视频的编解码器,基于openmax实现。l engines:核心部分多媒体引擎的实现。l exterm_libs_v2:包含了khronos的openmax的头文件。l fileformats:文件格式的解析(parser)工具。l nodes:提供一些pvmf的node,主要是编解码和文件解析方面的。l oscl:操作系统兼容库。l pvmi:输入输出控制的抽象接口。l protocols:主要是与网络相关的rtsp、rtp、http等协议的相关内容。l pvcommon:pvcom

49、mon库文件的androidmk文件,没有源文件。图3.1 opencore框架图 l pvplayer:pvplayer库文件的androidmk文件,没有源文件。l pvauthor:pvauthor库文件的androidmk文件,没有源文件。l tools_v2:编译工具以及一些可注册的模块。3.1.3 splitter的定义与初始化以wav的splitter为例,在fileformats目录下有解析wav文件格式的pvwavfileparser.cpp文件,在nodes目录下有pvmf_wavffparser_factory.cpp,pvmf_wavffparser_node.h, p

50、vmf_wavffparser_port.h等文件。4我们由底往上看,vwavfileparser.cpp中的pv_wav_parser类有initwavparser(),getpcmdata(),retrievefileinfo()等解析wav格式的成员函数,此类应该就是最终的解析类。我们搜索pv_wav_parser类被用到的地方可知,在pvmfwavffparsernode类中有pv_wav_parser的一个指针成员变量。再搜索可知,pvmfwavffparsernode类是通过pvmfwavffparsernodefactory的createpvmfwavffparsernode()

51、成员函数生成的。而createpvmfwavffparsernode()函数是在pvplayernoderegistry:pvplayernoderegistry()类构造函数中通过pvplayernodeinfo类被注册到oscl_vector<pvplayernodeinfo, osclmemallocator>的vector中,在这个构造函数中,amr,mp3等node也是同样被注册的。由上可知,opencore中对splitter的管理也是与ffmpeg等类似,都是在框架的初始化时注册的,只不过opencore注册的是每个splitter的factory函数。综述一下spl

52、itter的定义与初始化过程:l 每个splitter都在fileformats目录下有个对应的子目录,其下有各自的解析类。l 每个splitter都在nodes目录下有关对应的子目录,其下有各自的统一接口的node类和node factory类。l 播放引擎pvplayerengine类中有pvplayernoderegistry iplayernoderegistry成员变量。l 在pvplayernoderegistry的构造函数中,将 amr, aac, mp3等splitter的输入与输出类型标示和node factory类中的create node与release delete接口

53、通过pvplayernodeinfo类push到oscl_vector<pvplayernodeinfo, osclmemallocator> itype成员变量中。3.1.4 当前splitter的匹配过程pvmfstatus pvplayernoderegistry:queryregistry(pvmfformattype& ainputtype, pvmfformattype& aoutputtype, oscl_vector<pvuuid, osclmemallocator>& auuids)函数的功能是根据输入类型和输出类型,在已注册的

54、node vector中寻找是否有匹配的node,有的话传回其唯一识别标识pvuuid。8从queryregistry这个函数至底向上搜索可得到,在android中splitter的匹配过程如下:android_media_mediaplayer.cpp之中定义了一个jninativemethod(java本地调用方法)类型的数组gmethods,供java代码中调用multiplayer类的setdatasource成员函数时找到对应的c+函数:"setdatasource","(ljava/lang/string;)v",(void)android_

55、media_mediaplayer_setdatasource,static void android_media_mediaplayer_setdatasource(jnienv *env, jobject thiz, jstring path)此函数中先得到当前的mediaplayer实例,然后调用其setdatasource函数,传入路径。status_t mediaplayer:setdatasource(const char *url)此函数通过调getmediaplayerservice()先得到当前的mediaplayerservice,const sp<imediapla

56、yerservice>& service(getmediaplayerservice();然后新建一个imediaplayer变量,sp<imediaplayer> player(service->create(getpid(), this, fd, offset, length);在sp<imediaplayer>mediaplayerservice: create(pid_t pid, const sp<imediaplayerclient>&client, const char* url)中,调status_t mediap

57、layerservice:client:setdatasource(const char *url)函数,client是mediaplayerservice的一个内部类。在mediaplayerservice:client:setdatasource中,调sp<mediaplayerbase> mediaplayerservice:client:createplayer(player_type playertype)生成一个继承自mediaplayerbase的pvplayer实例,pvplayer的继承关系如下:pvplayer->mediaplayerinterface-

58、>mediaplayerbase最后调pvplayer的setdatasource()函数status_t pvplayer:setdatasource(const char *url)status_t pvplayer:prepare()此函数开头执行ret= mplayerdriver-> enqueuecommand (new playersetdatasource (mdatasourcepath,0,0) );将playersetdatasource的command类加入到playerdriver的command处理队列中,在void playerdriver:run()函数中处理此command,调用下面的handlesetdatasou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论