我是MAC OSX開發的新手。我想在OSX 10.7上使用AVFoundation將視頻捕獲爲原始幀。我不明白爲相機設備設置特定的視頻分辨率,不知怎的,我使用VideoSettings設置,但如果我設置320x240,它將捕獲在320x176。我不理解是否有任何API調用不匹配。MAC OSX AVFoundation視頻捕獲
請幫我解決這個問題。提前等待你的答覆.....謝謝.......
問候, 阿南德
我是MAC OSX開發的新手。我想在OSX 10.7上使用AVFoundation將視頻捕獲爲原始幀。我不明白爲相機設備設置特定的視頻分辨率,不知怎的,我使用VideoSettings設置,但如果我設置320x240,它將捕獲在320x176。我不理解是否有任何API調用不匹配。MAC OSX AVFoundation視頻捕獲
請幫我解決這個問題。提前等待你的答覆.....謝謝.......
問候, 阿南德
在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)等等。
user692178的答案有效。但更清潔的方法是設置kCVPixelBufferWidthKey
和kCVPixelBufferHeightKey
選項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];
注意:此寬度/高度將覆蓋會話預置寬度/高度(如果不同)。
在您的問題中包括您的代碼將幫助我們幫助您。 – Caleb 2013-03-28 06:03:35