AVPlayer busca justo después de que comience a jugar

Necesito saltar a un momento particular en el audiofile justo después de que comience a jugar. Entonces utilizo el método seekToTime con el manejador de finalización

avPlayer.play() 

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

El problema es que necesita time para comenzar a reproducir files desde Internet. Y, por alguna razón, la versión de seekToTime con el manejador de finalización bloquea la aplicación, ya que se invoca antes de que avPlayer comience a jugar. La versión sin controller de finalización funciona bien.

Error:

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

¿Hay alguna forma de utilizar una callback con avPlayer.play() ?

Sí, hay una manera.

Debes observar los cambios en el jugador:

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

Y luego manejas el estado en la callback:

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