Подтвердить что ты не робот

Может ли AVCaptureSession использовать пользовательское разрешение

Я использую AVCaptureSession для захвата и записи видео.

Мне нужно записать видео с соотношением 4: 3 и с хорошим разрешением.

Есть ли способ указать пользовательское разрешение при захвате с помощью AVCaptureSession?

Я попытался использовать собственные пресеты, но проблема в том, что мне нужно захватить с соотношением 4: 3, и почти все пресеты - 16: 9. и те, которые имеют 4: 3, имеют очень низкое разрешение.

Я не могу по-другому поменять пресет на обычную, что, если мне нужно захватить видео 4: 3 с лучшим разрешением? Любые идеи?

4b9b3361

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

Ответ 2

Просто выполните запись с заданным соотношением сторон и используйте AVMutableComposition, чтобы обрезать выходное видео с требуемым соотношением сторон: если вы настроите слой предварительного просмотра на маску на 4: 3, это будет выглядеть без проблем для пользователя.