Параметры ориентации захвата видео iOS AVFoundation - PullRequest
4 голосов
/ 07 августа 2011

У меня есть приложение, которое я хотел бы иметь для захвата видео только для фронтальной камеры.Это не проблема.Но мне бы хотелось, чтобы захват видео всегда происходил в альбомной ориентации, даже если телефон находится в портретном режиме.

У меня есть рабочая реализация, основанная на коде AVCamDemo, опубликованном Apple.И, заимствуя информацию из этой технической записки , я могу указать ориентацию.Есть только одна хитрость: хотя видеокадр ориентирован правильно, содержимое по-прежнему выглядит как в портретной съемке:

landscape orientation with portrait contents

Интересно, меня просто обманываютфизические ограничения оборудования: датчик изображения ориентирован именно таким образом?Приведенная выше техническая заметка делает это примечание:

Важное замечание: Установка ориентации на выходе неподвижного изображения и файла фильма физически не поворачивает буферы.Для вывода файла фильма он применяет преобразование дорожки (матрицу) к дорожке видео, чтобы фильм вращался при воспроизведении, а для вывода неподвижного изображения он вставляет метаданные exif, которые зрители используют для правильного поворота изображения при последующем просмотре.

Но мое воспроизведение этого видео говорит об обратном.Буду признателен за любые идеи или предложения!

Спасибо, Аарон.

1 Ответ

2 голосов
/ 25 января 2012

Чтобы ответить на ваш вопрос, да, датчик изображения просто ориентирован именно таким образом.Видеокамера представляет собой приблизительно 1080-мегапиксельную камеру с фиксированной ориентацией.5-мегапиксельная (или 8-мегапиксельная для 4S и т. Д.) Фотокамера также имеет фиксированную ориентацию.Сами линзы не вращаются и не вращаются ни с какими другими битами камеры, и, следовательно, сам канал имеет фиксированную ориентацию.

"Но подождите!"или API) повернуть правильно. Почему это так? "Это потому, что iOS берет ориентацию телефона, когда снимок сделан, и сохраняет эту информацию вместе с изображением (как приложение Exif).Тем не менее, видео не так помечено - и каждый кадр должен быть помечен индивидуально, и тогда возникают проблемы с тем, что делать, когда пользователь поворачивает телефон во время видео ....

Итак, нет, вы не можете спросить видеопоток или неподвижное изображение, в какой ориентации был телефон, когда видео было снято.Однако вы можете напрямую спросить телефон, в каком направлении он находится сейчас :

UIDeviceOrientation currentOrientation = [UIDevice currentDevice].orientation;

Если вы сделаете это в начале захвата видео (или когда вы захватываете неподвижное изображение извидео), вы можете затем использовать эту информацию для собственного поворота воспроизведения.

...