我有以下代码在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>
答案 0 :(得分:1)
在iOS 7及更高版本中,解决方案是使用新的AVCaptureDevice activeFormat
API并将会话预设设置为AVCaptureSessionPresetInputPriority
。当您更改活动格式时,您必须将startRunning
包裹在lockForConfiguration
中,如下所示:
if ([_videoCaptureDevice lockForConfiguration:nil])
{
_videoCaptureDevice.activeFormat = format
[_captureSession startRunning];
[_videoCaptureDevice unlockForConfiguration];
}