如何在mac上使用AVFoundation和AVCaptureVideoDataOutput时使用自定义视频分辨率

时间:2013-04-18 03:14:56

标签: size avfoundation frame capture

我需要处理捕获的视频帧的每一帧,虽然AVCaptureDevice.formats提供了如此多的不同尺寸的帧大小,但似乎AVCaptureSession仅支持预设中定义的帧大小。

我也尝试在AVCaptureDevice.activeFormat之前或之后设置AVCaptureInputDevice,无论我设置什么设置,如果我在AVCaptureSessionPresetHigh中设置AVCaptureSession,它总会给我一帧1280x720。类似,如果我设置AVCaptureSessionPreset 640x480,那么我只能获得640x480的帧大小。

那么,如何设置800x600的自定义视频帧大小? 在Windows下使用Media Foundation或在Linux下使用V4L2,可以在捕获时轻松设置任何自定义帧大小。

似乎无法在mac下执行此操作。

3 个答案:

答案 0 :(得分:1)

kCVPixelBufferWidthKey对象上设置kCVPixelBufferHeightKeyAVCaptureVideoDataOutput选项。最小样本如下(添加错误检查)。

_sessionOutput = [[AVCaptureVideoDataOutput alloc] init];

NSDictionary *pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithDouble:width], (id)kCVPixelBufferWidthKey,
                              [NSNumber numberWithDouble:height], (id)kCVPixelBufferHeightKey,
                              [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey,
                              nil];
[_sessionOutput setVideoSettings:pixelBufferOptions];

注意:此宽度/高度将覆盖会话预设宽度/高度(如果不同)。

答案 1 :(得分:1)

AFAIK没有办法做到这一点。我见过的所有视频捕获代码都使用预设。

视频设置属性的documentation for AVCaptureVideoDataOutput表示

  

目前唯一支持的密钥是kCVPixelBufferPixelFormatTypeKey密钥。

所以传入视频设置的其他答案将无效,它将忽略这些参数。

答案 2 :(得分:0)

使用AVCapturwVideoDataOutput的videoSettings属性来描述字典中的像素格式,宽度和高度。