3 mediaplayer的核心库libmedia.so
libs/media/mediaplayer.cpp文件用于实现mediaplayer.h提供的接口,其中一个重要的片段如下所示:
const sp<IMediaPlayerService>& MediaPlayer::getMediaPlayerService()
{
Mutex::Autolock _l(mServiceLock);
if (mMediaPlayerService.get() == 0) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
binder = sm->getService(String16("media.player"));
if (binder != 0)
break;
LOGW("MediaPlayerService not published, waiting...");
usleep(500000); // 0.5 s
} while(true);
if (mDeathNotifier == NULL) {
mDeathNotifier = new DeathNotifier();
}
binder->linkToDeath(mDeathNotifier);
mMediaPlayerService = interface_cast<IMediaPlayerService>(binder);
}
LOGE_IF(mMediaPlayerService==0, "no MediaPlayerService!?");
return mMediaPlayerService;
}
其中最重要的一点是binder = sm->getService(String16("media.player"));这个调用用来得到一个名称为"media.player"的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型IMediaPlayerService使用。
status_t MediaPlayer::se

该博客主要探讨了MediaPlayer框架的核心库libmedia.so,包括mediaplayer.cpp中的关键代码,如通过Binder获取IMediaPlayerService服务。此外,介绍了media服务libmediaservice.so,特别是mediaserver如何启动多媒体服务。创建不同类型的播放器(如PVPlayer、MidiFile、VorbisPlayer)的过程也进行了说明,这些播放器都实现了MediaPlayerInterface。
最低0.47元/天 解锁文章
1217

被折叠的 条评论
为什么被折叠?



