我是MAC OSX开发的新手。我想在OSX 10.7上使用AVFoundation将视频捕获为原始帧。我不明白设置特定的视频分辨率到相机设备,不知何故我使用VideoSettings设置,但如果我设置320x240,它是在320x176捕获。我不明白是否有任何API调用不匹配。
请帮我解决这个问题。等待你的回复.....提前致谢.......
此致 阿南德
答案 0 :(得分:4)
user692178的答案有效。但更简洁的方法是在kCVPixelBufferWidthKey
对象上设置kCVPixelBufferHeightKey
和AVCaptureVideoDataOutput
选项。然后,在启动AVCaptureDevice lockForConfigration
之前调用AVCaptureSession
,无需获得对设备的独占访问权限。最小样本如下。
_session = [[AVCaptureSession alloc] init];
_sessionInput = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error];
_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 :(得分:3)
在AVCaptureDevice中有两个属性。格式和activeFormat。 format将返回AVCaptureDeviceFormat的NSArrary,其中包含cam公开的所有格式。您从此列表中选择任何一种格式并将其设置为activeFormat。通过调用AVCaptureDevice lockForConfigration确保在收到对devlce的独占访问权限后设置格式。设置格式后,使用AVCaptureDevice unlockForConfigration释放锁定。然后启动AVCaptureSession,它将为您提供所设置格式的视频帧。
AVCaptureFormat是CMFormatDescription的包装器。 CMVideoFotmatDescription是CMFormatDescription的concreete子类。使用CMVideoFormatDescriptionGetDimentions()以设置格式获取宽度和高度。使用CMFormatDescriptionGetMediaSubType()获取视频编解码器。对于原始照片,视频编解码器主要是yuvs或vuy2。对于压缩格式,其h264,dmb1(mjpeg)等等。