6

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

我也尝试过设置AVCaptureDevice.activeFormat之前AVCaptureInputDevice或之后,无论我设置什么设置,如果我设置AVCaptureSessionPresetHighAVCaptureSession它总是给我一个1280x720的帧。类似的,如果我设置AVCaptureSessionPreset640x480,那么我只能得到 640x480 的帧大小。

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

在mac下似乎无法做到这一点。

4

3 回答 3

2

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

_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];

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

于 2014-05-23T06:35:25.930 回答
2

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

视频设置属性的AVCaptureVideoDataOutput 文档说

当前支持的唯一键是 kCVPixelBufferPixelFormatTypeKey 键。

所以传入视频设置的其他答案将不起作用,它只会忽略这些参数。

于 2014-08-05T22:44:56.267 回答
0

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

于 2013-04-26T17:45:56.330 回答