2009-04-27 99 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中,則應指定該對象的定義。