MediaRecorder framework层的处理流程
来源:互联网 发布:ghost覆盖 数据恢复 编辑:程序博客网 时间:2024/05/22 02:13
本文主要分析framework层MediaRecorder.cpp文件对应的MediaRecorder类的处理流程。
MediaRecorder.cpp通过android_media_MediaRecorder.cpp JNI层与Java API类MediaRecorder.java相互关联。
下面通过对MediaRecorder类的几个主要函数进行分析来学习MediaRecorder的结构和处理流程。
1.MediaRecorder()构造函数
(1)首先通过getMediaPlayerService函数从ServiceManager中取得MediaPlayerService对象
MediaPlayerService对应的字符串标识是"media.player"。
顺便说一下,MediaPlayerService是在MediaPlayerService::instantiate()函数中注册到ServiceManager中的,最终是放在了Binder对象中。
void MediaPlayerService::instantiate() { defaultServiceManager()->addService( String16("media.player"), new MediaPlayerService());}
(2)取得MediaPlayerService对象service后,通过createMediaRecorder(getpid())方法创建对应的MediaRecorder对象
createMediaRecorder函数的调用过程如下:
先调用BpMediaPlayerService类的createMediaRecorder函数,然后通过code CREATE_METADATA_RETRIEVER调用远程的实现。
在BnMediaPlayerService::onTransact中,当code为CREATE_MEDIA_RECORDER时,通过调用BnMediaPlayerService实现类的createMediaRecorder方法创建MediaRecorder,即调用MediaPlayerService::createMediaRecorder方法。MediaPlayerService类实现了BnMediaPlayerService抽象类。
(3)在MediaPlayerService::createMediaRecorder函数中,通过创建MediaRecorderClient对象,返回真正的MediaRecorder
在MediaRecorderClient构造函数中,创建了StagefrightRecorder对象,即真正的录制对象,使用的Stagefright多媒体框架。在4.0中只有StagefrightRecorder一个录制框架。
在2.2,2.3中还存在另外一个录制对象PVMediaRecorder,使用的是OpenCore框架实现录音或录像。
具体可以参考以前的一篇博客:MediaRecorderClient决定使用stagefright还是opencore实现录音录像的代码实现
至此,MediaRecorder构造函数就分析完了。
MediaRecorder构造函数的核心代码只有两句:
const sp<IMediaPlayerService>& service(getMediaPlayerService()); if (service != NULL) { mMediaRecorder = service->createMediaRecorder(getpid()); }
2.
- MediaRecorder framework层的处理流程
- MediaRecorder framework层的处理流程
- Notification framework层的处理流程分析
- Notification framework层的处理流程分析
- Android framework层 按键的处理流程
- MediaRecorder流程分析 java层到stagefright层
- Play Framework 的请求处理流程
- django framework 处理流程
- framework按键处理流程
- MediaRecorder类 在各层的介绍
- Android Framework层Power键关机流程(一,Power长按键操作处理)
- Android应用层到Framework到HAL再到驱动层的整个流程分析
- ASP.NET Framework处理一个Http Request的流程
- Zend framework处理一个http请求的流程分析
- Framework层Ril控制流程分析
- android-5.0关机流程-framework层
- Framework层Ril控制流程分析
- Android Framework层Power键关机流程
- 实用解决多个问题的无敌命令
- Spring 知识基础总结
- poj 3356 最长公共子串变形
- C++中 類构造函数前面explicit的作用
- 关于CPU和内存小节
- MediaRecorder framework层的处理流程
- 求贤若渴
- Windows Media Player 解码器 win7codecs
- wxPython:启动画面SplashScreen介绍
- 责任链模式
- wxPython:绘画按钮BitmapButton介绍
- Android电话拨号器
- 关于tomcat服务器部署,页面报404/500错误,myeclipse异常关闭 导致tomcat 6.0 无法重启 的问题
- wxPython:进度条Gauge介绍