Swift:AVPlayer释放内存/资源

时间:2017-02-09 13:36:55

标签: ios swift avplayer avplayeritem avplayerlayer

我正在编写一个需要根据用户选择显示不同视频的应用。当用户选择视频时,将调用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)
  }

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

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

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

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

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

  4. 谢谢

0 个答案:

没有答案