在iOS中以每秒25帧的速度录制视频

时间:2017-12-05 10:06:15

标签: ios camera avfoundation recording avassetwriter

我正在制作定制相机,以全高清或高清质量拍摄。问题是我使用以下代码将相机设置为25帧后:

- (void) setFrameRate:(AVCaptureDevice*) camera {
    NSError *error;
    if (![camera lockForConfiguration:&error]) {
        NSLog(@"Could not lock device %@ for configuration: %@", camera, error);
        return;
    }
    AVCaptureDeviceFormat *format = camera.activeFormat;
    double epsilon = 0.00000001;
    int desiredFrameRate = 25;
    for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) {
        if (range.minFrameRate <= (desiredFrameRate + epsilon) &&
            range.maxFrameRate >= (desiredFrameRate - epsilon)) {
            [camera setActiveVideoMaxFrameDuration:CMTimeMake(10, desiredFrameRate*10)];
            [camera setActiveVideoMinFrameDuration:CMTimeMake(10, desiredFrameRate*10)];
            break;
        }
    }
    [camera unlockForConfiguration];
}

它改变了视频fps,但不像我在方法中设置的那样改变到每秒25帧。它在每秒23.93和25.50帧之间波动。 谁知道为什么?

1 个答案:

答案 0 :(得分:1)

经过多次尝试和调试后,我发现帧速率不完全是25帧的问题与录制方法有关,而不是与设备设置有关。

我正在使用AVAssetWriter对象来记录视频,如以下链接(https://reformatcode.com/code/ios/ios-8-film-from-both-back-and-front-camera)中显示的示例。

但绝不可能获得正好25 fps。

更改AVCaptureMovieFileOutput录制视频的对象,从设置和录制开始就很容易。结果更准确,在25到25.01之间。