今晚月色真美

前言

背景

以前写过一套播放器,详见iOS流媒体播放器,结合了UI与播放层,集成使用很方便,但是呢,定制性很强,想要修改UI层或新增另外的功能,比较不好拓展,还因为公司播放类的项目很多,也为了能适用到其他项目,不同项目不同UI层或者有些定制化的需求,所以我将UI与播放层进行了拆分,使播放器变得更纯粹。

诞生

由此,一个纯播放层播放器TDPlayerLite应运而生,哈哈,该播放器采取适配器模式,有基于AVPlayer封装的,也可集成其他播放器,例DRM播放器,或者音乐播放器,都可以,这样对在项目中不同地方使用不同播放器提供很大便利。

集成与使用

实现模式

TDPlayerLite采用适配器模式,所有对外的方法和代理都放在BasePlayer类,需要集成某播放器时,以集成系统播放器AVPlayer为例,继承BasePlayer类生成ReAVPlayer类,在ReAVPlayer类里实现AVPlayer的装载,也实现BasePlayer类对外暴露的方法。

优点:这种模式能够快速集成不同播放器到项目中,且不会影响到原项目。

导入

Demo里PlayerAdapter直接拖往工程里,就可直接使用。

4EAAC825-AA60-432A-9526-1CAD359731CD.png

目录

PlayerManager

1
2
3
4
5
6
7
8
9
10
/**
播放器类型,目前有系统播放器及DRM播放器
*/
typedef enum _PlayerManagerType
{
PlayerManagerTypeNone = 0,
PlayerManagerTypeAVPlayer = 1,
PlayerManagerTypeVisualOnPlayer = 2 //DRM
//还可添加其他类型的播放器
} PlayerManagerType;

使用PlayerManager类可传入不同类型生成对应播放器:

1
self.player = [[PlayerManager manager] getPlayerBy:self.playerView andPlayerType:PlayerManagerTypeVisualOnPlayer];

若不传入Type,默认生成AVPlayer播放器

BasePlayer

它是播放器基类,其实BasePlayer.h里注释已经写得很全面了,每个属性和方法的使用和用途都有注释,这里不赘述了。

说下BasePlayer这个类的作用,写这个类的目录是为了把与外部交互数据统一化,且把播放器产生的数据全面的归整统一对外提供,后面集成进来的播放器,都继承这个基类,实现其方法。

例如:

4FD04FC9-7DB8-4869-812F-408FD7586879.png

此自定义的播放器状态基本概括了全部状态,对用户特别友好,能够在不同状态提示用户,提升了用户体验。

BTW:系统播放器AVPlayer经常就有乱调、部分视频状态没有的情况,所以我在ReAVPlayer做了兼容性处理,当你需要集成其他播放器时,也需要做相关处理,保证最外层使用的Player的使用完整性。

BasePlayer_Methods

扩展类,可加入BasePlayer的扩展接口或属性。

ReAVPlayer

该类继承于BasePlayer,里面装载了系统播放器AVPlayer,使用该类实际就是使用系统播放器,AVPlayer一些兼容性处理也放在了里面。

总结

这个播放器我们已经应用到了很多项目中,也已经上线测试了很多版本,已经是很稳定的版本了,不用担心在使用中会出现什么奇怪难解的问题了。

另,目前TDPlayerLite相当于是一个播放器的适配器,如果你只是单纯的想用一个稳定友好的系统播放器,可直接导入Players文件夹使用。

 评论

本站总字数统计:18.4k

感谢您的浏览, 本站总访问量为 次 。
载入天数...载入时分秒...