在此之前,您使用过 ZFPlayer,是否担忧封装 avplayer,而不是使用或修改源代码来支持其他播放器,控制层难以自定义等问题?为了解决这些问题,我编写了这个播放器模板,对于播放器 SDK,您可以遵守 ZFPlayerMediaPlayback
协议,对于控制视图,您可以遵守 ZFPlayerMediaControl
协议,可以自定义播放器和控制视图。
在 3.X 之前,是不是在苦恼播放器 SDK 自定义、控制层自定义等问题。作者公司多个项目分别使用不同的播放器 SDK 以及每个项目的控制层都不一样,但是为了统一管理、统一调用,我特意写了这个播放器壳子。播放器 SDK 只需遵守 ZFPlayerMediaPlayback
协议,控制层只需遵守 ZFPlayerMediaControl
协议,完全可以实现自定义播放器和控制层。
要求
- iOS 7+
- Xcode 8+
安装
ZFPlayer 通过 CocoaPods 提供。要安装它,使用播放器模板只需在 Podfile 中添加以下行:只有 Core 文件夹下的代码,使用 AVPlayer、IJK、KSY 都需要 pod 单独模块,或者使用自定义播放器管理类,如有定制功能需求,请单独联系作者。
pod 'ZFPlayer', '~> 3.0'
使用默认控制视图,只需在 Podfile 中添加以下行:
pod 'ZFPlayer/ControlView', '~> 3.0'
使用 AVPlayer,只需在 Podfile 中添加以下行:
pod 'ZFPlayer/AVPlayer', '~> 3.0'
如果使用 AVPlayer 边下边播,可以参考使用 KTVHTTPCache
使用 ijkplayer,只需在 Podfile 中添加以下行:
pod 'ZFPlayer/ijkplayer', '~> 3.0'
IJKMediaFramework SDK 支持 Cocoapods
使用 KSYMediaPlayer,只需在 Podfile 中添加以下行:
pod 'ZFPlayer/KSYMediaPlayer', '~> 3.0'
KSYMediaPlayer SDK 支持 Cocoapods
使用说明
ZFPlayerController
主要类,两个初始化方法,正常模式初始化和列表模式初始化(表格视图,收集)
正常样式初始化
ZFPlayerController *player = [ZFPlayerController playerWithPlayerManager:playerManager containerView:containerView];
ZFPlayerController *player = [[ZFPlayerController alloc] initwithPlayerManager:playerManager containerView:containerView];
列表样式初始化
ZFPlayerController *player = [ZFPlayerController playerWithScrollView:tableView playerManager:playerManager containerViewTag:containerViewTag];
ZFPlayerController *player = [ZFPlayerController alloc] initWithScrollView:tableView playerManager:playerManager containerViewTag:containerViewTag];
ZFPlayerMediaPlayback
对于playerManager,必须遵守ZFPlayerMediaPlayback
协议,自定义playerManager可以支持任何播放器SDK,例如AVPlayer
、MPMoviePlayerController
、ijkplayer
、vlc
、PLPlayerKit
、KSYMediaPlayer
等,您可以参考ZFAVPlayerManager
类。
Class<ZFPlayerMediaPlayback> *playerManager = ...;
ZFPlayerMediaControl
此类用于显示控制层,必须遵守ZFPlayerMediaControl协议,您可以使用ZFPlayerControlView
类作为参考。
UIView<ZFPlayerMediaControl> *controlView = ...;
player.controlView = controlView;
使用说明
正常样式
/// Your custom playerManager must conform `ZFPlayerMediaPlayback` protocol.
Class<ZFPlayerMediaPlayback> *playerManager = ...;
/// playerController
ZFPlayerController *player = [ZFPlayerController playerWithPlayerManager:playerManager containerView:self.containerView];
player.controlView = controlView<ZFPlayerMediaControl>;
playerManager.assetURL = [NSURL URLWithString:...];
列表样式
/// Your custom playerManager must conform `ZFPlayerMediaPlayback` protocol.
Class<ZFPlayerMediaPlayback> *playerManager = ...;
/// playerController
ZFPlayerController *player = [ZFPlayerController playerWithScrollView:tableView playerManager:playerManager containerViewTag:tag<NSInteger>];
player.controlView = controlView<ZFPlayerMediaControl>;
self.player.assetURLs = array<NSURL *>;
在viewController中旋转视频要实现
- (BOOL)shouldAutorotate {
return player.shouldAutorotate;
}
图片演示
参考资料
作者
- 微博: @任子丰
- 邮箱: [email protected]
- QQ群: (付费群)
打赏作者
如果ZFPlayer在开发中有帮助到你、如果你需要技术支持或者你需要定制功能,都可以拼命打赏我!
协议
ZFPlayer可在MIT协议下使用。更多信息请参阅LICENSE文件。
提问
1、demo运行不了?
答:下载后本demo可以直接编译运行,不需要pod install
,pod install
后会出错,因为依赖其他播放器SDK较大,所以默认没有添加进来。如果你想用,那请修改一podspec文件,具体怎么修改自己一查便知,然后再pod install。
2、为啥我podfile这样写pod 'ZFPlayer', '~> 3.0'
和demo里不一样,缺少好多类
答:作者秉着插件化的思想来开发此开源库,首先作者的思想是提供一个播放器壳子,关于播放器的核心SDK、还有控制层是完全支持自定义的,所以默认只有Core文件夹下的代码,如果你想使用作者提供的AVPlayer、IJKPlayer等都可单独在podfile写,提供的默认控制层亦是如此,具体看上边readme吧。
3、之前是免费加群,为什么现在要付费加群?
答:之前是免费群每天找作者解决问题的太多了,作者还有自己的工作要干,为了过滤一些伸手党,所以变为付费入群。群内比较活跃,作者、群友都可帮忙解决,如果你有问题都可以加群交流。如果你QQ上没有钱,那你可以扫上边的码,付款大于10元备注写上QQ号,作者看到后会加你然后拉你入群。