众所周知,在观看视频时,很多用户都有切换视频清晰度的需求,毕竟超清就是看的爽!所以,很多视频类的app都会有清晰度切换的功能。但是,很多app并没有在清晰度切换的时候给用户很好的体验效果,如下图:
这是因为清晰度的切换,其实是切换了不同清晰度的视频URL,也就是释放原先播放的资源,重新加载资源。重走加载的方法,会导致切换时黑屏的出现。当然,这不是bug。但是,有很多app能在切换清晰度的能做到无缝切换,即:保持正在播放的界面,会有一点小动画提示正在切换,等到切换完成时继续播放。这样的用户体验就很好。其实,想实现这个效果并不难。
第一步:获取当前播放的时间,暂停播放器,获取到当时播放的缩略图
- (IBAction)qualityAction:(id)sender {
_switchTime =[self.playerView getCurrentPlayTime];
_isSwitch =YES;
_isChange =NO;
[self.playerView pause];//暂停
//获取缩略图 显示在播放器所在的页面上
_imageView.image =[self.playerView getThumbnailImageFromVideoURL:[NSURL URLWithString:VideoURL] time:_switchTime];
_imageView.hidden =NO;
//加载
[self.playerView setURL:[NSURL URLWithString:VideoURL]];
}
第二步:在播放器的代理方法里判断缓冲时间,如果缓冲时间大于等于当前播放时间,就让播放器播放,然后显示的imageView也一并隐藏,这样的效果就非常不错!
//duration 当前缓冲的长度
- (void)videoPlayer:(LYAVPlayerView *)playerView loadedTimeRangeDidChange:(CGFloat )duration{
NSLog(@"当前缓冲的长度%f",duration);
if (_isChange) return;
if (duration >= _switchTime && _isSwitch) {
_imageView.hidden =YES;
[self.playerView seekToTime:_switchTime];
[self.playerView play];
_isChange =YES;
}
}
最后,动画效果大家自己添加哈。
GitHub源码