web-dev-qa-db-fra.com

comment lire une vidéo dans UIView swift?

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?

7
Azin Nilchi

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! :)

6
Azin Nilchi

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()
9
Jay

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()
4
user9749232