私はオブジェクトの配列を持っています。各オブジェクトにはプロパティURLがあります。このURLを使用して私はAVPlayer
でオーディオを再生しています。AVPlayerは連続して再生します
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)
}
すべてのオブジェクトの音声を連続して再生したい。そのために私は、私は再びplayAudioを呼び出していますCourseDetailViewController.moviePlayBackDidFinish
で
NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
を設定しています。私はグローバル変数としてプレーヤを取得し、再び初期化されないようにしました。しかし、既に存在するAVPlayer
にURLを提供できるところで、AVPlayer
の過負荷はありません。そして、次のオーディオのためにlet player = AVPlayer(url: url)
を行うと、前のAVPlayerインスタンスがフォアグラウンドにあるため再生されません。 これは私が連続したオーディオを再生する際に直面している課題です。私はこれを行うためのより良い、きちんとした方法があれば感謝します。
これらの 'try'ステートメントをネストする必要はありません。それらを両方とも1つの 'do'ブロックに入れることができます。 – Fogmeister
私はあなたが必要と思うAVPlayerQueueオブジェクトがあります。それはGoogleです。 – Fogmeister
@Fogmeister:同意します。コードを変更しました。ありがとう。 – Nitish