2022年Android的MediaPlayer架构介绍补充 .pdf

上传人:C****o 文档编号:39709861 上传时间:2022-09-07 格式:PDF 页数:5 大小:195.77KB
返回 下载 相关 举报
2022年Android的MediaPlayer架构介绍补充 .pdf_第1页
第1页 / 共5页
2022年Android的MediaPlayer架构介绍补充 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年Android的MediaPlayer架构介绍补充 .pdf》由会员分享,可在线阅读,更多相关《2022年Android的MediaPlayer架构介绍补充 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、一.类图扩充Binder 代理,本地接口类图中加入了Bp 的代理类:BpMediaPlayer,BpMediaPlayerService。这些类和相应的 Bn 互相配对,Bp 客户端代理接口,而 Bn 实现服务端本地接口。拿 BxMediaPlayer来举例:BpMediaPlayer继承BpInterface,并重载实现IMediaPlayer 接口的所有方法,这些方法包括start(),stop(),pause()等等。在这些重载方法中,实现 clientserver 的服务协议,利用remote()-transact()发送请求ID(enum 结构),请求附带数据并获得调用结果(repl

2、y)。然后由宏IMPLEMENT_META_INTERFACE(MediaPlayer,android.hardware.IMediaPlayer”)将BpMediaPlayer和静态方法IMediaPlayer:asInterface(const sp&obj)相关联。你在代码里看不到有代码去实例化BpMediaPlayer,其实是在asInterface 里做的,并且由interface_cast 模板函数实现:Template inline sp interface_cast(const sp&obj)return INTERFACE:asInterface(obj);具体的 inter

3、face_cast 的用法,可以在BpMediaPlayerService:create()里看到:virtual sp create(pid_t pid,const sp&client,const char*url Parcel data,reply;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -data.writeInterfaceToken(IMediaPlayerService:getInterfaceDescriptor();data.writeInt32(pid);data.writeStrongBinder(client-asBinder();data.

4、writeCString(url);remote()-transact(CREATE_URL,data,&reply);return interface_cast(reply.readStrongBinder();该 create函数,实际是 mediaplayer client 实例在请求MediaPlayerService 获取一个 MediaPlayer服务接口时,BpMediaPlayerService 代理返回的interface_cast 过后得到的BpMediaPlayer 实例。因此,如果某个 service 需要走 IPC 层(也就是服务提供者和请求者不在同一个进程里),那么

5、这个服务需要暴露的IXXXX Interface必然被 BpXX/BnXX两个类实现(继承),Bp 用在客户端,Bn 用在服务端。客户端获取服务接口类的类型虽然是IXXXX,但实际上利用C+的多态机制,得到的是BpXX 的类型。各个类之间关系MediaPlayer(MediaPlayerClient)对 象 从MediaPlayerService获 取 的player,实 际 上 是BpMediaPlayer 实例,并保存在它的mPlayer 成员变量中。对应的在MediaPlayerService 实例中,MediaPlayerClient 申请,并创建的player 对象会被放入clien

6、ts 成员向量中,该向量实际上是 BnMediaPlayer 的对象容器。每个client 对象都有自己的mPlayer 成员变量,保存的则是 OpenCORE 创建的 PVPlayer 对象。这里有两个mPlayer 成员变量,各自代表不同类型,不要混淆。二通过 MediaPlayer 获得 service player 时序图以 setDataSource接口为例:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -使用 MediaPlayer 的 App,可以通过setDataSource来获得(

7、创建)一个player 对象,并保存在mPlayer成 员 中。大 概 的 时 序:MediaPlayer首 先 创 建 一 个service代 理 对 象BpMediaPlayerService,通过该代理对象的create()方法去 call IPC,对 MediaPlayerService 发出创建player 的请求。BnMediaPlayerService则在获取IPC 的调用请求后,直接调用MediaPlayerService 的 create 方法,分配一个 Client 对象,然后通过IPC 返回该 client 对象的asBinder()的 返 回 结 果。BpMediaPl

8、ayerService在 得 到BnMediaPlayerService返 回 的client-asBinder()的 reply 后,会利用readStrongBinder()去读出 IBinder 对象,将其作为参数调用 interface_cast 创建一个BpMediaPlayer。(IBinder 对象内部到底记录了些什么,目前还没研究:)得到了BpMediaPlayer 的 MediaPlayer 对象,将其保存入mPlayer,之后 App 就可以调用其完成一些列操作。三使用 service player 时序图以上的时序图,描述的是之前获得的mPlayer 的使用时序。这个时序比较简单,这里不做详细说明,需要注意的是图最右侧,Client 对象实际要通过创建和调用OpenCORE 里的PVPlayer 来最终实现多媒体播放功能。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁