J'ai une vidéo que je souhaite télécharger à partir d'un serveur et la diffuser dans une vue fixe. J'ai défini une UIView dans mon storyboard avec des contraintes fixes, et voici ce que j'ai fait dans le code:
@IBOutlet weak var videoView: UIView!
var player: AVPlayer!
var avpController = AVPlayerViewController()
Et dans mon viewDidLoad
je l'ai fait:
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
Mon problème est que ma vidéo n'est pas avec la taille que j'ai définie sur videoView
et sur chaque appareil, ma vidéo est dans une taille différente. Dans certains appareils, la hauteur de la vidéo est supérieure à la hauteur que j'ai définie et elle recouvre les éléments que j'ai en dessous de videoView
. Comment lire correctement une vidéo dans une vue?
la seule façon d'ajouter une vidéo à une UIView avec des contraintes fixes dans le storyboard, était la suivante:
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)
J'espère que d'autres pourront l'utiliser! :)
Si vous souhaitez utiliser 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()
}
Pour 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()
Vous pouvez essayer d'utiliser AVPlayerLayer
dans un AVPlayer
.
let player = AVPlayer(url: video) // your video url
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = videoView.bounds
videoView.layer.addSublayer(playerLayer)
player.play()