快捷导航

Android7.0 MediaRecorder源码分析

[复制链接]
90_ 发表于 2018-5-28 11:52 | 显示全部楼层 |阅读模式
查看: 1273  |  回复: 0

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近在做Camera的方案(双进程打开一个Camera),涉及到使用MediaRecorder 进行录像,还是自己新建一套录像系统。接下来我将记录下本次源码分析的流程。

有关于Client和Server间的binder通信,会在下一篇里分析

(Client)

STEP ONE(Contructor)

1../base/media/java/android/media/MediaRecorder.java

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


在MediaRecorder的构造中就是使用了native_setup()的方法(Native方法)。

在AndroidRuntime中有一个方法registerNativeMethods 就是把当前的方法注册到AndroidRuntime中,免去了我们对so的Load的工作。

2../base/media/jni/android_media_MediaRecorder.cpp:

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


其中的sp mr = new MediaRecorder(String16(opPackageNameStr.c_str()));方法才是我们MediaRecorder创建的关键。关于sp wp 建议各位有兴趣的同学去看下,这里可以理解为智能指针。

3.av/media/libmedia/mediarecorder.cpp

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


point{

(1)const sp service(getMediaPlayerService());

(2)mMediaRecorder = service->createMediaRecorder(opPackageName);

}

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


getMediaPlayerService()获取到ServiceManager。通过ServiceManager获取到Discrooptor为(media.player)的services(这也是MediaRecorder(jni)没有去实现BpMediaPlayerService的原因.),然后通过调用service的createMediaRecorder()的方法得到一个MediaRecorder对象

(Server)

4../av/media/libmediaplayerservice/MediaPlayerService.cpp

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


在servicer中创建了一个sp retriever = new MetadataRetrieverClient(pid);

5.av/media/libmediaplayerservice/MediaRecorderClient.cpp

Android7.0 MediaRecorder源码分析

Android7.0 MediaRecorder源码分析


这边会创建一个StagefrightRecorder的实例,这个实例主要是执行MediaRecorder的一些具体操作,包括{

接收一些Camera,Audio 的数据,数据的编码,视频文件的写入。



有任何疑虑 问题 可以联系QQ80810730  或者在 问答板块提问,寻求帮助https://www.hack8.cc/forum-99-1.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

本站内容均来自于互联网,仅供参考,请遵循当地相关法律法规。

快速回复 返回顶部 返回列表