Android flip front camera зеркало перевернуло видео
Я пытаюсь записать видео с передней камеры Android, одновременно отображая на поверхности.
То, что я обнаружил с передней камерой, заключается в том, что зеркало переворачивает видео во время записи, даже если вид на поверхности показывает нормальный вид.
Есть ли способ предотвратить это или исправить?
Я читал о других статьях stackoverflow, таких как Как сохранить андроид от инвертирования изображения с передней камеры?
Но, похоже, речь идет только о съемке с передней камерой и обращении изображения, которое я уже исправил с использованием матрицы. Однако, похоже, использование матрицы для видео не работает.
Ответы
Ответ 1
У меня нет решения, но мне кажется, что ключ:
MediaRecorder.setOrientationHint
Устанавливает подсказку ориентации для воспроизведения выходного видео. Этот метод следует вызывать перед подготовкой(). Этот метод не будет приводить к поворотному кадру исходного видео во время видеозаписи, но для добавления матрицы композиций, содержащей угол поворота в выходном видео, если выходной формат OutputFormat.THREE_GPP или OutputFormat.MPEG_4, так что видеоплеер может выбрать правильную ориентацию для воспроизведения. Обратите внимание, что некоторые видеоплееры могут игнорировать матрицу компо- зиции в видео во время воспроизведения.
Я записываю видео в H264, и он не работает для меня:(
Но это может помочь вам. сделал, чтобы попробовать?
Ответ 2
В документации метода setDisplayOrientation (http://developer.android.com/reference/android/hardware/Camera.html) мы можем найти:
Обратите внимание, что предварительный просмотр передних камер перевернут горизонтально перед вращением, то есть изображение отражается вдоль центральной вертикальной оси датчика камеры. Таким образом, пользователи могут видеть себя как взгляд в зеркало.
Таким образом, ваш экран предварительного просмотра должен быть перевернут, но не записанное видео. С дисплеем предварительного просмотра вы видите себя в зеркале? Если это так, все работает нормально.
Ответ 3
В моем случае мне просто нужно горизонтально-флип при воспроизведении. При записи он уже перевернулся для зеркального эффекта, и, как я вижу, его невозможно изменить. Однако ниже код решил мою проблему при игре.
videoPlayer.setScaleX(-1);
Ответ 4
Вам нужно применить матричное преобразование, например:
if(isFrontCamera) {
m.preScale(-ratio, ratio);
} else {
m.preScale(ratio, ratio);
}
Предполагая, что вы не изменяете размер ничего, рацион будет равен 1, что сделает предварительную предварительную настройку передних камер.