#ios #video
#iOS #Видео
Вопрос:
Мне нужно уменьшить частоту кадров видеопотока, поступающего с камеры iPhone.
Это код, который я использую:
[...]
_captureSession = [[AVCaptureSession alloc] init];
if( [_captureSession canSetSessionPreset:AVCaptureSessionPreset640x480]) {
[_captureSession setSessionPreset:AVCaptureSessionPreset640x480];
} else {
NSLog(@"Could not initialize 640x480 video stream");
exit(EXIT_FAILURE);
}
AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
if ([videoCaptureDevice lockForConfiguration:amp;error]) {
AVCaptureDeviceFormat *format = [videoCaptureDevice activeFormat];
NSArray *supportedFPS = format.videoSupportedFrameRateRanges;
CMTime maxFrameDuration;
float maxSeconds = FLT_MIN;
for(AVFrameRateRange *fpsRange in supportedFPS) {
float currentSeconds = CMTimeGetSeconds(fpsRange.maxFrameDuration);
if(currentSeconds > maxSeconds) maxFrameDuration =fpsRange.maxFrameDuration;
NSLog(@"Supported range. Max frame rate: %f (min frame duration %f) -
Min frame rate: %f (max frame duration %f)",
fpsRange.maxFrameRate,
CMTimeGetSeconds(fpsRange.minFrameDuration),
fpsRange.minFrameRate,
CMTimeGetSeconds(fpsRange.maxFrameDuration));
} // for
NSLog(@"Setting min/max duration for frames to %f", CMTimeGetSeconds(maxFrameDuration));
[videoCaptureDevice setActiveVideoMaxFrameDuration:maxFrameDuration];
[videoCaptureDevice setActiveVideoMinFrameDuration:maxFrameDuration];
[...]
} // lockForConf
Идея состоит в том, чтобы
- получите текущий формат, после того как установите размер видеопотока;
- получите массив с доступными диапазонами частоты кадров
- найдите тот, у которого самая длинная длительность кадра
- установите минимальную/ максимальную длительность кадра устройства захвата на максимальное значение.
Единственным сообщением журнала, напечатанным в цикле for, является:
Supported range. Max frame rate: 30.000000 (min frame duration 0.033333) -
Min frame rate: 2.000000 (max frame duration 0.500000)
Несмотря на то, что кажется возможным установить частоту кадров в секунду равной 2 кадрам в секунду, камера по-прежнему выдает много кадров в секунду. Я не знаю, как получить частоту кадров в секунду видеопотока, но камера определенно не обслуживает только 2 в секунду.
У вас есть какие-нибудь предложения?
Комментарии:
1. Удалось ли вам решить вашу проблему?
2. Я не смог это решить.
Ответ №1:
Вы можете использовать activeVideoMinFrameDuration и activeVideoMaxFrameDuration ACCaptureDevice для обновления кадров сеанса.
Нравится:
[captureDevice setActiveVideoMaxFrameDuration:CMTimeMake(2, 1)];
[captureDevice setActiveVideoMinFrameDuration:CMTimeMake(2, 1)];
Вы также можете обратиться: https://developer.apple.com/documentation/avfoundation/avcapturedevice/1389290-activevideominframeduration