在资产加载完成后立即在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
作为value
和timescale
。
几件事可能会帮助你:
-
当检查玩家是否准备好玩,我检查玩家本身和玩家的当前项目。
if(self.player.status == AVPlayerStatusReadyToPlay && self.player.currentItem.status == AVPlayerItemStatusReadyToPlay) { [self.player play]; }
-
如果你想要例如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];