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

在iOS中以每秒25帧的速度录制视频,ios,camera,avfoundation,recording,avassetwriter,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);

我正在做一个定制相机,以全高清或高清质量拍摄。问题是,在我使用以下代码将相机设置为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];
}
-(void)设置帧率:(AVCaptureDevice*)摄像机{
n错误*错误;
如果(![camera lockForConfiguration:&错误]){
NSLog(@“无法锁定设备%@以进行配置:%@”,摄像头,错误);
返回;
}
AVCaptureDeviceFormat*格式=camera.activeFormat;
双ε=0.00000001;
int desiredFrameRate=25;
用于(格式为AVFrameRateRange*范围。videoSupportedFrameRateRanges){
if(range.minFrameRate=(desiredFrameRate-ε)){
[camera setActiveVideoMaxFrameDuration:CMTimeMake(10,所需帧率*10)];
[camera setActiveVideoMinFrameDuration:CMTimeMake(10,所需帧率*10)];
打破
}
}
[摄像机解锁配置];
}
它改变了视频fps,但并不像我在方法中设置的那样精确到每秒25帧。它在每秒23.93到25.50帧之间波动。
有人知道原因吗?

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

我使用AVAssetWriter对象录制视频,如下面链接()中所示

但无论如何都不可能精确到每分钟25帧

将录制视频的对象更改为AVCaptureMovieFileOutput,这样设置和录制就非常简单了。结果其精度更高,在25~25.01之间