在资产加载完成后立即在AVPlayer中寻找某个位置

这工作:我有一个AVPlayer播放video后加载。 这工作正常。

这不

我不想从一开始就开始播放video,而是想在一个特定的位置上播放。 所以我等到资产已经准备好使用KVO播放了:

 BOOL isReadyToSeek = (self.playerItem.status == AVPlayerStatusReadyToPlay) 

然后寻求特定的时间

 [playerItem seekToTime:timeInTheMiddleOfTheVideo completionHandler:myHandler]; 

但是玩家总是从最初的video开始的video开始。

更新我试了一下dispatch_after几秒钟,但这也不起作用。 它播放后,但从来没有最初。

当我观察self.player.currentItem.duration我总是得到0作为valuetimescale

几件事可能会帮助你:

  1. 当检查玩家是否准备好玩,我检查玩家本身和玩家的当前项目。

     if(self.player.status == AVPlayerStatusReadyToPlay && self.player.currentItem.status == AVPlayerItemStatusReadyToPlay) { [self.player play]; } 
  2. 如果你想要例如15秒,可能会从video的开头开始,而如果这是最近的关键帧的位置。 要强制玩家寻找确切的位置(注意:这将需要几秒钟的时间),请执行以下操作:

     Float64 seconds = 500.0f; CMTime targetTime = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC); [self.player seekToTime:targetTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 

    或者,通过指定其中一个参数为infinity,您可以在指定点之前/之后显式地查找关键帧:

     [self.player seekToTime:targetTime toleranceBefore:kCMTimePositiveInfinity toleranceAfter:kCMTimeZero];