防止内存泄漏,使用视频(AVPlayer)的高内存使用率?



我做了一个应用程序,其中有一个视图控制器,其中包含一个视图和一些按钮。在视图上,我展示了一个 2 秒长的视频,它连续重复。

我使用仪器来检查我的内存使用情况。它向我展示了我的应用程序的内存使用量在视频所在的视图控制器上不断增加。30 秒后,我的应用程序将获得高达 1GB 的内存使用量。

在代码中,我创建了一个弱变量,它破坏了保留周期,因此当我从显示视频的视图控制器转到另一个视图控制器时,我的内存使用量就会下降。

但是:我的目的是每次视频开始重复时都会降低内存使用量,或者我应该考虑其他事情吗?

提前谢谢你!

backView 是我用于显示视频的视图。

//     Set up the video player.
var startVideo = true
private func playVideo(exercise : String, type : String) {
guard let path = Bundle.main.path(forResource: exercise, ofType: type) else {
debugPrint("video.mp4 not found")
return
}
weak var player = AVPlayer(url: URL(fileURLWithPath: path))
let playerController = AVPlayerViewController()
playerController.player = player
let playerLayerAV = AVPlayerLayer(player: player)
//now we set the size of frame to be like the view ("backview")
playerLayerAV.frame = backView.bounds
// the backview is the view i'm using it to insert a video
backView.layer.addSublayer(playerLayerAV)
player!.play()
if startVideo == true {
player!.play()
}else if startVideo == false {
player?.pause()
}
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player!.currentItem, queue: .main) { _ in
player!.seek(to: kCMTimeZero)
player!.play()
}
}

尝试以下操作以连续循环播放视频

let playerItem = AVPlayerItem(url: selectedItem)
let player = AVQueuePlayer(playerItem: playerItem)
let playerLooper = AVPlayerLooper(player: player, templateItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
player.play()

最新更新