我正在编写一个应用程序,需要根据用户的选择显示不同的视频 . 当用户选择视频时,将调用playVideo功能 . 视频播放完毕后,视频将再次隐藏 .

我的代码如下:

var player: AVPlayer?


  func playVideo(String: videoFile) {
    self.videoView.isHidden = false
    let videoURL: NSURL = Bundle.main.url(forResource: videoFile, withExtension: "mp4")! as NSURL
    self.player = AVPlayer(url: videoURL as URL)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.videoView.frame
    self.videoView.layer.addSublayer(playerLayer)
    let duration : Int64 = 0
    let preferredTimeScale : Int32 = 1
    let seekTime : CMTime = CMTimeMake(duration, preferredTimeScale)
    self.player?.seek(to: seekTime)
    self.player?.play()

    NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
  }

@objc func playerItemDidReachEnd()
  {
    self.player?.pause()
    self.videoView.isHidden = true
    NotificationCenter.default.removeObserver(self)
  }

但是,根据上面的代码,我有几个问题:

  • 如何正常删除/取消分配播放器?如果只使用我当前的代码,它会占用大量内存吗?

  • 每当用户按下按钮时,将调用playVideo功能,并创建并播放相应的播放器 . 这是正确的方法吗?有没有其他方法或更有效的方式或优雅的方式这样做?

  • 我确实尝试通过以下方法替换播放器创建时的代码,但无法播放视频 .

让playerItem:AVPlayerItem = AVPlayerItem(url:videoURL as URL)self.player? = AVPlayer(playerItem:playerItem)

谢谢