如何检查AVCaptureDeviceFormat是否支持慢动作录制?

时间:2017-06-28 15:05:17

标签: ios objective-c avcapturesession avcapturedevice

我正在四处寻找慢动作视频录制。我发现我们可以通过配置AVCaptureDevice's activeFormat属性来实现。

我有能够获得最高帧速率的代码。但是,如果我想修复分辨率,那么慢动作会发生但只能超过一定的分辨率。我不想要低分辨率的慢动作视频。

我在5s上进行了测试,它给出了以下最高帧速率:

Format: <AVCaptureDeviceFormat: 0x174006680 'vide'/'420v' 1280x 720, { 3-120 fps}, fov:58.080, binned, supports vis, max zoom:52.00 (upscales @1.16), AF System:1, ISO:34.0-1088.0, SS:0.000012-0.333333>

Range: <AVFrameRateRange: 0x17400a5a0 3 - 120>

问题1:如何检查当前设备是否支持慢动作录制?

问题2:如果我想将1280x720作为我的阈值怎么办?因此,如果将来苹果制造出支持相同3-120 fps但分辨率较低的设备?我不希望我的视频质量受损。

问题3:设置此activeFormat属性后,如何回滚到默认帧速率?

以下是代码:

- (void)configureCameraForHighestFrameRate:(AVCaptureDevice *)device
{
    AVCaptureDeviceFormat *bestFormat = nil;
    AVFrameRateRange *bestFrameRateRange = nil;
    for ( AVCaptureDeviceFormat *format in [device formats] ) {
        for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
            if ( range.maxFrameRate > bestFrameRateRange.maxFrameRate ) {
                bestFormat = format;
                bestFrameRateRange = range;
            }
        }
    }
    if ( bestFormat ) {
        if ( [device lockForConfiguration:NULL] == YES ) {
            device.activeFormat = bestFormat;
            device.activeVideoMinFrameDuration = bestFrameRateRange.minFrameDuration;
            device.activeVideoMaxFrameDuration = bestFrameRateRange.minFrameDuration;
            [device unlockForConfiguration];
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您将获得最低120fps的优质慢动作视频。 所以您可以通过

进行检查
device.activeVideoMaxFrameDuration.timescale >= 120

注意:在手动替换值之前检查它。