MediaRecorder framework层的处理流程
来源:互联网 发布:unity3d ui插件 编辑:程序博客网 时间:2024/06/08 07:06
http://blog.csdn.net/ameyume/article/details/7867224
本文主要分析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());
- }
- 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键关机流程
- Android 下的usb框架及功能点
- 设计模式C++实现(2)——策略模式
- Design Pattern:观察者模式
- UIActionSheet笔记
- IOS开发--给UIImageView添加touch事件
- MediaRecorder framework层的处理流程
- java web 一些框架作用总结(学习)
- sed 用法
- LDAP初学者破冰
- javaSE-IO补充 功能流对象(序列化和瞬态关键字)
- 点击复制文本框内容的代码
- AlertDialog 利用反射使得点击按钮使对话框不关闭
- Java多线程与并发库高级应用之公共屏障点CyclicBarrier
- 设计模式C++实现(3)——适配器模式