iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

SwiftでAVPlayerの動画再生終了を検出する方法|NotificationCenterを使った実装手順

Swiftで動画の再生が終了したタイミングを検出するには、まず動画プレイヤーを作成し、その後通知(Notification)を利用して動画の再生停止を検知します。本記事では、Swiftのサンプルコードとともに、具体的な実装手順をわかりやすく解説します。

1. プロジェクトの準備

まず新しいプロジェクトを作成し、拡張子が「mp4」の任意の動画ファイルをプロジェクトにドラッグ&ドロップで追加します。その際、必要に応じて「Copy items if needed」にチェックを入れ、プロジェクトのターゲットに追加しておきましょう。

2. 動画プレイヤーの作成と再生

次に、コードからAVPlayerを生成し、プロジェクト内の動画ファイルへのURLを作成して、動画を再生します。

var videoPlayer: AVPlayer!

続いて、viewDidAppearメソッドに以下のコードを記述します。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let filepath: String? = Bundle.main.path(forResource: "Introduction", ofType: "mp4")
    if let videoPath = filepath {
        let url = URL.init(fileURLWithPath: videoPath)
        videoPlayer = AVPlayer(url: url)
        let playerLayer = AVPlayerLayer(player: videoPlayer)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)
        videoPlayer.play()
    }
}

このコードでは、AVPlayerのインスタンスを生成し、AVPlayerLayerとしてビューコントローラーのデフォルトビューにサブレイヤーとして追加しています。これにより、画面いっぱいに動画が表示され、自動的に再生が始まります。

3. NotificationCenterで再生終了を検知する

次に、プレイヤーに対してオブザーバーを登録し、動画の再生が終了したことを検知したときに呼び出されるメソッドを作成します。以下のコードをviewDidAppearメソッドに追加してください。

NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name:
NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

ここで使用している「AVPlayerItemDidPlayToEndTime」は、動画アイテムの再生が最後まで到達したときに発行されるシステム通知です。この通知を受け取ることで、再生終了のタイミングを正確に把握できます。

videoDidEndメソッドの実装

次に、videoDidEndメソッドを実装します。このメソッド内では、動画の再生終了時に実行したい任意の処理を記述できます。今回は動作確認のため、動画が終了してNotificationCenterからこのメソッドが呼ばれたときに「video ended」とコンソールに出力するだけのシンプルな実装にしています。

@objc func videoDidEnd(notification: NSNotification) {
    print("video ended")
}

このコードを実行すると、次のような結果が得られます。

SwiftでAVPlayerの動画再生終了を検出する方法|NotificationCenterを使った実装手順

動画の再生が停止すると、コンソールに以下の出力が表示されます。

SwiftでAVPlayerの動画再生終了を検出する方法|NotificationCenterを使った実装手順

4. オブザーバーの解除でメモリを効率的に管理

上記のコードで目的の動作は実現できていますが、メモリを効率的に使用するためには、オブザーバーを適切に解除することも重要です。これは以下のコードで実現できます。

deinit {
    NotificationCenter.default.removeObserver(self)
}

deinitはオブジェクトが解放される際に呼ばれるメソッドなので、ここでオブザーバーを解除しておけば、不要になった通知の監視が残らず、メモリリークを防ぐことができます。

まとめ

SwiftでAVPlayerの動画再生終了を検出するには、NotificationCenterに「AVPlayerItemDidPlayToEndTime」通知のオブザーバーを登録するのが最もシンプルかつ確実な方法です。動画終了時に次の動画へ切り替える、画面遷移を行う、リプレイボタンを表示するといった応用にも簡単に展開できますので、ぜひ実際のアプリ開発に活かしてみてください。

  1. iPhone 8の新動画フォーマット「HEVC」の使い方と設定方法を徹底解説

    発売されたばかりのiPhone 8とiPhone 8 Plusには、初めて搭載された優れた機能が数多くあります。中でも特に注目されているのが、4K動画を毎秒60フレーム(fps)で撮影できる機能と、1080pで240fpsのスローモーション動画を撮影できる機能という2つの新しい動画フォーマットです。 従来のiPhoneでは、ウルトラHD(4K)モードでの撮影は低めのフレームレートに制限されていました。しかし技術の進歩により状況は一変し、現在ではウルトラHDでもより多くのフレームを記録できるようになっています。この2つの新しいフォーマットは高品質な動画を撮影できる一方で、従来のフォーマットと比

  2. 動画再生中にMicrosoft Edgeがクラッシュする問題の解決方法【Windows 11/10対応】

    Microsoftが開発した「Microsoft Edge」は、Windows OSの標準Webブラウザです。Internet Explorerの後継として登場したEdgeは、はるかに高速で、多彩なセキュリティ機能を搭載しています。アップデートを重ねるごとに、速度・パフォーマンス・先進的な機能が着実に進化し続けています。 しかし、完璧なブラウザは存在しません。YouTubeなどで動画を再生しようとするたびにEdgeが頻繁にクラッシュしてしまう――これは確かにストレスフルな問題です。ご安心ください、この記事でしっかり解決策をご紹介します。 本記事では、Windows 11/10で「動画再生時に