【问题标题】:CADisplayLink stutters when built from archive从存档构建时 CADisplayLink 口吃
【发布时间】:2017-09-22 12:58:35
【问题描述】:

我有一个正在渲染视频播放并对其应用 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)

从调试器运行时,我没有遇到卡顿(或者处于最低级别),但是从存档运行构建时卡顿很多。我要测试的是从手机中删除应用程序,然后将其安装在手机上并进行测试,因为调试版本很好,但存档会产生问题。对此有何意见?

编辑 1:

设法让它更好地工作,但在项目和播放器状态为 readyToPlay 时将视频合成附加到播放器项目后仍然卡顿。

【问题讨论】:

    标签: ios swift swift3 avplayer cadisplaylink


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2021-07-19
      • 1970-01-01
      • 2011-11-05
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多