ios – AVPlayer在它开始播放后立即寻求

我需要在它开始播放后立即跳到audiofile的特定时间.所以我使用seekToTime方法和完成处理程序

avPlayer.play()

avPlayer?.seekToTime(jumpTime, completionHandler: { isComplete in
    if isComplete {
        MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds((self.avPlayer!.currentItem?.currentTime())!)
    }
})

问题是它需要时间从互联网开始播放文件.由于某种原因,带有完成处理程序的seekToTime版本会崩溃应用程序,因为它是在avPlayer开始播放之前调用的.没有完成处理程序的版本工作正常.

错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'AVPlayerItem cannot service a seek request with a completion handler until its status is AVPlayerItemStatusReadyToPlay.'

有没有办法在avPlayer.play()中使用回调?

最佳答案 是的,有一种方法.

你需要观察玩家的变化:

avPlayer?.addPeriodicTimeObserverForInterval(CMTime(value: 1, timescale: 3), queue: dispatch_get_main_queue()) { [weak self] time in
    self?.handleCallback(time)
}

然后你处理回调中的状态:

func handleCallback(time: CMTime) {    
   if avPlayer?.status == .ReadyToPlay {
       // place your seek logic here
   }
}
点赞