MediaServer简单分析
来源:互联网 发布:5.8mm子弹尺寸数据 编辑:程序博客网 时间:2024/05/22 21:20
android上的多媒体服务是有一个叫做mediaserver的服务进程提供的。这个进程通过binder的进程间通信方式来完成其他进程(如音乐播放器)的请求。
mediaserver服务器进程的实现代码在/frameworks/base/media/mediaserver目录下,代码很小。
该目录下的Android.mk文件:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
main_mediaserver.cpp
LOCAL_SHARED_LIBRARIES := /
libaudioflinger /
libcameraservice /
libmediaplayerservice /
libutils /
libbinder
base := $(LOCAL_PATH)/../..
LOCAL_C_INCLUDES := /
$(base)/libs/audioflinger /
$(base)/camera/libcameraservice /
$(base)/media/libmediaplayerservice
LOCAL_MODULE:= mediaserver
include $(BUILD_EXECUTABLE)
最后编译出来的是mediaserver,这个进程可以在模拟器或设备系统中的/system/sbin/目录下找到。
服务器进程的实现源码:
// System headers required for setgroups, etc.
#include <sys/types.h>
#include <unistd.h>
#include <grp.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include <AudioFlinger.h>
#include <CameraService.h>
#include <MediaPlayerService.h>
#include <AudioPolicyService.h>
#include <private/android_filesystem_config.h>
using namespace android;
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self()); // 进程状态
sp<IServiceManager> sm = defaultServiceManager(); // 服务器管理器
LOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate(); // addService -- "media.audio_flinger"
MediaPlayerService::instantiate(); // addService -- "media.player"
CameraService::instantiate(); // addService -- "media."
AudioPolicyService::instantiate(); // addService -- "media.audio_policy"
ProcessState::self()->startThreadPool(); //
IPCThreadState::self()->joinThreadPool(); //
}
[1]
也就是说,在启动系统的时候,mediaserver会启动,这样也会随之添加了服 务:media.audio_flinger, media.player, media.camera, media.audio_policy。
这些服务会响应来自上层的MediaPlayer的服务请求,主要有声音播放,多 媒体文件的播放,摄像头操作,音频管理等。
[2]
在以上main()函数中, defaultServiceManager()函数获取到当前的服务管理器(IServiceManager)。
//IServiceManager类是一个接口,主要定义的接口函数有:
virtual sp<IBinder> getService( const String16& name) const = 0;
// 获取某个服务(若该服务不存在,则阻塞几秒钟)
virtual sp<IBinder> checkService( const String16& name) const = 0;
// 检查某个服务(若服务不存在,不阻塞)
virtual status_t addService( const String16& name, const sp<IBinder>& service) = 0;
// 添加一个服务
virtual Vector<String16> listServices() = 0;
// 列举所有服务
- MediaServer简单分析
- MediaServer简单分析
- MediaServer简单分析
- Android系统MediaServer分析
- mediaserver内存泄露分析
- android mediaserver Stagefright 漏洞分析
- mediaserver
- Binder_Native:MediaServer主函数代码跟踪分析
- Android源码分析--MediaServer源码分析(一)
- Android源码分析--MediaServer源码分析(二)
- Android源码分析--MediaServer源码分析(一)
- Android源码分析--MediaServer源码分析(二)
- 从mediaserver入手快速理解binder机制(最简单理解binder)
- LIVE555 mediaServer 与 VLC
- Binder学习二 MediaServer
- 深入了解MediaServer-1
- 深入了解mediaserver-2
- 深入了解mediaserver-3
- 简明x86汇编语言教程(6)-利用子程序与中断
- 为MFC单文档视图中创建的CTreeCtrl添加消息响应
- ARM、DSP、FPGA的技术特点和区别
- VC7中汇编和C++混合的初步心得
- 面向对象的三个基本特征(讲解)
- MediaServer简单分析
- 简明x86汇编语言教程(5)-串操作
- 用一支烟的时间 了解真实的尼古丁
- ARM开发笔记
- 自已写的一个分页的存储过程
- 【转】活灵活现用Git--基础篇
- 简明x86汇编语言教程(7)-编译优化
- Win32Asm及其编程工具和资源的介绍
- python中Pickle模块 串行化对象 系列化对象