CADisplayLink тормозит при сборке из архива

У меня есть проект, который воспроизводит воспроизведение видео и применяет к нему CIFilters. Я знаю, что могу использовать композицию видео для получения видео с фильтрами, но проблема в том, что фильтры должны быть перелистываемыми (с предварительным просмотром следующего фильтра, поэтому мы используем маску для 1-го просмотра изображения и фильтруем 2-й с помощью следующего фильтра).

func displayLinkDidRefresh(link: CADisplayLink){
    
    let itemTime = videoOutput.itemTime(forHostTime: CACurrentMediaTime())
            
    if videoOutput.hasNewPixelBuffer(forItemTime: itemTime) {
        
        if let pixelBuffer = videoOutput.copyPixelBuffer(forItemTime: itemTime, itemTimeForDisplay: nil){
            unfilteredImage = CIImage(cvImageBuffer: pixelBuffer)
            displayFilteredImage(unfilteredImage: unfilteredImage)
        }
    }
}

Это код, используемый для создания экземпляра AVPlayer и CADisplayLink:

    player = AVPlayer(playerItem: item)
    player.isMuted = true
   
    displayLink = CADisplayLink(target: self, selector: #selector(displayLinkDidRefresh(link:)))
    displayLink!.preferredFramesPerSecond = 24
    displayLink!.add(to: RunLoop.main, forMode: RunLoopMode.commonModes)
    
    NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemDidReachEnd(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.player.currentItem)

При запуске из отладчика у меня нет заикания (или оно на минимальном уровне), но при запуске сборки из архива оно сильно заикается. Что я делаю для тестирования, так это удаляю приложение с телефона, а затем устанавливаю его на телефон и тестирую, поскольку указанные сборки отладки в порядке, но архив создает проблемы. Любые данные по этому поводу?

РЕДАКТИРОВАТЬ 1:

Удалось заставить его работать лучше, но все еще заикался после прикрепления видеокомпозиции к элементу проигрывателя, когда элемент и статус проигрывателя готовы к игре.


person Baki    schedule 22.09.2017    source источник


Ответы (1)


Через некоторое время, поиграв с этим, я обнаружил проблему, с кодом все в порядке. Проблема заключалась в том, что у нас есть аналитика Appsee внутри приложения, и нам нужно было приостановить ее на этих экранах, чтобы они отображались правильно. Причина, по которой мы не столкнулись с этими проблемами в режиме отладки, заключалась в условии AppDelegate if, которое не позволяло Appsee работать в среде отладки.

person Baki    schedule 25.09.2017