Timeline Progress bar for AVPlayer

后端 未结 8 2193
情深已故
情深已故 2020-12-22 22:31

AVPlayer is fully customizable, unfortunately there are convenient methods in AVPlayer for showing the time line progress bar.

AVPl         


        
相关标签:
8条回答
  • 2020-12-22 22:52

    Thanks to iOSPawan for the code! I simplified the code to the necessary lines. This might be more clear to understand the concept. Basically I have implemented it like this and it works fine.

    Before starting the video:

    __weak NSObject *weakSelf = self;    
    [_player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1.0 / 60.0, NSEC_PER_SEC)
                                          queue:NULL
                                     usingBlock:^(CMTime time){
                                                    [weakSelf updateProgressBar];
                                                 }];
    
    [_player play];
    

    Then you need to have a method to update your progress bar:

    - (void)updateProgressBar
    {
        double duration = CMTimeGetSeconds(_playerItem.duration);
        double time = CMTimeGetSeconds(_player.currentTime);
        _progressView.progress = (CGFloat) (time / duration);
    }
    
    0 讨论(0)
  • 2020-12-22 22:56

    for timeline i do this

    -(void)changeSliderValue {
    
    double duration = CMTimeGetSeconds(self.player.currentItem.duration);
    
    [lengthSlider setMaximumValue:(float)duration];
    
    lengthSlider.value = CMTimeGetSeconds([self.player currentTime]);
    
    int seconds = lengthSlider.value,minutes = seconds/60,hours = minutes/60;
    
    int secondsRemain = lengthSlider.maximumValue - seconds,minutesRemain = secondsRemain/60,hoursRemain = minutesRemain/60;
    
    seconds = seconds-minutes*60;
    
    minutes = minutes-hours*60;
    
    secondsRemain = secondsRemain - minutesRemain*60;
    
    minutesRemain = minutesRemain - hoursRemain*60;
    
    NSString *hourStr,*minuteStr,*secondStr,*hourStrRemain,*minuteStrRemain,*secondStrRemain;
    
    hourStr = hours > 9 ? [NSString stringWithFormat:@"%d",hours] : [NSString stringWithFormat:@"0%d",hours];
    
    minuteStr = minutes > 9 ? [NSString stringWithFormat:@"%d",minutes] : [NSString stringWithFormat:@"0%d",minutes];
    
    secondStr = seconds > 9 ? [NSString stringWithFormat:@"%d",seconds] : [NSString stringWithFormat:@"0%d",seconds];
    
    hourStrRemain = hoursRemain > 9 ? [NSString stringWithFormat:@"%d",hoursRemain] : [NSString stringWithFormat:@"0%d",hoursRemain];
    
    minuteStrRemain = minutesRemain > 9 ? [NSString stringWithFormat:@"%d",minutesRemain] : [NSString stringWithFormat:@"0%d",minutesRemain];
    
    secondStrRemain = secondsRemain > 9 ? [NSString stringWithFormat:@"%d",secondsRemain] : [NSString stringWithFormat:@"0%d",secondsRemain];
    
    timePlayed.text = [NSString stringWithFormat:@"%@:%@:%@",hourStr,minuteStr,secondStr];
    
    timeRemain.text = [NSString stringWithFormat:@"-%@:%@:%@",hourStrRemain,minuteStrRemain,secondStrRemain];
    

    And import CoreMedia framework

    lengthSlider is UISlider

    0 讨论(0)
提交回复
热议问题