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

Я пытаюсь передать видео между устройствами. Я хочу поддерживать как можно более старые устройства. Поэтому я начал с класса 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) – это то, что работает на большинстве устройств.

Intereting Posts
Как перезагрузить Android-эмулятор и сохранить системные данные EditText внутри ListView не будет сфокусирован Неожиданные побочные эффекты при разборе дат в Android Количество ссылок метода в файле .dex не может превышать 64k API 17 Проблема с DatagramSocket на Android 7.1.1 Не удалось найти следующие классы: – android.support.wearable.view.WatchViewStub Android-эмулятор не имеет оконной рамы Android Image Rotation не работает в мороженом сэндвич IsChecked (), прямо противоположное версиям Android 2.3.6 и 4.2 Прямые трансляции телевизионных каналов в андроиде Контактная информация для Android: как получить обратную ссылку (Google) из Интернета (и, таким образом, «отменить» прежнее локальное изменение изображения) Gradle – дубликаты библиотек в зависимостях Доступ к ресурсам в проекте тестирования Android Ограничение словаря распознавания голоса для более быстрого совпадения и хорошей точности Android MediaPlayer setNextMediaPlayer () альтернатива