Intereting Posts
Как я могу сделать текст в TextView незаметным в XML-макете? Конвертировать dip в px в Android Пользовательская клавиатура Android. Следующие классы не могли быть созданы: Рекомендации по подключению таблиц и уведомление ContentObservers в Android ContentProvider SoundCloud, как форма поиска сигналов? Google API для Документов Google, запрашивающих список документов – 400 Bad Request Закрытие модального диалога в мобильном приложении delphi firemonkey (Android) Ошибка службы Google Play при создании клиента OAuth2.0 Ошибка при загрузке apk на рынок Android. Как разработать видеопроигрыватель, который принимает видеопоток на WI-Fi вещании / многоадресной рассылке? Панель навигации, общая для всех видов деятельности «Умная» активация Android от push-уведомления Android Multidex RuntimeException Скройте загрузчик, когда вы нажимаете его на Android BitmapFactory не может декодировать растровое изображение от Uri после фотографий, сделанных на Android Nougat

Разрешение просмотра не соответствует разрешению кодека

Я пытаюсь передать видео между устройствами. Я хочу поддерживать как можно более старые устройства. Поэтому я начал с класса MediaRecorder в Gingerbread (API 10), но у него были проблемы. Итак, теперь я перехожу к Jelly Bean (API 16) и MediaCodec .

Я PreviewCallback данные в кодек в PreviewCallback камеры. Я должен использовать такое же разрешение для предварительного просмотра, и для кодека. Но на некоторых наших тестовых устройствах нет пересечения между разрешениями предварительного просмотра и кодеками и их разрешениями.

Итак, как захватить видео на этих устройствах? Я знаю, что в MediaCodec есть createInputSurface , но ему нужен API 18, и мне придется отключить более 35% устройств, что неприемлемо.

Итак, как его решить?

Код для поиска наилучшего разрешения:

 CamcorderProfile bestProfile() { final int[] profiles; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_2160P, CamcorderProfile.QUALITY_1080P, CamcorderProfile.QUALITY_720P, CamcorderProfile.QUALITY_480P, CamcorderProfile.QUALITY_CIF, CamcorderProfile.QUALITY_QCIF, CamcorderProfile.QUALITY_LOW}; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_1080P, CamcorderProfile.QUALITY_720P, CamcorderProfile.QUALITY_480P, CamcorderProfile.QUALITY_CIF, CamcorderProfile.QUALITY_QCIF, CamcorderProfile.QUALITY_LOW}; } else { profiles = new int[]{CamcorderProfile.QUALITY_HIGH, CamcorderProfile.QUALITY_LOW}; } for (final int p : profiles) { try { final CamcorderProfile profile = CamcorderProfile.get(p); String encoder = EncoderDebugger.debug(this, profile.videoFrameWidth, profile.videoFrameHeight).getEncoderName(); Log.d(String.valueOf(profile.videoFrameWidth + "*" + profile.videoFrameHeight), encoder); return profile; } catch (final RuntimeException re) { Log.e("Profile", re.getLocalizedMessage()); } } return null; } 

EncoderDebugger

QUALITY_CIF , QUALITY_CIF (352 × 288) – это то, что работает на большинстве устройств.