从存档构建时 CADisplayLink 断断续续
CADisplayLink stutters when built from archive
我有一个项目正在渲染视频播放并对其应用 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)
当从调试器 运行 时,我没有遇到卡顿(或者它处于最低水平),但是当 运行 从存档构建时,它非常卡顿。我要做的测试是从 phone 中删除应用程序,然后将其安装在 phone 上并进行测试,正如所说的调试版本很好,但存档会产生问题。对此有任何意见吗?
编辑 1:
设法让它更好地工作,但在项目和播放器状态为 readyToPlay 时将视频合成附加到播放器项目后仍然卡顿。
玩了一段时间后我发现了问题,代码没有任何问题。问题是我们在应用程序中有 Appsee 分析,我们需要在这些屏幕上暂停它以便它们正确呈现。我们在调试模式下没有遇到这些问题的原因是 AppDelegate if 条件阻止 Appsee 在调试环境中工作。
我有一个项目正在渲染视频播放并对其应用 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)
当从调试器 运行 时,我没有遇到卡顿(或者它处于最低水平),但是当 运行 从存档构建时,它非常卡顿。我要做的测试是从 phone 中删除应用程序,然后将其安装在 phone 上并进行测试,正如所说的调试版本很好,但存档会产生问题。对此有任何意见吗?
编辑 1:
设法让它更好地工作,但在项目和播放器状态为 readyToPlay 时将视频合成附加到播放器项目后仍然卡顿。
玩了一段时间后我发现了问题,代码没有任何问题。问题是我们在应用程序中有 Appsee 分析,我们需要在这些屏幕上暂停它以便它们正确呈现。我们在调试模式下没有遇到这些问题的原因是 AppDelegate if 条件阻止 Appsee 在调试环境中工作。