1. Camera Сделайте снимок экрана и просмотрите push-поток. : Обратите внимание здесь , Предыдущее изображение было повернуто против часовой стрелки. 90 степень , После установки угла наклона датчика изображения , Изображение предварительного просмотра было исправлено. , но Camera Датчик изображения собирает NV21 формат изображения все еще поворачивается 90 степень ;
2 . Посмотрите эффект прямой трансляции на компьютере. : Экран вращается против часовой стрелки 90 степень , Это связано с тем, что датчик камеры раньше был настроен только для коррекции изображения предварительного просмотра. ,но NV21 Данные изображения в формате по-прежнему поворачиваются против часовой стрелки. 90 степеньизданные ;
Задействованы определенные форматы изображений , и ориентация датчика изображения , соотношение ориентации экрана , Справочный блог 【Android RTMP】Android Camera Предварительный просмотр сбора видеоданных ( Настройки ориентации датчика изображения | Camera Процесс использования | Приложение динамического разрешения )
Проблемы с поворотом изображения и их решения:
① Описание проблемы : Проанализируйте приведенный выше экран , Вы можете видеть, что видео повернуто против часовой стрелки. 90 степень , То есть изображение на экране поворачивается против часовой стрелки. 90 степень ;
② решение : Воля Camera собранный NV21 форматировать изображение, повернутое по часовой стрелке 90 степень , может решить вышеуказанные проблемы ;
NV21 Расположение данных формата изображения : к
Если взять в качестве примера пиксельное изображение, то есть
Данные Y, только данные УФ
группа, всего
индивидуальный;
1 . Данные расположены в следующей матрице :
Сначала данные Y, затем
Группа (
) данные БУ сохраняются поочередно;
2 . повернуть значение степени серого пикселя Y : Значения пикселей по часовой стрелке 90 Стиль после диплома ;
① матрица вращения :
② финал после ротации Y Значение степени серого матрица :
повернутое изображение насыщенностьстепень значение цвета UV : UV После ротации данных , только что дали UV Расположение данных , Еще нужен Воля UV Данные расположены по порядку :
① вращать UV данныематрица : Вращение может представлять только UV расположение группы данных , Прямо сейчас первая группа UV данные (
) в верхнем левом углу , Группа 2 UV данные (
) в правом верхнем углу , Группа 3 UV данные (
) в левом нижнем углу , Группа 4 UV данные (
) в правом нижнем углу;
② финал после ротации UV значение цвета насыщенностьстепень матрица :
NV21 отформатировать изображение YUV Значение по часовой стрелке вращать 90 после степени YUV матрицадля :
Получить ориентацию экрана телефона : Вызовите следующий метод , Доступный
ориентация экрана мобильного телефона;
mRotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
Вызовите указанный выше метод, и полученная ориентация экрана телефона будет Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270, одной из четырех констант.
Surface.ROTATION_0 Обычная книжная ориентация:
① Постоянное значение : ROTATION_0 Константа представляет собой сотовый телефон естественным направлением вращения против часовой стрелки 0 степень, Вертикальный экран ;
② Инструкции по направлению:
в целомиз Вертикальный экран Как работать, Это также наиболее часто используемый метод ;
Surface.ROTATION_90 нормальный Вертикальный Направление экрана :
① Постоянное значение : ROTATION_90 Константа представляет собой сотовый телефон естественным направлением вращения против часовой стрелки 90 степень, Горизонтальный экран ;
② Инструкции по направлению:
в целом Горизонтальный экран Как работать ;
Surface.ROTATION_180 нормальный Вертикальный Направление экрана :
① Постоянное значение : ROTATION_180 Константа представляет собой сотовый телефон естественным направлением вращения против часовой стрелки 180 степень, Вертикальный экран ;
② Инструкции по направлению:
Это делается редко;
Surface.ROTATION_270 нормальный Вертикальный Направление экрана :
① Постоянное значение : ROTATION_270 Константа представляет собой сотовый телефон естественным направлением вращения против часовой стрелки 270 степень, Горизонтальный экран ;
② Инструкции по направлению:
в целом Горизонтальный экран Как работать ;
Пример кода определения ориентации экрана мобильного телефона Android:
/**
* настраивать Camera Направление предварительного просмотра
* если ненастраивать, видео перевернуто
* Содержимое метода копируется из {@link Camera#setDisplayOrientation} аннотация, Это Google Docs предоставил
* @param parameters
*/
private void setCameraPreviewOrientation(Camera.Parameters parameters) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(mCameraFacing, info);
/*
Получает угол экрана относительно его естественной ориентации.
Естественное направление нормальное Вертикальный Направление экрана,Камерасверху, Home Ключ опущен, переписываться Surface.ROTATION_0
ROTATION_0 Является ли естественным направление вращения против часовой стрелки? 0 степень, Вертикальный экран
голова ( Сторона камеры ) выше
Хвост (сторона клавиши «Домой/Возврат») находится внизу.
в целом Вертикальный экран Как работать, Это также наиболее часто используемый метод
ROTATION_90 Является ли естественным направление вращения против часовой стрелки? 90 степень, Горизонтальный экран
голова ( Сторона камеры ) слева
Хвост (сторона клавиши «Домой/Возврат») находится справа.
в целом Горизонтальный экран Как работать
ROTATION_180 Является ли естественным направление вращения против часовой стрелки? 180 степень, Вертикальный экран
голова ( Сторона камеры ) ниже
хвост ( Home / возвращаться сторона ключа ) выше
Это делается редко
ROTATION_270 Является ли естественным направление вращения против часовой стрелки? 270 степень, Горизонтальный экран
голова ( Сторона камеры ) справа
хвост ( Home / возвращаться сторона ключа ) слева
Это делается редко
Блог иллюстрирует эти направления скриншотами.
*/
mRotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (mRotation) {
case Surface.ROTATION_0:
degrees = 0;
/*
Camera Датчик изображения собранный в соответствии с Вертикальным. экрансобранный
оказатьсянастраиватьизизображениеиз Ширина и высота есть 800 x 400
Если экран повернут вертикально, Его ширина и высота становятся 400 x 800, Необходимо поменять ширину и высоту.
Здесь необходимо уведомление Native слоистый x264 кодер, Изменить параметры кодирования , в соответствии с 400 x 800 закодировать размер
Требуется повторная настройка x264 параметры кодирования
*/
mOnChangedSizeListener.onChanged(mHeight, mWidth);
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
mCamera.setDisplayOrientation(result);
}