眾所周知,在觀看視訊時,很多使用者都有切換視訊清晰度的需求,畢竟超清就是看的爽!所以,很多視訊類的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原始碼