具有 SceneKit 和 AVDeviceCapture 背景的 AVCaptureVideoDataOutputSampleBufferDelegate
AVCaptureVideoDataOutputSampleBufferDelegate with SceneKit and AVDeviceCapture background
我正在尝试获取 CVPixelBuffer,同时使用相机视频作为 SceneKit 的背景。请注意我不能在我的项目中使用 ARKit,因为我需要前置+后置摄像头并且没有世界跟踪开销。甚至尝试最基本的例子:
let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
self.scnScene.background.contents = captureDevice
导致 iOS 11.2 出现以下错误:
[SceneKit] Error: Cannot get pixel buffer (CVPixelBufferRef)
只要弹出此错误,AVCaptureVideoDataOutputSampleBufferDelegate 就会停止调用。
因为我无法同时使用 AVCaptureDevice
作为 SceneKit 的背景并获取它的 CVPixelBuffer
,我的解决方案是将样本缓冲区渲染到 MTLTexture
然后应用它作为 SceneKit 的背景。以这里为起点:
https://developer.apple.com/documentation/arkit/displaying_an_ar_experience_with_metal
我正在尝试获取 CVPixelBuffer,同时使用相机视频作为 SceneKit 的背景。请注意我不能在我的项目中使用 ARKit,因为我需要前置+后置摄像头并且没有世界跟踪开销。甚至尝试最基本的例子:
let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
self.scnScene.background.contents = captureDevice
导致 iOS 11.2 出现以下错误:
[SceneKit] Error: Cannot get pixel buffer (CVPixelBufferRef)
只要弹出此错误,AVCaptureVideoDataOutputSampleBufferDelegate 就会停止调用。
因为我无法同时使用 AVCaptureDevice
作为 SceneKit 的背景并获取它的 CVPixelBuffer
,我的解决方案是将样本缓冲区渲染到 MTLTexture
然后应用它作为 SceneKit 的背景。以这里为起点:
https://developer.apple.com/documentation/arkit/displaying_an_ar_experience_with_metal