MediaPlayerService流程简要分析

本文简要分析了Android系统的MediaPlayerService的工作流程。从mediaserver.rc文件开始,阐述了如何启动MediaServer服务,并在main_mediaserver.cpp中初始化MediaPlayerService。接着介绍了MediaPlayerService的初始化方法,包括NuPlayerFactory和TestPlayerFactory的注册。MediaPlayerService通过管理Client对象与工厂类,借助binder机制,将播放任务委托给其他进程,实现音视频的播放控制。
摘要由CSDN通过智能技术生成

涉及相关文件:
\frameworks\av\media\mediaserver\mediaserver.rc
\frameworks\av\media\mediaserver\main_mediaserver.cpp
\frameworks\av\media\libmediaplayerservice\MediaPlayerService.h
\frameworks\av\media\libmediaplayerservice\MediaPlayerService.cpp
\frameworks\av\media\libmediaplayerservice\MediaPlayerFactory.h
\frameworks\av\media\libmediaplayerservice\MediaPlayerFactory.cpp
\frameworks\av\include\media\IMediaPlayerService.h
\frameworks\av\media\libmedia\include\media\IMediaPlayer.h

MediaPlayerService服务相关类关系图如下:
在这里插入图片描述
在\frameworks\av\media\mediaserver\中,mediaserver.rc文件内容如下,启动/system/bin/mediaserver作为media服务

service media /system/bin/mediaserver
    class main
    user media
    group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks

main_mediaserver.cpp中main函数内容如下,获取IServiceManager服务管理对象,然后初始化MediaPlayerService、ResourceManagerService并且将这两个服务加入到ServiceManager中管理。

int main(int argc __unused, char **argv __unused)
{
    signal(SIGPIPE, SIG_IGN);

    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm(defaultServiceManager());
    ALOGI("ServiceManager: %p", sm.get());
    InitializeIcuOrDie();
    MediaPlayerService::instantiate();
    ResourceManagerService::instantiate();
    registerExtensions();
    ProcessState::self()->startThreadPool();
    IPCThreadState
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值