how to play a video in UIView swift?
21,419
Solution 1
the only way to add a video to a UIView with fixed constraints in storyboard, was this :
let url = URL(string:myURL)
player = AVPlayer(url: url!)
avpController.player = player
avpController.view.frame.size.height = videoView.frame.size.height
avpController.view.frame.size.width = videoView.frame.size.width
self.videoView.addSubview(avpController.view)
I hope other can use this! :)
Solution 2
If you want to use AVPlayerViewController:
let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
For AVPlayer:
let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer)
player.play()
Solution 3
This is how you can add and remove player in uiview.
var player: AVPlayer?
var playerController: AVPlayerViewController?
func removePlayer() {
player?.pause()
player = nil
playerController?.player?.pause()
playerController?.player = nil
if let view = playerController?.view {
videoView.willRemoveSubview(view)
}
playerController?.view.removeFromSuperview()
playerController = nil
}
func setVideo(url: URL) {
removePlayer()
player = AVPlayer(url: url)
playerController = AVPlayerViewController()
playerController?.player = player
self.videoView.addSubview((playerController?.view)!)
playerController?.view.frame = CGRect(x: 0, y: 0, width: self.videoView.bounds.width, height: self.videoView.bounds.height)
// player.play()
}
Comments
-
Azin Nilchi almost 2 years
I have a video which I want to download from a server and stream it in a fixed view. I've set a UIView in my storyboard with fixed constraints, and here is what I've done in code:
@IBOutlet weak var videoView: UIView! var player: AVPlayer! var avpController = AVPlayerViewController()
And in my
viewDidLoad
I've done this:let url = URL(string:myURL) player = AVPlayer(url: url!) avpController.player = player avpController.videoGravity = AVLayerVideoGravity.resizeAspect.rawValue self.addChildViewController(avpController) avpController.view.frame = videoView.frame self.containerView.addSubview(avpController.view) videoView.layer.masksToBounds = true
My problem is my video is not with the size that I've set to
videoView
and in every device my video is in a different size. In some devices, the video height is larger than the height that I've set and it overlays the items that I have belowvideoView
. How can I play video in a view in a right way? -
Azin Nilchi almost 6 yearsI think you didn't get my question ! the first way, is just presenting the video and it not in a frame and opens another view!, and the second way, is not working properly! test it in different device!
-
Pointblaster about 5 yearsThe AVPlayer part worked flawlessly for me, just had to change the frame to where i wanted it. Thanks!