テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

【iOS】アプリ内で動画を再生する方法(Swift)

iOSで動画再生する方法に関するメモ。

以前確かやったことはありますが、久しぶりにやったら意外と時間がかかったので今後のためにメモ。


iOS】アプリ内で動画を再生する方法(Swift)

今回はアプリ内に再生する動画を同梱させてそれを再生させます。
なのでまずは、再生する動画をプロジェクトに追加します。

【iOS】アプリ内で動画を再生する方法(Swift)

今回はmp4ファイルを再生。


アプリ内で動画を再生するプログラムは下記です。

import UIKit
import MediaPlayer
import AVKit

class MoviePlayViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setVideoView()
        // Do any additional setup after loading the view.
    }
    
    func setVideoView(){
        //動画ファイルのURLを取得
        let path = Bundle.main.path(forResource: "anime", ofType: "mp4")
        let url = URL.init(fileURLWithPath: path as! String)
        let player:AVPlayer = AVPlayer.init(url: url)
        var controller:AVPlayerViewController = AVPlayerViewController.init()
        controller.player = player
        controller.view.frame = CGRect(x:0, y:0, width:self.view.bounds.size.width,height:self.view.bounds.size.height)
        self.addChild(controller)
        self.view.addSubview(controller.view)
        NotificationCenter.default.addObserver(self, selector:#selector(MoviePlayViewController.didPlayToEndTime), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
        player.play()
    }
    
    @objc func didPlayToEndTime () {
        print("finish!!")
        self.dismiss(animated: false, completion: nil)
    }


}

上記の場合、ViewControllerに遷移したタイミングでanime.mp4という動画ファイルをアプリ内で再生します。
(動画Viewのサイズは全画面)
動画再生が完了したタイミングでViewControllerを閉じるために「NotificationCenter」で「AVPlayerItemDidPlayToEndTime」を検知してます。(ViewControllerをモーダルで開く前提)

ちなみに、動画再生時の再生・停止ボタンなどのコントローラーを非表示にしたい場合は「AVPlayer」に「showsPlaybackControls = false」
を設定すればコントローラーが表示されなくなります。



参考:
developer.apple.com
developer.apple.com
developer.apple.com
developer.apple.com


【追記】アプリ内で動画を再生する方法のAndroid

Androidアプリで動画を再生する方法も書きました↓
develop.hateblo.jp