一、总体架构说明:
其实在Android中,许多应用功能都是以客户端(代理)服务器模式运行的,
通过binder实现客户端与服务端的通信,让函数调用在本地与远端没有差别
而在录像过程中使用的MediaRecorder便是这种结构的一种体现,
录像往往涉及多个模块:camera模块,编码模块,omx模块,容器模块
但总的来说录像功能是借上层暴露的MediaRecorder接口通过
操作StagefrightRecorder实现编解码与音视频混合的。
如图为MediaRecorder的概括图:
图片待补充
可以认为在APP/JNI/NATIVE这边的mediaRecorder是在一个进程当中,
这部分涉及的代理接口有:
在MediaPlayerService当中的MediaRecorderClient/StagefrightRecorder
则在另外一个进程当中,Bp(客户端方向)和Bn(服务端方向)之间通过binder通信,
使得其在使用上区别不大,服务端这边涉及的有:
除了创建mediaRecorder时,是IMediaPlayerService中的
BpMediaPlayerService向BnMediaPlayerService发送remote外。
其他操作都是借助BpMediaRecorder向BnMediaRecorder通信实现的。