2009-04-27 44 views
3

我正在通过网络摄像头录制。相机在PhotoBooth中看起来很棒。但是,当我使用QTCaptureView在我的程序中预览它时,或将其记录到文件中时,它非常非常慢。原因是QuickTime给我最大可能的分辨率为1600x1200。我怎么能强制我的QTCaptureView和我的录音文件更合理的大小?在QTCapture中设置分辨率?

回答

7

作为described here,您可以在QTCaptureSession的输出中设置像素缓冲区属性,以更改捕获的视频的分辨率。例如:

[[[myCaptureSession outputs] objectAtIndex:0] setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                   [NSNumber numberWithInt:480], kCVPixelBufferHeightKey, 
                   [NSNumber numberWithInt:640], kCVPixelBufferWidthKey, nil]]; 

会将视频分辨率设置为捕获会话中第一个输出的640x480。这也应该调整相机设置本身以使其返回该尺寸的图像帧(如果相机硬件支持)。

您可能还希望使用基本MPEG4编码而不是h.264来进行实时视频录制。

NSArray *outputConnections = [mCaptureMovieFileOutput connections]; 
QTCaptureConnection *connection; 
for (connection in outputConnections) 
{ 
    if ([[connection mediaType] isEqualToString:QTMediaTypeVideo]) 
      [mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeMPEG4Video"] forConnection:connection]; 
} 

H.264编码,特别是QuickTime的实施方式中,使用了大量的更多的CPU功率比基MPEG4编码:这可以通过使用类似于下面的代码来设置。

3

上面的解决方案(setPixelBufferAttributes :)确实设置了预览大小,但是一旦开始录制动画,预览图像将被设置回它的原始值(我的MBP上是1280 x 1024) )任何压缩选项。

如果这只是在录制电影期间会是一回事,但是一旦录制完成,对setPixelBufferAttributes的进一步调用将不起作用。

因此,只要您不打算进行任何实际的压缩影片录制,您就可以更改预览图像大小。

这是在10.5.8/9L30 MBP与GeForce 8600M。如上所述,除无压缩或QTCompressionOptionsSD240SizeH264Video以外的任何压缩选项都会中断。

rdar:// 7447812

0

要添加关于主题的更多信息:

你不能直接specifiy上采集端的定义。相反,这是定义定义的捕获会话的输出。例如

  • 如果捕获到QtCaptureDecompressedVideoOutput中,则应指定该对象的定义。