2016-01-06 58 views
12

我使用AVCaptureSession來捕捉和錄製視頻。AVCaptureSession可以使用自定義分辨率

我需要以4:3的比例錄製視頻,並且分辨率很好。

當使用AVCaptureSession進行捕捉時,是否有指定自定義分辨率的方法?

我試過使用原生預設,但問題是我需要以4:3的比率捕捉,而幾乎所有的預設都是16:9。而那些4:3的分辨率非常低。

我不能以任何其他方式將預設更改爲自定義預設,如果我需要捕獲更高分辨率的4:3視頻,該怎麼辦?有任何想法嗎?

+0

你能提供更多信息嗎?你試過什麼預設選項? –

+0

你試過AVCaptureSessionPreset640x480嗎? –

+0

@ Mr.T我需要更好的分辨率 – Eyal

回答

8

AVCaptureSession預設僅涵蓋設備相機功能的一小部分(大多數應用程序希望快速輕鬆訪問)。要獲得更精細的控制 - 例如選擇會議預設不提供的捕捉分辨率 - 則需要改爲使用捕捉格式。

看看捕捉設備的formats屬性,一個AVCaptureDeviceFormat對象的數組。枚舉該數組,直到找到一個尺寸符合要求的數組。要獲得尺寸,看看格式的底層CMFormatDescription

let fdesc = format.formatDescription 
let dims = CMVideoFormatDescriptionGetDimensions(fdesc) 
NSLog("%d x %d", dims.width, dims.height) 

一旦你找到你想要的格式,鎖配置的設備,並設置其activeFormat

if try device.lockForConfiguration() { 
    device.activeFormat = myChosenFormat 
    // set up other things like activeVideoMinFrameDuration if you want 
    device.unlockForConfiguration() 
} 

你可以找到更多關於通過Apple的programming guidethe WWDC2013 session中的AVCaptureDeviceFormat來配置捕獲會話,該會話在iOS 7.0中引入了設備格式。 (大多數關於此主題的內容都針對慢動作視頻,在視頻中採用高分辨率靜止圖像以及其他無法使用會話預設的功能,但這些並不是您可以做的唯一的事情)

+0

嗨感謝您的答案,當打印暗淡它接縫,沒有新的尺寸,但很多重複。我沒有找到一種方法來創建一個新的格式(不知道它可能) – Eyal

1

只需按給定的寬高比進行錄製,然後使用AVMutableComposition將輸出視頻裁剪爲所需的寬高比:如果將預覽圖層調整爲4:3,則對於用戶。