最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述Android7.0 MediaRecorder源码分析相关的知识,希望能为你提供帮助。
最近在做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对象
【Android7.0 MediaRecorder源码分析】(Server)
4../av/media/libmediaplayerservice/MediaPlayerService.cpp
文章图片
在servicer中创建了一个sp retriever = new MetadataRetrieverClient(pid);
5.av/media/libmediaplayerservice/MediaRecorderClient.cpp
文章图片
这边会创建一个StagefrightRecorder的实例,这个实例主要是执行MediaRecorder的一些具体操作,包括{
接收一些Camera,Audio 的数据,数据的编码,视频文件的写入。
}
推荐阅读
- ddms+adt+jdk的安装及调试开发安卓
- Android全面屏适配
- NetCore+Dapper WbpApi架构搭建(底层封装)
- 插件式框架探索系列应用程序域(AppDomain)
- Android通过请求网络获取图片资源
- 链表分配磁盘空间
- 操作系统反转页表
- inode索引节点
- 关于最佳拟合和第一拟合的门问题图解