涉及相关文件:
\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