Я начал проект с Grafika и изменил его. У меня есть фреймворк (не слишком отличающийся от оригинала), который захватывает предварительный просмотр из Camera
и непрерывно кодирует его в видео одновременно с разными разрешениями.
MediaCodec
(для кодирования) настроен на использование COLOR_FormatSurface
, чтобы мы могли выполнять рендеринг на поверхность, запрошенную с помощью getInputSurface()
, используя GLES.
В качестве формата мультимедиа задан тип MIME video/avc
.
Для большинства телефонов эта настройка работает идеально.
Но для некоторых телефонов закодированное видео имеет слегка искаженные значения цветности и зеленую полосу внизу.
В настоящее время поверхность кодировщика имеет разрешение 640x360. EGLConfig, выбранный для рендеринга на поверхность, поддерживает 32-битный формат RGBA.
Предварительный просмотр идеален на всех телефонах.
Поэтому я предполагаю, что что-то не так с параметрами кодировщика либо на стороне приложения, либо на стороне ОС.
Это происходит на Android 4.4. - Не уверен, воспроизводятся ли на 5.*.
]2
640x360
также разрешением кодировки? Вы кодируете1080p
? Если да, то я думаю, что ваша проблема связана с выравниванием по вертикали. Кодер может считывать 1088 вместо 1080. Если это так, выход камеры должен быть выровнен аналогичным образом. - person Ganesh   schedule 20.09.20151080
, но у меня возникает такая же проблема на устройстве с чипсетом MediaTek. Я пробовал кодировать в1072
, и это нормально. Но я не хочу использовать это решение по нескольким причинам: 1) нестандартное разрешение, 2) как решить, какое устройство кодирует в1080
, а какое из них требует1072
, 3) могут возникнуть другие проблемы (экспорт в1088
исправил эту проблему, но добавил другие проблемы) Заранее большое спасибо! - person Vinayak Garg   schedule 29.01.2016