Search code examples
iosswift3avfoundationavkit

Create VideoPlayer With Custom Size in Swift 3


i want to show .mov file in custom size. i have an xib file for my controller.

enter image description here

thats top view is subclass of UIView. i want to show video in this view. there is my code for create video view. but there is problem in size of my video player. how can solve this problem.

there is my code :

 private func playVideo() {
    guard let path = Bundle.main.path(forResource: "video_2017-06-30_15-49-05", ofType:"mov") else {
      debugPrint("video.m4v not found")
      return
    }
    let player = AVPlayer(url: URL(fileURLWithPath: path))
    let playerController = AVPlayerViewController()
    playerController.player = player

    let avPlayerLayer = AVPlayerLayer(player: player)
    avPlayerLayer.frame = videoView.layer.frame
    videoView.layer.insertSublayer(avPlayerLayer, at: 0)


  }

Solution

  • If you want a native player to be added to your view with the seek bar and play pause button then use following code:

    private func playVideo() {
            guard let path = Bundle.main.path(forResource: "SampleVideo", ofType:"mp4") else {
                debugPrint("video.m4v not found")
                return
            }
            let player = AVPlayer(url: URL(fileURLWithPath: path))
            let playerController = AVPlayerViewController()
            playerController.player = player
            playerController.view.frame = videoView.bounds
            videoView.addSubview(playerController.view)
            player.play()
        }
    

    and if you want just the video to be played in your view with AVPlayerLayer then you can do something like below:

        var player : AVPlayer!
        var avPlayerLayer : AVPlayerLayer!
        @IBOutlet weak var videoView: UIView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
            guard let path = Bundle.main.path(forResource: "SampleVideo", ofType:"mp4") else {
                debugPrint("video.m4v not found")
                return
            }
            player = AVPlayer(url: URL(fileURLWithPath: path))
            avPlayerLayer = AVPlayerLayer(player: player)
            avPlayerLayer.videoGravity = AVLayerVideoGravity.resize
    
            videoView.layer.addSublayer(avPlayerLayer)
            playVideo()
    
    
        }
    
        override func viewDidLayoutSubviews() {
    
            avPlayerLayer.frame = videoView.layer.bounds
        }
    
        private func playVideo() {
            player.play()
    
        }
    

    This worked perfect for me hope it works for you :)