您的位置:首页 > 移动开发 > IOS开发

[IOS]对视频、音频播放器添加缓冲进度条

2017-03-14 15:57 1801 查看
 


[IOS]对视频、音频播放器添加缓冲进度条

标签: ProgressSlider缓冲进度

[iOS]对视频、音频播放器添加缓冲进度条

Demo地址:http://download.csdn.net/detail/u012881779/8854967

思路说起来很简单:

先拖一个Progress View控件,设置它的Progress Tint和Track Tint;

再拖一个Horizontal Slider覆盖在ProgressView上面,设置它的Min Track Tint 同时设置Max Track Tint为Clear Color(为了透过控件看见背后progressView的背景);

最后分别设置一下各进度的值就OK了。

Min Track Tint(播放进度)、Progress Tint(缓冲进度)、Track Tint(进度条背景)。

[objc] view
plain copy

 print?

@interface AVVideoViewController: UIViewController  

@property (weak, nonatomic) IBOutlet UISlider       *mScrubber;     //播放进度  

@property (weak, nonatomic) IBOutlet UIProgressView *cacheProgressV;//缓冲进度  

@end  

  

@implementation AVVideoViewController  

  

- (void)syncScrubber  

{  

    /*播放进度*/  

    CMTime playerDuration = [self playerItemDuration];  

    if (CMTIME_IS_INVALID(playerDuration))   

    {  

        mScrubber.minimumValue = 0.0;  

        [self showStarLabletimeToEndLableTime:0.0 end:0.0];  

        return;  

    }   

      

    double duration = CMTimeGetSeconds(playerDuration);  

    if (isfinite(duration))  

    {  

        float minValue = [self.mScrubber minimumValue];  

        float maxValue = [self.mScrubber maximumValue];  

        double time = CMTimeGetSeconds([self.mPlayer currentTime]);  

        [self showStarLabletimeToEndLableTime:time end:duration];  

        [self.mScrubber setValue:(maxValue - minValue) * time / duration + minValue];  

    }  

  

    /*缓冲进度*/  

    NSTimeInterval timeInterval = [self availableDuration];  

    NSLog(@"Time I nterval:%f",timeInterval);  

    CMTime duration11 = self.mPlayerItem.duration;  

    CGFloat totalDuration = CMTimeGetSeconds(duration11);  

    [_cacheProgressV setProgress:timeInterval / totalDuration animated:YES];  

}  

  

// 计算缓冲进度  

- (NSTimeInterval)availableDuration {  

    NSArray *loadedTimeRanges = [[self.mPlayer currentItem] loadedTimeRanges];  

    CMTimeRange timeRange = [loadedTimeRanges.firstObject CMTimeRangeValue];// 获取缓冲区域  

    float startSeconds = CMTimeGetSeconds(timeRange.start);  

    float durationSeconds = CMTimeGetSeconds(timeRange.duration);  

      

    NSTimeInterval result = startSeconds + durationSeconds;// 计算缓冲总进度  

      

    return result;  

}  

  

@end  

   

示意图:







顶1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: