眾所周知,在觀看視頻時(shí),很多用戶都有切換視頻清晰度的需求,畢竟超清就是看的爽!所以,很多視頻類的app都會(huì)有清晰度切換的功能。但是,很多app并沒有在清晰度切換的時(shí)候給用戶很好的體驗(yàn)效果,如下圖:

屏幕快照 2017-11-14 下午4.06.12.png
這是因?yàn)榍逦鹊那袚Q,其實(shí)是切換了不同清晰度的視頻URL,也就是釋放原先播放的資源,重新加載資源。重走加載的方法,會(huì)導(dǎo)致切換時(shí)黑屏的出現(xiàn)。當(dāng)然,這不是bug。但是,有很多app能在切換清晰度的能做到無縫切換,即:保持正在播放的界面,會(huì)有一點(diǎn)小動(dòng)畫提示正在切換,等到切換完成時(shí)繼續(xù)播放。這樣的用戶體驗(yàn)就很好。其實(shí),想實(shí)現(xiàn)這個(gè)效果并不難。
第一步:獲取當(dāng)前播放的時(shí)間,暫停播放器,獲取到當(dāng)時(shí)播放的縮略圖
- (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]];
}
第二步:在播放器的代理方法里判斷緩沖時(shí)間,如果緩沖時(shí)間大于等于當(dāng)前播放時(shí)間,就讓播放器播放,然后顯示的imageView也一并隱藏,這樣的效果就非常不錯(cuò)!
//duration 當(dāng)前緩沖的長(zhǎng)度
- (void)videoPlayer:(LYAVPlayerView *)playerView loadedTimeRangeDidChange:(CGFloat )duration{
NSLog(@"當(dāng)前緩沖的長(zhǎng)度%f",duration);
if (_isChange) return;
if (duration >= _switchTime && _isSwitch) {
_imageView.hidden =YES;
[self.playerView seekToTime:_switchTime];
[self.playerView play];
_isChange =YES;
}
}
最后,動(dòng)畫效果大家自己添加哈。
GitHub源碼