前言
背景
以前写过一套播放器,详见iOS流媒体播放器,结合了UI与播放层,集成使用很方便,但是呢,定制性很强,想要修改UI层或新增另外的功能,比较不好拓展,还因为公司播放类的项目很多,也为了能适用到其他项目,不同项目不同UI层或者有些定制化的需求,所以我将UI与播放层进行了拆分,使播放器变得更纯粹。
诞生
由此,一个纯播放层播放器TDPlayerLite应运而生,哈哈,该播放器采取适配器模式,有基于AVPlayer封装的,也可集成其他播放器,例DRM播放器,或者音乐播放器,都可以,这样对在项目中不同地方使用不同播放器提供很大便利。
集成与使用
实现模式
TDPlayerLite采用适配器模式,所有对外的方法和代理都放在BasePlayer类,需要集成某播放器时,以集成系统播放器AVPlayer为例,继承BasePlayer类生成ReAVPlayer类,在ReAVPlayer类里实现AVPlayer的装载,也实现BasePlayer类对外暴露的方法。
优点:这种模式能够快速集成不同播放器到项目中,且不会影响到原项目。
导入
Demo里PlayerAdapter直接拖往工程里,就可直接使用。
目录
PlayerManager
1 | /** |
使用PlayerManager类可传入不同类型生成对应播放器:
1 | self.player = [[PlayerManager manager] getPlayerBy:self.playerView andPlayerType:PlayerManagerTypeVisualOnPlayer]; |
若不传入Type,默认生成AVPlayer播放器
BasePlayer
它是播放器基类,其实BasePlayer.h里注释已经写得很全面了,每个属性和方法的使用和用途都有注释,这里不赘述了。
说下BasePlayer这个类的作用,写这个类的目录是为了把与外部交互数据统一化,且把播放器产生的数据全面的归整统一对外提供,后面集成进来的播放器,都继承这个基类,实现其方法。
例如:
此自定义的播放器状态基本概括了全部状态,对用户特别友好,能够在不同状态提示用户,提升了用户体验。
BTW:系统播放器AVPlayer经常就有乱调、部分视频状态没有的情况,所以我在ReAVPlayer做了兼容性处理,当你需要集成其他播放器时,也需要做相关处理,保证最外层使用的Player的使用完整性。
BasePlayer_Methods
扩展类,可加入BasePlayer的扩展接口或属性。
ReAVPlayer
该类继承于BasePlayer,里面装载了系统播放器AVPlayer,使用该类实际就是使用系统播放器,AVPlayer一些兼容性处理也放在了里面。
总结
这个播放器我们已经应用到了很多项目中,也已经上线测试了很多版本,已经是很稳定的版本了,不用担心在使用中会出现什么奇怪难解的问题了。
另,目前TDPlayerLite相当于是一个播放器的适配器,如果你只是单纯的想用一个稳定友好的系统播放器,可直接导入Players文件夹使用。