本文
主要介绍的是
Android
中很重要也最为复杂的媒体播放器(
MediaPlayer
)部分的架构。对于
Android
这样一个完整又相对复杂的系统,一个
MediaPlayer
功能的实现不在其具体的功能,而是具体功能如何适应
Android
系统
Android MediaPlayer
的主要具体实现在
OpenCore
的
Player
中,这部分不是本文的关注点。本文关注的是
MediaPlayer
系统的架构,其他的一些
Android
的应用程序也使用类似的架构。
对于开源事业在中国的发展, hanchao3c 认为应该共享的不仅仅是代码,文档、设计思想、理念甚至对于技术的理解都应该得到充分的共享。 Android 为中国人进入大规模的开源项目提供了很好的机遇,对于走在技术前沿的人们,不应将技术视为私有财产,而应该将自己理解更好地奉献给大众,提高大众的学习速度,从中也可以得到反馈,从而促进自己的进步。仅以此文奉献给所有关系技术的朋友,希望可以抛砖引玉,促进我们共同的技术进步!
第一部分 MediaPlayer概述
Android 的 MediaPlayer 包含了 Audio 和 video 的播放功能,在 Android 的界面上, Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。
MediaPlayer 在底层是基于 OpenCore( PacketVideo) 的库实现的,为了构建一个 MediaPlayer 程序,上层 还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
以开源的Android为例 MediaPlayer 的代码主要在以下的目录中:
JAVA 程序的路径:
packages/apps/Music/src/com/android/music/
JAVA 类的路径:
frameworks/base/media/java/android/media/MediaPlayer.java
JAVA 本地调用部分(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/
文件为mediaplayerservice.h和mediaplayerservice.cpp
这部分内容被编译成库libmediaplayerservice.so。
基于OpenCore的多媒体播放器部分
external/opencore/
这部分内容被编译成库libopencoreplayer.so。
从程序规模上来看, libopencoreplayer.so 是主要的实现部分,而其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。
对于开源事业在中国的发展, hanchao3c 认为应该共享的不仅仅是代码,文档、设计思想、理念甚至对于技术的理解都应该得到充分的共享。 Android 为中国人进入大规模的开源项目提供了很好的机遇,对于走在技术前沿的人们,不应将技术视为私有财产,而应该将自己理解更好地奉献给大众,提高大众的学习速度,从中也可以得到反馈,从而促进自己的进步。仅以此文奉献给所有关系技术的朋友,希望可以抛砖引玉,促进我们共同的技术进步!
第一部分 MediaPlayer概述
Android 的 MediaPlayer 包含了 Audio 和 video 的播放功能,在 Android 的界面上, Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。
MediaPlayer 在底层是基于 OpenCore( PacketVideo) 的库实现的,为了构建一个 MediaPlayer 程序,上层 还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
以开源的Android为例 MediaPlayer 的代码主要在以下的目录中:
JAVA 程序的路径:
packages/apps/Music/src/com/android/music/
JAVA 类的路径:
frameworks/base/media/java/android/media/MediaPlayer.java
JAVA 本地调用部分(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/
文件为mediaplayerservice.h和mediaplayerservice.cpp
这部分内容被编译成库libmediaplayerservice.so。
基于OpenCore的多媒体播放器部分
external/opencore/
这部分内容被编译成库libopencoreplayer.so。
从程序规模上来看, libopencoreplayer.so 是主要的实现部分,而其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。