CADisplayLink从档案中构建时造成口吃

问题描述:

我有一个渲染视频播放项目,并将CIFilters应用到它。我知道我可以使用视频合成来获取带有过滤器的视频,但问题在于过滤器需要轻扫(预览下一个过滤器,因此我们使用第一个图像视图的蒙版并使用下一个过滤器过滤第二个过滤器)。CADisplayLink从档案中构建时造成口吃

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:

设法得到它工作得更好,但附加视频组合到播放器项目时项目和球员状态readyToPlay后仍然口吃。

经过一段时间玩这个我发现这个问题,没有什么是错的代码。问题是我们在应用程序内部有Appsee分析,我们需要在这些屏幕上暂停它,以便它们正确呈现。在调试模式下没有遇到这些问题的原因是AppDelegate,如果条件阻止Appsee在调试环境中工作。