【问题标题】:How to use custom video resolution when use AVFoundation and AVCaptureVideoDataOutput on mac在 mac 上使用 AVFoundation 和 AVCaptureVideoDataOutput 时如何使用自定义视频分辨率
【发布时间】:2013-04-11 00:46:00
【问题描述】:

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

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

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

在mac下好像不行。

【问题讨论】:

  • 以下任何答案对您有帮助吗?

标签: size avfoundation frame capture


【解决方案1】:

在AVCaptureVideoDataOutput 对象上设置kCVPixelBufferWidthKey 和kCVPixelBufferHeightKey 选项。最小示例如下(添加错误检查)。

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

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

【讨论】:

  • 这不起作用。正如@Bourne 所说,“目前唯一支持的键是 kCVPixelBufferPixelFormatTypeKey 键。”如果您尝试您的代码,您会收到一条错误消息,提示“videoSettings 字典包含一个或多个不受支持(忽略)的键”。
  • @eyuelt 它有效。请在github.com/kiranpradeep/cameraResolution查看样本
  • 你是对的。它确实适用于 OSX。抱歉,我没有意识到这个问题是针对 OSX 的。我在 iOS 上寻找这个问题的解决方案。
  • 实际上您引用的解决方案是针对静止图像,而不是视频。
  • @AndrewSmith 这适用于视频本身,而不适用于静止图像。请尝试在您的 Mac 上运行以上 github 示例。
【解决方案2】:

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

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

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

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

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多