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时,将视频合成附加到播放器项目后仍然口吃。