这很奇怪,超出了我的范围。如果我从 Apple 获取 AVCAM 示例并将其粘贴到我的应用程序(以及所有文件、声明等)上,我可以很好地使用相机。该应用程序捕获静止图像、视频、保存、自动对焦等。一切都很好,但有一件事,预览层(查看相机指向的内容)在加载并保持冻结时立即冻结在第一帧。这是来自 Apple 的代码,它进入了我的主控制器的 viewDidLoad:
if ([self captureManager] == nil) {
AVCamCaptureManager *manager = [[AVCamCaptureManager alloc] init];
[self setCaptureManager:manager];
[manager release];
[[self captureManager] setDelegate:self];
if ([[self captureManager] setupSession]) {
// Create video preview layer and add it to the UI
AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[[self captureManager] session]];
UIView *view = [self videoPreviewView];
CALayer *viewLayer = [view layer];
[viewLayer setMasksToBounds:YES];
CGRect bounds = [view bounds];
[newCaptureVideoPreviewLayer setFrame:bounds];
if ([newCaptureVideoPreviewLayer isOrientationSupported]) {
[newCaptureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait];
}
[newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];
[self setCaptureVideoPreviewLayer:newCaptureVideoPreviewLayer];
[newCaptureVideoPreviewLayer release];
// Start the session. This is done asychronously since
// -startRunning doesn't return until the session is running.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[[self captureManager] session] startRunning]; });
}
}
现在得到这个:相反,我决定将我的代码粘贴到 Apple 的 AVCAM 中,而不是将 Apple 的代码粘贴到我的应用程序中,看看这是否可行。在移动大量文件并基本上将 AVCAM 变成我的实验应用程序后,一切正常。两个项目(1-Apple 的 AVCAM 和我添加的代码和 2-我的 AVCAM 添加代码的原始项目)具有完全相同的文件和完全相同的代码。可不是闹着玩的。两个项目的类头文件和实现文件是相同的。但是,在我的原始项目中,预览层冻结并保持冻结状态。但在 AVCAM 原始项目上,预览层有效。所以我正在检查框架、构建和链接选项、SDK 版本等......我怀疑这是某个地方的项目设置,但我无法弄清楚。我真的不
有人遇到过这个吗?预览层在视图加载后立即冻结在第一帧。
有什么线索吗?(顺便说一句,我在 SDK 5.1,armv7,在设备上运行)。
提前致谢!!