2013-03-25 110 views
3

我是MAC OSX開發的新手。我想在OSX 10.7上使用AVFoundation將視頻捕獲爲原始幀。我不明白爲相機設備設置特定的視頻分辨率,不知怎的,我使用VideoSettings設置,但如果我設置320x240,它將捕獲在320x176。我不理解是否有任何API調用不匹配。MAC OSX AVFoundation視頻捕獲

請幫我解決這個問題。提前等待你的答覆.....謝謝.......

問候, 阿南德

+0

在您的問題中包括您的代碼將幫助我們幫助您。 – Caleb 2013-03-28 06:03:35

回答

3

在AVCaptureDevice有兩個屬性。格式和activeFormat。格式將返回包含凸輪公開的所有格式的AVCaptureDeviceFormat的NSArrary。您從此列表中選擇任何一種格式並將其設置爲activeFormat。確保在通過調用AVCaptureDevice lockForConfigration獲得對devlce的獨佔訪問權限後設置格式。設置格式後,用AVCaptureDevice unlockForConfigration釋放鎖定。然後啓動AVCaptureSession,它將爲您提供您設置的格式的視頻幀。

AVCaptureFormat是CMFormatDescription的包裝。 CMVideoFotmatDescription是CMFormatDescription的concreete子類。使用CMVideoFormatDescriptionGetDimentions()以設置的格式獲取寬度和高度。使用CMFormatDescriptionGetMediaSubType()獲取視頻編解碼器。對於raw fotmats,視頻編解碼器大多是yuvs或vuy2。對於壓縮格式,它的h264,dmb1(mjpeg)等等。

3

user692178的答案有效。但更清潔的方法是設置kCVPixelBufferWidthKeykCVPixelBufferHeightKey選項AVCaptureVideoDataOutput對象。然後在開始AVCaptureSession之前,不需要通過調用AVCaptureDevice lockForConfigration來獲得設備的獨佔訪問權限。最小樣本如下。

_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]; 

注意:此寬度/高度將覆蓋會話預置寬度/高度(如果不同)。