任意のサイズで動画を再生する

iosで動画の再生を行う方法は2種類用意されています。

1つ目はAVPlayerViewController()を使って全画面で動画の再生を行ってしまう方法で、

2つ目はAVPlayerを作成して再生する方法です、こちらを使う場合ViewにAVPlayerを内包することで任意の大きさで画像を再生することができます。

動画コンテンツの読み込み

アプリ内に動画Assetsを追加した場合Copy Bundle Resourcesに追加されておらず読み込みが行えない場合があるのでurlが取得できない場合はこちらを確認してみてください。

全画面再生

import AVKit

class ViewController: UIViewController {
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        //ローカルに存在する動画のURL取得
        let fileName = "mov"
        let fileExtension = "mp4"
        guard let url = Bundle.main.url(forResource: fileName, withExtension: fileExtension) else {
            print("Url is nil")
            return
        }
        
        let videoPlayer = AVPlayer(url: url)
        let playerController = AVPlayerViewController()
        playerController.player = videoPlayer
        self.present(playerController, animated: true, completion: {
            videoPlayer.play()
        })
    }
}

指定サイズでの再生

PlayerViewは公式サイト似合ったやつをそのまま持ってきました。

AVPlayerLayer – AVFoundation | Apple Developer Documentation

import AVKit

class PlayerView: UIView {
    
    // The player assigned to this view, if any.
    
    var player: AVPlayer? {
        get { return playerLayer.player }
        set { playerLayer.player = newValue }
    }
    
    // The layer used by the player.
    
    var playerLayer: AVPlayerLayer {
        return layer as! AVPlayerLayer
    }
    
    // Set the class of the layer for this view.
    override static var layerClass: AnyClass {
        return AVPlayerLayer.self
    }
}

class ViewController: UIViewController {
    @IBOutlet weak var playerView: PlayerView!
    var player = AVPlayer()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //ローカルに存在する動画のURL取得
        let fileName = "mov"
        let fileExtension = "mp4"
        guard let url = Bundle.main.url(forResource: fileName, withExtension: fileExtension) else {
            print("Url is nil")
            return
        }
        let item = AVPlayerItem(url: url)
        player = AVPlayer(playerItem: item)
        
        playerView.player = player
        player.play()
    }
}