我需要处理捕获的视频帧的每一帧,虽然AVCaptureDevice.formats
提供了如此多的不同尺寸的帧大小,但似乎AVCaptureSession
仅支持预设中定义的帧大小。
我也尝试在AVCaptureDevice.activeFormat
之前或之后设置AVCaptureInputDevice
,无论我设置什么设置,如果我在AVCaptureSessionPresetHigh
中设置AVCaptureSession
,它总会给我一帧1280x720。类似,如果我设置AVCaptureSessionPreset
640x480,那么我只能获得640x480的帧大小。
那么,如何设置800x600的自定义视频帧大小? 在Windows下使用Media Foundation或在Linux下使用V4L2,可以在捕获时轻松设置任何自定义帧大小。
似乎无法在mac下执行此操作。
答案 0 :(得分:1)
在kCVPixelBufferWidthKey
对象上设置kCVPixelBufferHeightKey
和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];
注意:此宽度/高度将覆盖会话预设宽度/高度(如果不同)。
答案 1 :(得分:1)
AFAIK没有办法做到这一点。我见过的所有视频捕获代码都使用预设。
视频设置属性的documentation for AVCaptureVideoDataOutput表示
目前唯一支持的密钥是kCVPixelBufferPixelFormatTypeKey密钥。
所以传入视频设置的其他答案将无效,它将忽略这些参数。
答案 2 :(得分:0)
使用AVCapturwVideoDataOutput的videoSettings属性来描述字典中的像素格式,宽度和高度。