欢迎来到天天文库
浏览记录
ID:37908524
大小:248.00 KB
页数:17页
时间:2019-06-02
《Android的MediaPlayer架构介绍(自己总计的)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android的MediaPlayer架构介绍【IT168技术文档】本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构。对于Android这样一个完整又相对复杂的系统,一个MediaPlayer功能的实现不在其具体的功能,而是具体功能如何适应Android系统AndroidMediaPlayer的主要具体实现在OpenCore的Player中,这部分不是本文的关注点。本文关注的是MediaPlayer系统的架构,其他的一些Android的应用程序也使用类似的架构。对于开源事业在中国的发展,hanch
2、ao3c认为应该共享的不仅仅是代码,文档、设计思想、理念甚至对于技术的理解都应该得到充分的共享。Android为中国人进入大规模的开源项目提供了很好的机遇,对于走在技术前沿的人们,不应将技术视为私有财产,而应该将自己理解更好地奉献给大众,提高大众的学习速度,从中也可以得到反馈,从而促进自己的进步。仅以此文奉献给所有关系技术的朋友,希望可以抛砖引玉,促进我们共同的技术进步!第一部分MediaPlayer概述Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是
3、调用MediaPlayer实现的。MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。以开源的Android为例MediaPlayer的代码主要在以下的目录中:JAVA程序的路径:packages/apps/Music/src/com/android/music/JAVA类的路径:frameworks/base/media/java/android/media/MediaPla
4、yer.javaJAVA本地调用部分(JNI):frameworks/base/media/jni/android_media_MediaPlayer.cpp这部分内容编译成为目标是libmedia_jni.so。主要的头文件在以下的目录中:frameworks/base/include/media/多媒体底层库在以下的目录中:frameworks/base/media/libmedia/这部分的内容被编译成库libmedia.so。多媒体服务部分:frameworks/base/media/libmediaplayerservice/文件为m
5、ediaplayerservice.h和mediaplayerservice.cpp这部分内容被编译成库libmediaplayerservice.so。基于OpenCore的多媒体播放器部分external/opencore/这部分内容被编译成库libopencoreplayer.so。从程序规模上来看,libopencoreplayer.so是主要的实现部分,而其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。第二部分MediaPlayer的接口与架构2.1整体框架图MediaPlayer的各个库之间的结构比较复杂,可以用下图的表
6、示在各个库中,libmedia.so位于核心的位置,它对上层的提供的接口主要是MediaPlayer类,类libmedia_jni.so通过调用MediaPlayer类提供对JAVA的接口,并且实现了android.media.MediaPlayer类。libmediaplayerservice.so是Media的服务器,它通过继承libmedia.so的类实现服务器的功能,而libmedia.so中的另外一部分内容则通过进程间通讯和libmediaplayerservice.so进行通讯。libmediaplayerservice.so的真正
7、功能通过调用OpenCorePlayer来完成。MediaPlayer部分的头文件在frameworks/base/include/media/目录中,这个目录是和libmedia.so库源文件的目录frameworks/base/media/libmedia/相对应的。主要的头文件有以下几个:IMediaPlayerClient.hmediaplayer.hIMediaPlayer.hIMediaPlayerService.hMediaPlayerInterface.h在这些头文件mediaplayer.h提供了对上层的接口,而其他的几个头文
8、件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。整个MediaPlayer库和调用的关系如下图所示:整个Media
此文档下载收益归作者所有