眾所周知儿倒,在觀看視頻時版保,很多用戶都有切換視頻清晰度的需求,畢竟超清就是看的爽!所以,很多視頻類的app都會有清晰度切換的功能彻犁。但是蹈垢,很多app并沒有在清晰度切換的時候給用戶很好的體驗效果,如下圖:
這是因為清晰度的切換袖裕,其實是切換了不同清晰度的視頻URL曹抬,也就是釋放原先播放的資源,重新加載資源急鳄。重走加載的方法谤民,會導致切換時黑屏的出現(xiàn)。當然疾宏,這不是bug张足。但是,有很多app能在切換清晰度的能做到無縫切換坎藐,即:保持正在播放的界面为牍,會有一點小動畫提示正在切換,等到切換完成時繼續(xù)播放岩馍。這樣的用戶體驗就很好碉咆。其實,想實現(xiàn)這個效果并不難蛀恩。
第一步:獲取當前播放的時間疫铜,暫停播放器,獲取到當時播放的縮略圖
- (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源碼