iOS - захват видео в альбомной ориентации, когда устройство находится в портретном режиме
Можно ли снимать видео в альбомной ориентации, когда устройство находится в портретном режиме?
на самом деле мне нужно сделать снимок в портретной ориентации, но с шириной> высотой, я не хочу, чтобы пользователь поворачивал устройство, но я хочу сделать более широкое изображение, как в ландшафтном режиме.
Конечно, недостаточно просто изменить рамку слоя предварительного просмотра на ширину (ширина> высота).
я попытался изменить ориентацию видео слоя предварительного просмотра, но это будет вращать изображение, и это не то, что я хочу.
previewLayer.connection.videoOrientation = .landscapeRight
это имеет какой-то смысл?
3 ответа
Нет, это невозможно, так как вам придется физически вращать камеру.
Вы можете обрезать выходное видео до любого соотношения сторон, которое вы хотите.
Это, однако, сделает ваше вертикальное разрешение не более того, что ваше горизонтальное разрешение в настоящее время.
Так же как уменьшение вашего поля зрения.
Если вы все еще хотите обрезать видео для имитации этого "меньшего ландшафтного режима" в режиме реального времени, я предлагаю вам использовать "GPUImageCropFilter" из библиотеки GPUImage
Вы можете, вам нужно использовать AVAssetWriter и установить размеры выходного видео.
Однако помните, что вы собираетесь снижать качество. Если ориентация камеры портретная, то то, что вы получаете, - это видео (ради аргумента) 720H x 360W.
Таким образом, вы хотите создать такой пейзаж, если вы сохраните соотношение сторон, то в итоге вы получите видео (обрезка входного сигнала) размером 180H x 360W.
Помните, что есть разница между тем, что видит камера, тем, что вы отправляете в слой предварительного просмотра, и тем, что вы записываете в файл - все они могут быть независимыми друг от друга (вы говорили об изменении кадра слоя предварительного просмотра, помните, что ничего не имеет к делай с видео, которое ты пишешь).
Вы пробовали с установкой силы тяжести и границ PreviewLayer?
var bounds:CGRect = self.view.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.bounds = bounds
previewLayer?.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))