Предотвратить утечку памяти, высокое использование памяти при использовании видео (AVPlayer)? - PullRequest
0 голосов
/ 11 октября 2018

Я сделал приложение, в котором есть View Controller, у которого есть представление и несколько кнопок в нем.На виде я показываю видео длиной 2 секунды, которое постоянно повторяется.

Я использовал инструменты, чтобы проверить использование памяти.Это показало мне, что использование моего приложения постоянно увеличивается на View Controller, где находится видео.Через 30 секунд мое приложение получает до 1 ГБ памяти.

В коде я сделал слабую переменную, которая прерывает цикл сохранения, поэтому, когда я перехожу из View Controller, который показывает видео на другой View Controller, использование памяти уменьшается.

НО: Моя цель - отказаться от использования памяти каждый раз, когда видео начинает повторяться, или есть что-то еще, что я должен рассмотреть, чтобы сделать?

Заранее спасибо!

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()
    }

}

1 Ответ

0 голосов
/ 11 октября 2018

Попробуйте следующее, чтобы постоянно зацикливать видео

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

player.play()
...