iOS开发进阶ios实用开发技巧iOS点点滴滴

iOS 视频播放之切换清晰度

2017-11-14  本文已影响306人  卢叁

众所周知,在观看视频时,很多用户都有切换视频清晰度的需求,毕竟超清就是看的爽!所以,很多视频类的app都会有清晰度切换的功能。但是,很多app并没有在清晰度切换的时候给用户很好的体验效果,如下图:


屏幕快照 2017-11-14 下午4.06.12.png

这是因为清晰度的切换,其实是切换了不同清晰度的视频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源码

上一篇下一篇

猜你喜欢

热点阅读