iOS 視訊播放之切換清晰度

盧三發表於2017-12-20

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

相關文章