我在会话期间在ARKit中创建视频。当我按下录制按钮时,相机会冻结。我在didUpdateFrame委托中编写了导致问题的代码。在那里我保存了一个数组中的scene.snapshot。此外,当我从这些图像创建视频时,应用程序在调试器中崩溃并显示以下消息: 来自调试器的消息:由于内存问题而终止
-(void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame
{
if (_recordButton.state == UIControlStateSelected)
{
currentState = Recording;
[self saveImage];
}
else if (previousState == Recording)
{
NSLog(@"Stop recording");
currentState = NotRecording;
recordTime = NULL;
self.nextButton.enabled=YES;
}
//update recording state per frame update
previousState = currentState;
}
-(void)saveImage
{
UIImage *image = self.sceneView.snapshot;
[self.bufferArray addObject:image];
image = nil;
}
答案 0 :(得分:2)
不要使用ARSCNView.snapshot来实现ARSessionDelegate.didUpdateFrame。我有同样的问题,解决方案是不实现ARSessionDelegate.didUpdateFrame。我已经将CADisplayLink与ARSCNView.snapshot一起使用,效果很好。 我也尝试使用ARFrame.capturedImage,但它根本不包含AR对象。 ARSCNView.snapshot包含它们。