Проблема. Некоторые устройства Android (перечисленные в конце вопроса) демонстрируют непредвиденное поведение при использовании функции setOrientationHint(int degrees)
для видео, снятых на фронтальную камеру. Ожидаемое поведение - поворот видео по часовой стрелке, но эти устройства вращают видео против часовой стрелки.
Моя цель: определить переменную в настройках камеры или ориентации оборудования, которая позволяет мне предсказуемо узнать, когда это произойдет. В частности, я бы не хотел, чтобы эти телефоны были в моем коде специальным корпусом!
Дальнейшее объяснение: я записываю видео, используя стандартный объект MediaRecorder
, и при подготовке к записи я установил ориентацию видео с помощью _ 3_. В документации для setOrientationHint()
для параметра degrees
указано следующее:
градусы –– угол поворота по часовой стрелке в градусах. Поддерживаемые углы: 0, 90, 180 и 270.
Функция предназначена для добавления матрицы композиции, содержащей угол поворота, чтобы видеопроигрыватель мог отображать видео должным образом. Итак, что я делаю, так это то, что я получаю ориентацию оборудования камеры с помощью CameraInfo
class и используйте его как параметр degrees
в setOrientationHint
fn. (Я пробовал вариант этого кода, используя AOSP в качестве руководства, но у меня был точно такой же результат.)
Реальный пример. Аппаратная ориентация фронтальной камеры Samsung Galaxy S3 (как и большинства других) будет составлять 270, поэтому я использую это при записи, и полученное видео отображается правильно. HTC Vivid аналогичным образом вернет аппаратную ориентацию 270 для той же камеры, но будет отображаться правильно только в том случае, если я использую 90 в качестве параметра degrees
в setOrientationHint
fn. Если я использую аппаратную ориентацию 270, как и любой другой телефон, видео будет перевернутым.
NB: функция setOrientationHint()
включает предупреждение:
Обратите внимание, что некоторые видеоплееры могут игнорировать матрицу композиции в видео во время воспроизведения.
Однако это не, что происходит, потому что я могу легко исправить эту проблему на этих телефонах, если подделаю ее и введу 90 вместо 270.
В телефонах, которые я видел, особенно характерна эта проблема: HTC Vivid (PH39100) под управлением Android 4.0.3, HTC EVO 4G (PG86100) под управлением Android 4.0.3, HTC Thunderbolt (ADR6400L) под управлением Android 2.3.4 . Обратите внимание, что все они телефоны HTC. Возможно, кто-то в HTC ошибочно принял правую стрелку за против часовой стрелки.