【发布时间】:2017-06-28 15:05:16
【问题描述】:
我正在环顾四周以实现慢动作视频录制。我发现我们可以通过配置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];
}
}
}
【问题讨论】:
标签: ios objective-c avcapturesession avcapturedevice