MAC OSX AVFoundation视频捕获

时间:2013-03-25 06:29:26

标签: avfoundation

我是MAC OSX开发的新手。我想在OSX 10.7上使用AVFoundation将视频捕获为原始帧。我不明白设置特定的视频分辨率到相机设备,不知何故我使用VideoSettings设置,但如果我设置320x240,它是在320x176捕获。我不明白是否有任何API调用不匹配。

请帮我解决这个问题。等待你的回复.....提前致谢.......

此致 阿南德

2 个答案:

答案 0 :(得分:4)

user692178的答案有效。但更简洁的方法是在kCVPixelBufferWidthKey对象上设置kCVPixelBufferHeightKeyAVCaptureVideoDataOutput选项。然后,在启动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)等等。