最近在做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。通过ServiceManagthd178.comer获取到Discrooptoyongshiyule178.comr为(media.player)的services(这也是MediaRecorder(jnihuarenyl.cn)没有去实现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 的数据,数据的编码,视频文件的写入。
}
原文地址:https://www.cnblogs.com/eryaketang/p/8962425.html