MediaPlayer(三)--C++|MediaPlayer(三)--C++ binder框架
在看这篇文章前,建议先阅读
C++ Binder机制学习(转载)
只是介绍c++层binder通讯的使用流程,并未涉及binder原理机制
结构框架
【MediaPlayer(三)--C++|MediaPlayer(三)--C++ binder框架】上一篇文章MediaPlayer--MediaPlayer基本框架没有将C++的mediaplayer binder通讯展开,这篇文章主要展开这一部分。
大概画了下C++ MediaPlayer的uml图,不是很满意,请高手指教
文章图片
MediaPlayerBinder.png
这里面主要的client和service实现类是以下两个文件(Android8.1 路径)
frameworks/av/media/libmedia/mediaplayer.cpp
frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp
这里面涉及了三对IPC的通讯,即
IMediaPlayerClient
IMediaPlayerService
IMediaPlayer
其中 IMediaPlayerService , IMediaPlayer 的服务端在MediaPlayerService.cpp, 客户端在mediaplayer.cpp。IMediaPlayerClient 的服务端在mediaplayer.cpp, 客户端在MediaPlayerService.cpp, 这是MediaPlayerService回调mediaplayer使用的。 IMediaPlayerService会创建IMediaPlayer的实例
流程
MediaPlayer 同MediaPlayerService通讯 是通过变量 sp
status_t MediaPlayer::setDataSource(
const sp
关于创建mPlayer这块主要分3步:
1 const sp
2 sp
3 attachNewPlayer 将player赋值给mPlayer
看一下 1 和 2 的两个函数的实现
/*static*/const sp
这里简单讲一下
1 sp
2 sm->getService(String16("media.player"));
通过ServiceManager获取到 MediaPlayerService,MediaPlayerService在android初始化时就向ServiceManager注册了
3 interface_cast
class BpMediaPlayerService: public BpInterface
create方法做了两件事
1 remote()->transact(CREATE, data, &reply) 通过 IMediaPlayerService binder通讯,将IMediaPlayerClient的IBinder传给了MediaPlayerService, MediaPlayerServcie后面可以通过IMediaPlayerClient 回调MediaPlayer
2 interface_cast
Binder可分为实名binder和匿名binder, 实名binder是在ServiceManager注册的servce,可以通过ServiceManager的getService获取,而匿名binder没在ServiceManager中注册,没法通过ServiceManager获取,需要想办法获取service的binder实例才能通讯。对于MediaPlayer的结构,MediaPlayerServcie 属于实名binder, IMediaPlayer 和 IMediaPlayerClient 属于匿名binder。MediaPlayer 通过 MediaPlayerServcie实名binder, 将IMediaPlayerClient binder 传递给MediaPlayerServcie,同时MediaPlayerServcie将IMediaPlayer binder返回MediaPlayer。 这样MediaPlayer 就能通过 IMediaPlayer 调用 MediaPlayerServcie::client接口, MediaPlayerServcie可以通过IMediaPlayerClient调用MediaPlayer接口
文章图片
MediaPlayerBinderSeque.png
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- android第三方框架(五)ButterKnife
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 三十年后的广场舞大爷
- 一百二十三夜,请嫁给我
- 2018年9月5日,星期三,天气晴
- 即将到手三百万