Ich muss zu bestimmten Zeitpunkt in Audiofile springen, direkt nachdem es zu spielen beginnt. So verwende ich seekToTime Methode mit Abschluss-HandlerAVPlayer suchen, nachdem es zu spielen beginnt
avPlayer.play()
...
avPlayer?.seekToTime(jumpTime, completionHandler: { isComplete in
if isComplete {
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds((self.avPlayer!.currentItem?.currentTime())!)
}
})
Das Problem ist, dass es an der Zeit Datei aus dem Internet starten muss spielen. Und aus irgendeinem Grund stürzt die Version von seekToTime mit dem Vervollständigungshandler die App ab, weil sie aufgerufen wird, bevor der avPlayer gestartet wurde. Die Version ohne Abschluss-Handler funktioniert einwandfrei.
Fehler:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'AVPlayerItem cannot service a seek request with a completion handler until its status is AVPlayerItemStatusReadyToPlay.'
Gibt es eine Möglichkeit, einen Rückruf mit avPlayer.play()
zu benutzen?
Es hat nicht genau so funktioniert, aber ich habe es funktioniert. Es hat nicht angefangen zu spielen. Also habe ich die seekToTime-Version ohne Completion-Handler verwendet und den Code von dort in handleCallback() platziert – ttrs
Oh ja, macht Sinn. Vergessen Sie nicht, den Beobachter zu entfernen, indem Sie 'avPlayer? .removeTimeObserver (observer)' aufrufen, wenn Sie ihn nicht mehr brauchen :) – fiks