MediaRecord.java是app调用录制功能的接口,他通过android_media_MediaRecorder JNI调用,与c++层的MediaRecord.cpp对应。MediaRecord会通过binder与MediaPlayerService建立连接,然后在MediaPlayerService会创建一个MediaRecorderClient 他的proxy保存在app端的mMediaRecorder。RecordingProxy和ProxyListener都是一个binder对象,其中RecordingProxy是在app端创建的,对应的proxy保存在Service端的MediaRecordClient的mCameraRecordingProxy中,RecordingProxy 是在Service端创建的,他的proxy保存在app端的Camera.cpp 中的mRecordingProxyListener中。
如之前介绍每个MediaRecord在MediaPlayerService中都有个MediaRecordClient对象,这个对象里面有个mRecorder(StagefrightRecorder)对象,在mRecorder中有个writer对象,在MGEG4录制的时候是MPEG4Writer对象,MPEG4Writer会startWriterThread() 开启封装视频文件的写线程;startTracks(param) 开启视频数据的读线程,也就是轨迹线程。后者负责读取Camera传过来的数据到buf中(其实是camera - ->app - -> MPEG4Writer),前者负责读buf并写入文件。
参考文章:
http://www.voidcn.com/blog/mr_zjc/article/p-4858473.html
http://blog.csdn.net/mr_zjc/article/details/46822833