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