Мне нужно перейти к определенному времени в аудиофайле сразу после его начала. Поэтому я использую метод seekToTime с завершения обработчикаAVPlayer ищет сразу после начала игры
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()
?
Это не сработало так, но я заработал. Он не начал играть. Поэтому я использовал версию seekToTime без обработчика завершения и поместил код оттуда в handleCallback() – ttrs
О да, имеет смысл. Не забудьте удалить наблюдателя, вызвав «avPlayer ?.removeTimeObserver (observer)», когда вам это больше не нужно :) – fiks