1. 程式人生 > >Android7.0 MediaRecorder源碼分析

Android7.0 MediaRecorder源碼分析

錄像 stage sdn ice ren oop 新建 n) edi

最近在做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 的數據,數據的編碼,視頻文件的寫入。

Android7.0 MediaRecorder源碼分析