我有渲染视频播放和应用CIFilters的项目。我知道我可以使用视频合成来获取带过滤器的视频,但问题是过滤器需要可以刷卡(预览下一个过滤器,因此我们使用第一个图像视图的掩码并使用下一个过滤器过滤第二个)。
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)
从调试器运行时,我没有遇到任何口吃(或者它处于最低级别),但是当从归档运行构建时,它很多都是口吃。我要测试的是从手机中删除应用程序,然后将其安装在手机上并进行测试,因为所述调试版本很好,但存档会产生问题。有什么输入?
管理以使其更好地工作,但在项目和玩家状态为readyToPlay时将视频合成附加到玩家项目后仍然是口吃。
答案 0 :(得分:0)
经过一段时间玩这个我发现了问题,代码没有任何问题。问题是我们在app中有Appsee分析,我们需要在这些屏幕上暂停它以便它们正确呈现。我们在调试模式下没有遇到这些问题的原因是AppDelegate if条件阻止了Appsee在调试环境中工作。