Поддерживаемые разрешения Android 4.1 MediaCodec

Я пытаюсь заставить новые низкоуровневые мультимедийные функции Android 4.1 работать для кодирования H.264 на планшете Asus Transformer TF300T. У меня странное поведение при попытке увеличить разрешение кодека:

        MediaFormat mediaFormat = MediaFormat.
                                createVideoFormat("video/mp4v-es", 320, 240); // WORKS
//      MediaFormat mediaFormat = MediaFormat.
//                              createVideoFormat("video/mp4v-es", 640, 480); // DOESN'T WORK

        mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
        mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 25);
        mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
        mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
        mediaCodec.start();

В последнем случае я получаю исключение IllegalStateException при вызове mediaCodec.getInputBuffers();. Кто-нибудь, у кого есть какое-либо объяснение (или даже лучше: исправление)?

Заранее спасибо!


person gleerman    schedule 27.11.2012    source источник


Ответы (3)


  1. Попробуйте API CamcorderProfile. Конфигурации, точно соответствующие одной из извлеченных оттуда, скорее всего, будут работать.

  2. Очевидно, что в вашем случае есть некоторая комбинация разрешения и других параметров, из-за которой это не работает. Интересно, это частота кадров? 25 немного странно, попробуйте 29,97 или 30, а может и 15. Мне тоже интересно, это битрейт? Это слишком мало для разрешения, попробуйте 500 кбит/с.

person Alex I    schedule 30.11.2012
comment
Вторая подсказка помогла, спасибо! У меня сейчас проблема с цветовым пространством, но прежде чем задавать какие-либо вопросы, я изучу CamcorderProfile API. Большое спасибо! - person gleerman; 30.11.2012
comment
Я разместил еще один вопрос по теме: stackoverflow. ком/вопросы/13703596/ - person gleerman; 05.12.2012

Пожалуйста, оформите заказ по ссылке ниже:

http://developer.android.com/guide/appendix/media-formats.html

Ознакомьтесь с разделом «Рекомендации по кодированию видео». Значения находятся в pixels, поэтому убедитесь, что значения поддерживаются разрешением устройства.

person Gaurav Navgire    schedule 27.11.2012

У меня были такие же проблемы, когда я работал с MediaRecorder.

Можно попробовать использовать CamcorderProfile, но по моему опыту, это не гарантирует стабильной работы. Также в Android 2.* у вас может быть только два профиля CamcorderProfile.

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

EDIT: Также вы можете использовать H.263 вместо H.264, в вашем случае это должно работать.

person Taras    schedule 30.11.2012