我的应用程序在iPhone 5S上崩溃,而不是在任何其他设备上,它指向startRecordingToOutputFileURL中引发的异常:recordingDelegate:
Date/Time: 2013-11-01 13:18:03.672 -0400
OS Version: iOS 7.0.3 (11B511)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x2f164e83 __exceptionPreprocess + 131
1 libobjc.A.dylib 0x394c56c7 objc_exception_throw + 38
2 AVFoundation 0x2e0679b9 -[AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] + 512
我没有iPhone 5S进行测试,也不想为此目的买一个。我检查了明显的错误,比如nil文件URL,nil委托,并且没有一个被击中。
我如何调试这个,任何想法?是否有可能进行远程测试并从beta测试仪的设备中提取日志?我检查过大多数日志提取应用程序无法在iOS 7上运行。
编辑:我强烈怀疑它与我设置AVCaptureDevice的方式有关。这是我的代码,如果我正确地做了,请指出。以下是设置设备输入的方法。
AVCaptureDeviceFormat *bestFormat = nil;
CMVideoDimensions bestDimensions = {0.f, 0.f};
CMVideoDimensions dimensions;
NSInteger width = [self videoTrackWidth];
NSInteger height = [self videoTrackHeight];
NSInteger fps = [[self currentFPSFromSettings] integerValue];
if (fps > 30) {
[self configureCameraForHighFrameRate:device]; //No crash if this path is executed
} else {
/* crashes only if this path is executed */
for ( AVCaptureDeviceFormat *format in [device formats] ) {
CMFormatDescriptionRef formatDesc = [format formatDescription];
dimensions = CMVideoFormatDescriptionGetDimensions(formatDesc);
if (dimensions.width >= width && dimensions.height >= height) {
for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
if (range.maxFrameRate >= fps) {
bestDimensions = dimensions;
bestFormat = format;
MPLog(@" -- Max FPS = %f", range.maxFrameRate);
break;
}
}
}
}
if (!bestFormat) {
bestFormat = [[device formats] lastObject];
}
if ( bestFormat ) {
if ( [device lockForConfiguration:NULL] == YES ) {
device.activeFormat = bestFormat;
MPLog(@"Device Max Zoom = %f", bestFormat.videoMaxZoomFactor);
self.maxZoomSupportedByDevice = bestFormat.videoMaxZoomFactor;
[device unlockForConfiguration];
}
}
}
答案 0 :(得分:0)
我有同样的问题。创建AVCaptureSession时,我的应用程序在iPhone 5s上崩溃。 在iTunes Connect中检查我的构建我发现它只在支持的体系结构下有armv7。 也许当我第一次创建存档时,我将我的iPhone 5c连接到Xcode,但是在没有连接手机的情况下重新创建它会创建一个支持armv7和arm64的新版本。 现在相同的代码适用于iPhone 5s。
答案 1 :(得分:0)
最终发现手动配置AVCaptureSession的方法存在问题,如问题中的源代码所述。在代码中,我试图找到支持30 fps&的AVCaptureDeviceFormat。具有尽可能高的视觉尺寸。我假设任何格式支持30 fps的最高尺寸是1920x1080,但iPhone 5s是第一个支持全部800万像素样本缓冲区@ 30 fps的设备。并且AVCaptureMovieFileOutput无法使用8 MP样本缓冲区进行编码和崩溃!