KVO 添加 AVPlayer 何时播放视频,因为 queuePlayerAVPlayer

[self.queuePlayer addObserver:self forKeyPath:@"status" options:0 context:NULL];
observer method :
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  if ([keyPath isEqualToString:@"status"]) {
    if (self.queuePlayer.status == AVPlayerStatusReadyToPlay) {

        NSInteger step = (NSInteger)(startTimeForVideo/0.04);
        [self.queuePlayer.currentItem stepByCount:step];

        //CMTime seekTime = CMTimeMake(startTimeForVideo*timeScale,timeScale);
        //if (CMTIME_IS_VALID(seekTime))
        //  [self.queuePlayer seekToTime:seekTime toleranceBefore:kCMTimePositiveInfinity toleranceAfter:kCMTimePositiveInfinity];
        //else
        //  NSLog(@"In valid time");

        [self.queuePlayer play];
    } else if (self.queuePlayer.status == AVPlayerStatusFailed) {
        /* An error was encountered */
    }
}

这里 startTimeForVideo 初始 playBack time for videoseekToTime 也不起作用 stepByCount
编辑 :Values 中使用的 objectmethodscorrect,即使 no luck

最佳答案

KVO 方法的变化,因为 queuePlayerAVPlayer :

if (self.queuePlayer.status == AVPlayerStatusReadyToPlay)
{
  //firstly make cmtime as here startTimeForVideo is Float64 value in seconds
  //get video's time scale as CMTime has it.
  int32_t timeScale = self.queuePlayer.currentItem.asset.duration.timescale
  CMTime seektime=CMTimeMakeWithSeconds(startTimeForVideo, timeScale);
  //use this cmtime for seekToTime.
  [self.queuePlayer seekToTime:seektime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
}
............

编辑 :这里是 kCMTimeZero 中的 tolerance field for exact location 方法中的 seekToTime: toleranceBefore: toleranceAfter:

关于iphone - AVPlayer 设置初始播放时间 iOS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16118374/

10-13 03:54