一、Android多媒体框架历史回顾
Android 1.0 ->Packet video - Open core
Android 1.6 ->Open core 2.0
Android 2.0 ->StageFright
Android 2.1 ->StageFright
Android 3.0 ->增强版StageFright
Android 4.1 ->支持编解码功能
Android 5.0->增加MediaSession 和MediaController功能
二、多媒体架构图
在AOSP中,多媒体相关代码主要在av/media和base/media两个目录。其中base/media中重点在其jni目录,这里面就是libmedia_jni.so的代码,也就是Java层多媒体API对应的JNI模块。av/media中包含了Android多媒体服务的具体实现,包含了MediaPlayerService、Stagefright引擎等。
Java层API通过JNI调用Native层(libmedia_jni.so),Native层通过Binder IPC调用到相关Service进程,获取相关服务,而Service进程通过Open MAX调用硬件层实现
下面这张图是AOSP官网中展示的多媒体架构图
三、java 和jni
1、java层API
base/media/java目录中包含了全部的多媒体模块API,包含了我们熟悉的MediaPlayer、MediaRecorder、MediaCodec等。这些API在import的时候,都会开始加载libmedia_jni.so,并注册native方法映射。