Ich habe eine Reihe von Objekten. Jedes Objekt hat eine Eigenschafts-URL. Mit dieser URL spiele ich Audio unter .AVPlayer spielen kontinuierlich
func playAudio(url: URL)
{
let player = AVPlayer(url: url)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true)
{
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
}
catch _ as NSError {
}
playerViewController.player!.play()
}
NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
}
Ich möchte die Audios aller Objekte kontinuierlich wiedergeben. Für die ich
NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
In CourseDetailViewController.moviePlayBackDidFinish
stelle ich wieder playaudio nenne. Ich habe dann Spieler als globale Variable genommen, so dass es nicht wieder initialisiert wird. Aber es gibt keine Überlastung von , wo wir die bereits vorhandene URL liefern können. Und wenn let player = AVPlayer(url: url)
für das nächste Audio tun, wird es nicht wiedergegeben, da die vorherige AVPlayer-Instanz im Vordergrund ist. Das ist die Herausforderung, der ich mich gegenüberstellen muss, wenn ich ein kontinuierliches Audiosystem spiele. Ich würde mich freuen, wenn es einen besseren und sauberen Weg gibt, dies zu tun.
Sie müssen diese 'try'-Anweisungen nicht verschachteln. Sie können sie beide in einen "do" -Block stellen. – Fogmeister
Es gibt ein AVPlayerQueue-Objekt, das Sie brauchen werden. Google es. – Fogmeister
@ Fogmeister: Zustimmen. Der Code wurde geändert. Vielen Dank. – Nitish