AVPlayer与iOS中的UISlider同步

时间:2012-11-06 14:59:45

标签: ios queue uislider avplayer

在iOS上使用应用程序时,我正在使用AVPlayer播放视频,我正在使用以下命令将滑块与playerItem当前持续时间同步:

//synchronizing the current time label and slider with the player.
[self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 100) queue:dispatch_get_main_queue() usingBlock:^(CMTime time)

{
    CMTime endTime = CMTimeConvertScale (self.player.currentItem.asset.duration, self.player.currentTime.timescale, kCMTimeRoundingMethod_RoundHalfAwayFromZero);
    if (CMTimeCompare(endTime, kCMTimeZero) != 0) {
        double normalizedTime = (double) self.player.currentTime.value / (double) endTime.value;
        self.slider.value = normalizedTime;
    }
    Float64 currentSeconds = CMTimeGetSeconds(self.player.currentTime);
    int mins = currentSeconds/60.0;
    int secs = fmodf(currentSeconds, 60.0);
    NSString *minsString = mins < 10 ? [NSString stringWithFormat:@"0%d", mins] : [NSString stringWithFormat:@"%d", mins];
    NSString *secsString = secs < 10 ? [NSString stringWithFormat:@"0%d", secs] : [NSString stringWithFormat:@"%d", secs];
    self.currentTimeLabel.text = [NSString stringWithFormat:@"%@:%@", minsString, secsString];
}];

问题是我在Modal视图中播放视频,当我按下按钮关闭视图控制器时,视图控制器解除但视频继续在后台播放(因为可以听到资产的音频) )。我怎么解决这个问题?我确信它与我正在使用的队列有关,但我已经尝试了主队列和并发队列,但每次都有相同的结果。

1 个答案:

答案 0 :(得分:0)

我认为您需要通过调用AVAssetReader方法停止cancelReading

文档:

  

取消阅读

     

取消任何后台工作并阻止接收方的工作   读取更多样本的输出。

     
      
  • (void)cancelReading Discussion如果你想在到达时间范围的末尾之前停止从接收器读取样本,你   应该调用此方法来停止任何后台预读操作   可能已经在进行中。
  •   

另外,当你解雇模态视图时,你应该使用removeTimeObserver AVPlayer方法。

如果您没有pause,还有AVAssetReader AVPlayer方法。