[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(进度条背景)。
- @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
-
示意图: