Android视频播放器架构接口的设计

 

以前的项目里面有视频播放的功能,经过讨论都是选择了第三方播放器 同时也保留了原生播放器

为什么使用第三方播放器,主要解决:

1、MediaPlayer性能的问题

2、MediaPlayer无法支持的功能 解码等

为什么使用双播放器

1、充分利用每一个播放器的优缺点,目前仅考虑MediaPlayer+一款第三方Player

2、部分资源只能使用某个播放器去播放,在播放出现异常上报到后台后,可以针对性的去处理某资源在某类型设备去使用某个播放器,甚至更加的去细化

3、实际使用以第三方播放器为主,项目上线后,除了项目的业务功能,大部分的第三方维护越来越少,到了了后期,出现了问题,在去升级可能成本特别大

在我的实际项目中使用的ExoPlayer还是3年前的代码,现在已经升级到了ExoPlayer2没法在原来的基础上升级维护成本特别大

而且人员都抽调到新项目都在重构新版本,老项目没法抽出人去维护,另外原生的的MediaPlayer随着手机升级的性能也越来越强大并不比3年前的ExoPlayer差 所以有些业务场景是可以使用Mediplaer

 

播放器接口设计

为了方便以后的维护扩展对常用的方法提取接口 如start,stop, pause seeTo等

1、接口以MediaPlayer为原型设计的接口也可以参照其他的播放器(Exo,ijk)作为原型设计建议以MediaPlayer作为原型

2、基本包含MediaPlayer的播放时候常用的那几个接口,为了使接口使用起来更加规范,对于播放器之间差异化的函数不在接口声明

3、如果必要暴露出来的在实现的Proxy类上要判断是否支持该功能,不支持抛出异常在开发的过程及时发现误用的情况参考

* 编码规则

*播放器值只做播放器该做的事情,和播放器无关的代码,项目的业务代码,不要写在里面 即使某个播放器只会在某一块的业务上使用别的地方都不会用也不要写进播放器里面

*第三方播放器的引入,如果是使用源码lib引入,根据项目需求做针对性修改的时候,不建议修改源码,采取继承的方式或者代理的方式去重写或者复制一份出来在这个基础是去改造

*源码lib引入尽量做到和build.gradle添加依赖的方式无缝切换

*其他的项目组件也尽量如此不要随便引入项目的业务代码使组件更加轻易的解耦

*大概结构:

* IPlayer

********ProxyPlayer implements IPlayer

*********BasePlayer implements IPlayer

**********XPlayer extends BasePlayer

**********MediaPlayer extends BasePlayer

*/

 

提取的项目代码 ,很多的架构设计都可以参照此原型 

https://github.com/wangshiming88/PlayerDesign

播放控制是本系统最主要的部分,播放控制分为播放和动态控制,动态控制包括开始播放,暂停播放,上一首,下一首,重新播放。 1、播放音乐 播放器的播放界面上,最上面的是播放/暂停按钮,左边的是上一首按钮,右边的是下一首按钮,下面的是重新播放按钮。几个按钮分布在专辑图片的四周。图片上面是显示的播放的进度条。进度条上面显示的有当前播放的歌的名称和歌手信息。 执行之前: 1)用户处于播放界面; 2)用户可以看到播放按钮处于暂停状态; 3)用户点击暂停按钮; 执行之后:开始播放歌曲。 2、暂停播放 用例描述:在播放音乐时,比如用户需要和别人讲话这时需要将音乐暂停。用户只需要轻点音乐播放器的主界面上的播放/暂停按钮,系统将停止当前歌曲的播放。 参与者:用户。 执行之前:音乐播放器的主界面正在播放歌曲。 执行之后:停止播放歌曲。 3、切换上一首 在播放界面,当用户想要切换到上一首歌曲的时候 执行之前: 1)当前正在播放歌曲; 2)点击界面上的上一首歌的切换按钮; 3)系统成功加载到前一首歌。 执行之后:切换到列表里面这首歌前面的一首。 4、切换下一首 用例描述:点击切换歌曲的按钮,会立刻停止播放当前的歌曲,切换到列表中的当前这个歌曲的下一首歌曲。同时下一首歌曲的相关信息也会显示在同一位置。 1)当前正在播放歌曲; 2) 点击界面上的下一首歌的切换按钮; 3) 系统成功加载到下一首歌。 执行之后:开始播放下一首。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值