Android7.0 MediaRecorder源码分析

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述Android7.0 MediaRecorder源码分析相关的知识,希望能为你提供帮助。
最近在做Camera的方案(双进程打开一个Camera),涉及到使用MediaRecorder 进行录像,还是自己新建一套录像系统。接下来我将记录下本次源码分析的流程。 
 有关于Client和Server间的binder通信,会在下一篇里分析 
 (Client) 
 STEP ONE(Contructor) 
1../base/media/java/android/media/MediaRecorder.java 

Android7.0 MediaRecorder源码分析

文章图片
 
在MediaRecorder的构造中就是使用了native_setup()的方法(Native方法)。 
在AndroidRuntime中有一个方法registerNativeMethods 就是把当前的方法注册到AndroidRuntime中,免去了我们对so的Load的工作。
2../base/media/jni/android_media_MediaRecorder.cpp: 
Android7.0 MediaRecorder源码分析

文章图片

其中的sp mr = new MediaRecorder(String16(opPackageNameStr.c_str())); 方法才是我们MediaRecorder创建的关键。关于sp wp 建议各位有兴趣的同学去看下,这里可以理解为智能指针。
3.av/media/libmedia/mediarecorder.cpp 
Android7.0 MediaRecorder源码分析

文章图片
 
point{ 
(1)const sp service(getMediaPlayerService());  
(2)mMediaRecorder = service-> createMediaRecorder(opPackageName);  

Android7.0 MediaRecorder源码分析

文章图片
 
getMediaPlayerService()获取到ServiceManager。通过ServiceManagthd178.comer获取到Discrooptoyongshiyule178.comr为(media.player)的services(这也是MediaRecorder(jnihuarenyl.cn)没有去实现BpMediaPlayerService的原因.),然后通过调用service的createMediaRecorder()的方法得到一个MediaRecorder对象
【Android7.0 MediaRecorder源码分析】(Server) 
4../av/media/libmediaplayerservice/MediaPlayerService.cpp 
Android7.0 MediaRecorder源码分析

文章图片

在servicer中创建了一个sp retriever = new MetadataRetrieverClient(pid);
5.av/media/libmediaplayerservice/MediaRecorderClient.cpp 
Android7.0 MediaRecorder源码分析

文章图片

这边会创建一个StagefrightRecorder的实例,这个实例主要是执行MediaRecorder的一些具体操作,包括{ 
接收一些Camera,Audio 的数据,数据的编码,视频文件的写入。 

























    推荐阅读