📖

【iOS】AVPlayerで連続で動画を再生する

2024/04/10に公開

複数のメディアアイテムの連続再生の実装

この記事では、Swiftを使ったiOS開発において、AVPlayerを利用して複数のメディアファイルを順番に自動再生する方法に焦点を当てます。具体的には、AVPlayerWrapperクラス内で実装された連続再生のメカニズムについて解説します。

連続再生の仕組み

連続再生の核となるのは、現在再生中のAVPlayerItemが終了した際に、自動的に次のAVPlayerItemへ切り替えることです。これを実現するために、AVPlayerWrapperクラスではNotificationCenterを使用して、メディアアイテムの再生終了イベントを監視しています。

再生終了イベントの監視

private func setupEndPlaybackObserver() {
    itemDidPlayToEndObserver = NotificationCenter.default.addObserver(
        forName: .AVPlayerItemDidPlayToEndTime,
        object: nil,
        queue: .main) { [weak self] _ in
            self?.loadNextItem()
        }
}

このコードスニペットでは、.AVPlayerItemDidPlayToEndTime通知を購読しています。この通知は、現在のAVPlayerItemの再生が終了した時に発火します。通知が発火すると、loadNextItemメソッドが呼び出され、次のアイテムのロードと再生が行われます。

次のアイテムへの自動切り替え

private func loadNextItem() {
    if !playerItems.isEmpty {
        let nextItem = playerItems.removeFirst()
        player.replaceCurrentItem(with: nextItem)
        player.play()
    } else {
        stop()
    }
}

loadNextItemメソッドでは、まずplayerItems配列が空でないかを確認します。空でなければ、配列から次のAVPlayerItemを取り出し、AVPlayerの現在のアイテムをこれに置き換え、再生を開始します。すべてのアイテムが再生された後、配列が空になると、stopメソッドが呼び出され、再生が停止します。

こちらのサンプルを参考にしてみてください
https://github.com/entaku0818/AudioMaster

Discussion