我们如何更改现有视频的帧速率以及从iPhone捕获视频?
我们可以使用AVFoundation框架或任何第三方库实现它吗?
答案 0 :(得分:0)
选择自定义帧速率的代码如下 - 添加了对Apple RosyWriter的检查,以验证当前格式是否支持选择的FPS
- (void)configureCamera:(AVCaptureDevice *)videoDevice withFrameRate:(int)desiredFrameRate
{
BOOL isFPSSupported = NO;
AVCaptureDeviceFormat *currentFormat = [videoDevice activeFormat];
for ( AVFrameRateRange *range in currentFormat.videoSupportedFrameRateRanges ) {
if ( range.maxFrameRate >= desiredFrameRate && range.minFrameRate <= desiredFrameRate ) {
isFPSSupported = YES;
break;
}
}
if( isFPSSupported ) {
if ( [videoDevice lockForConfiguration:NULL] ) {
videoDevice.activeVideoMaxFrameDuration = CMTimeMake( 1, desiredFrameRate );
videoDevice.activeVideoMinFrameDuration = CMTimeMake( 1, desiredFrameRate );
[videoDevice unlockForConfiguration];
}
}
}
如果当前格式(activeFormat
)不支持您选择的FPS,请使用以下代码更改activeFormat
,然后选择FPS。需要获得符合您需求的格式尺寸。
- (void)configureCamera:(AVCaptureDevice *)device withFrameRate:(int)desiredFrameRate
{
AVCaptureDeviceFormat *desiredFormat = nil;
for ( AVCaptureDeviceFormat *format in [device formats] ) {
for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
if ( range.maxFrameRate >= desiredFrameRate && range.minFrameRate <= desiredFrameRate ) {
desiredFormat = format;
goto desiredFormatFound;
}
}
}
desiredFormatFound:
if ( desiredFormat ) {
if ( [device lockForConfiguration:NULL] == YES ) {
device.activeFormat = desiredFormat ;
device.activeVideoMinFrameDuration = CMTimeMake ( 1, desiredFrameRate );
device.activeVideoMaxFrameDuration = CMTimeMake ( 1, desiredFrameRate );
[device unlockForConfiguration];
}
}
}
注意:不建议使用AVCaptureConnection
videoMinFrameDuration
来设置FPS。