Ответ 1
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()
}
Вы можете узнать больше о настройке сеанса захвата с помощью AVCaptureDeviceFormat
в руководстве Apple и сеансе WWDC2013, который ввел форматы устройств в iOS 7.0. (Большая часть того, что вы найдете по этой теме, нацелена на замедленное видео, съемку неподвижных изображений во время видео и другие вещи, которые вы не можете сделать с помощью пресетов сеанса, но это не единственные вещи, которые вы можете делать с форматами захвата.)