SuperPlayer是腾讯的开源播放器https://github.com/tencentyun/SuperPlayer_iOS,封装的腾讯的云的SDK,封装的很死,很多东西不能自定义,不能控制,GitHub的issue也没人解答,加的群里也没人回答问题,这个库处于一个半死不活状态,我目前将就着用,遇到很多坑,把我遇到的坑在这填一下:
1.无法实时获取当前的播放时间
本来该是有一个正在播放的代理方法回调,在里面修改当前播放时间,但是没有这个代理方法,所以我就写了一个定时器,当播放开始开启定时器一秒钟获取一下当前的播放时间,获取当前播放时间的属性是有的
@property (nonatomic) CGFloat playCurrentTime;
2.试看属性无效
`@property (nonatomic) NSTimeInterval originalDuration;/// 原始视频总时长,主要用于试看场景下显示总时长`
这个属性看着有点迷惑,设置了没有任何作用,不是试看时间,如果要实现试看,我这边处理比较复杂,
1.在倒计时获取播放时间的方法,当时间大于试看时间,就停止播放
2.要处理拖动播放进度条,在拖动响应事件中处理,拖动进度条过了试看时间,停止播放,提示文案。
3.关闭屏幕滑动,会同时关闭左右滑快进快退和上下滑动控制音量@property (nonatomic) BOOL disableGesture;/// 是否允许竖屏手势
设置为false就可以
3.横屏全屏bug处理
当在播放页present界面,比如登陆界面,然后横屏,播放界面会出来覆盖掉present出来的界面,再次竖屏播放页消失。另一种情况是如果播放页控制器没有释放,播放不会停止,pop出来依然播放,横屏播放页就又出来了。这属于自己的内存泄露。
只要播放页没有释放掉,横屏,播放页就出来了,在暴露出的属性没有找到关闭播放器横屏的属性。只有一个横屏的代理方法,只能在横屏通知的代理方法中,再变为竖屏
/// 全屏改变通知
- (void)superPlayerFullScreenChanged:(SuperPlayerView *)player {
if (self.isViewDisapper) {
player.isFullScreen = false;
}
}
4.其他处理
播放切换
SuperPlayerModel *playerModel = [[SuperPlayerModel alloc] init];
// 设置播放地址,直播、点播都可以
playerModel.videoURL = playPathStr;
// 开始播放
[_playerView playWithModel:playerModel];
注意:SuperPlayerView要加在一个独立的自定义view类上,不要直接加在控制器上,否则播放器一横屏,控制器上的和播放层同一级的子控件就会飞跑不见了
自定义播放层@property (nonatomic) SuperPlayerControlView *controlView;/// 超级播放器控制层
把自定义的播放层返回给这个熟悉,播放进度条拖动需要调用方法
- (void)seekToTime:(NSInteger)dragedSeconds;
但是自定义播放层的代理方法全都没有效果
能用的代理方法只有SuperPlayer的代理
@protocol SuperPlayerDelegate <NSObject>
@optional
/// 返回事件
- (void)superPlayerBackAction:(SuperPlayerView *)player;
/// 全屏改变通知
- (void)superPlayerFullScreenChanged:(SuperPlayerView *)player;
/// 播放开始通知
- (void)superPlayerDidStart:(SuperPlayerView *)player;
/// 播放结束通知
- (void)superPlayerDidEnd:(SuperPlayerView *)player;
/// 播放错误通知
- (void)superPlayerError:(SuperPlayerView *)player errCode:(int)code errMessage:(NSString *)why;
// 需要通知到父view的事件在此添加
@end
推荐其他替代方案播放器ZFPlayer,WMPlayer
网友评论