Android7.0 MediaRecorder源码分析(一)

                            **本次分析是基于Android7.1.2代码**

 最近在做Camera的方案(双进程打开一个Camera),涉及到使用MediaRecorder 进行录像,还是自己新建一套录像系统。接下来我将记录下本次源码分析的流程。
 有关于Client和Server间的binder通信,会在下一篇里分析
 (Client)
 STEP ONE(Contructor)
1../base/media/java/android/media/MediaRecorder.java
这里写图片描述
在MediaRecorder的构造中就是使用了native_setup()的方法(Native方法)。
在AndroidRuntime中有一个方法registerNativeMethods 就是把当前的方法注册到AndroidRuntime中,免去了我们对so的Load的工作。

2../base/media/jni/android_media_MediaRecorder.cpp:
这里写图片描述
其中的sp mr = new MediaRecorder(String16(opPackageNameStr.c_str()));方法才是我们MediaRecorder创建的关键。关于sp wp 建议各位有兴趣的同学去看下,这里可以理解为智能指针。

3.av/media/libmedia/mediarecorder.cpp
这里写图片描述
point{
(1)const sp service(getMediaPlayerService());
(2)mMediaRecorder = service->createMediaRecorder(opPackageName);
}
这里写图片描述
getMediaPlayerService()获取到ServiceManager。通过ServiceManager获取到Discrooptor为(media.player)的services(这也是MediaRecorder(jni)没有去实现BpMediaPlayerService的原因.),然后通过调用service的createMediaRecorder()的方法得到一个MediaRecorder对象

(Server)
4../av/media/libmediaplayerservice/MediaPlayerService.cpp
这里写图片描述
在servicer中创建了一个sp retriever = new MetadataRetrieverClient(pid);

5.av/media/libmediaplayerservice/MediaRecorderClient.cpp
这里写图片描述
这边会创建一个StagefrightRecorder的实例,这个实例主要是执行MediaRecorder的一些具体操作,包括{
接收一些Camera,Audio 的数据,数据的编码,视频文件的写入。

猜你喜欢

转载自blog.csdn.net/u013763766/article/details/79757972