在iOS 7中运行捕获会话时无法设置会话预设

时间:2013-10-25 02:07:45

标签: ios objective-c

我有以下代码在iOS 7中不再有效,用于在捕获会话仍在运行时(但不捕获视频)更改捕获会话的sessionPreset。这适用于iOS 6.x,但在7日视频预览冻结。

我尝试删除开始/提交配置,以及锁定输入设备和解锁后。我也尝试在commitConfiguration之后再次调用beginSession,但这会导致设备开始捕获视频。

这是一个错误还是我做错了什么?

- (void)setVideoCaptureSessionPreset:(NSString *)videoCaptureSessionPreset
{
    if (_captureSession.sessionPreset == videoCaptureSessionPreset) return;

    if (![_captureSession canSetSessionPreset:videoCaptureSessionPreset])
    {
        TFLog(@"%s Device cannot set preset to: %@", __PRETTY_FUNCTION__, videoCaptureSessionPreset);
        return;
    }

    [_captureSession beginConfiguration];
    _captureSession.sessionPreset = videoCaptureSessionPreset;
    [_captureSession commitConfiguration];
}

编辑:这不仅会导致视频预览冻结,还会导致整个手机锁定(主屏幕上不再显示背景,应用无法重启,最终整个手机必须硬重置)。 / p>

1 个答案:

答案 0 :(得分:1)

在iOS 7及更高版本中,解决方案是使用新的AVCaptureDevice activeFormat API并将会话预设设置为AVCaptureSessionPresetInputPriority。当您更改活动格式时,您必须将startRunning包裹在lockForConfiguration中,如下所示:

if ([_videoCaptureDevice lockForConfiguration:nil])
{
    _videoCaptureDevice.activeFormat = format
    [_captureSession startRunning];
    [_videoCaptureDevice unlockForConfiguration];
}