1

我有以下代码在 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];
}

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

4

1 回答 1

1

在 iOS 7 及更高版本中,解决方案是使用新的AVCaptureDevice activeFormatAPI 并将会话预设设置为AVCaptureSessionPresetInputPriority. 当您更改活动格式时,您必须像这样包装您startRunninglockForConfiguration

if ([_videoCaptureDevice lockForConfiguration:nil])
{
    _videoCaptureDevice.activeFormat = format
    [_captureSession startRunning];
    [_videoCaptureDevice unlockForConfiguration];
}
于 2013-10-31T22:21:08.383 回答