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();
, Кто-нибудь, у кого есть какое-либо объяснение (или даже лучше: исправление)?
Заранее спасибо!
3 ответа
Попробуйте API CamcorderProfile. Конфигурации, точно совпадающие с одной из найденных, могут работать.
Очевидно, в вашем случае есть некоторая комбинация разрешения и других параметров, которая делает его неработоспособным. Интересно, это частота кадров? 25 немного странно, попробуйте 29,97 или 30, или, может быть, 15. Мне также интересно, если это битрейт? Это слишком мало для разрешения, попробуйте 500 кбит / с.
Пожалуйста, проверьте ниже ссылку:
http://developer.android.com/guide/appendix/media-formats.html
Проверьте раздел "Рекомендации по кодированию видео". Значения в pixels
поэтому убедитесь, что значения поддерживаются разрешением устройства.
У меня были те же проблемы, когда я работал с MediaRecorder.
Вы можете попробовать использовать CamcorderProfile, но по моему опыту, это не гарантирует стабильной работы. Также в Android 2.* вы можете иметь только два профиля CamcorderProfile.
Эти настройки зависят от устройства, и вы можете получить лучшее для широкого спектра устройств экспериментальным путем.
РЕДАКТИРОВАТЬ: Также вы можете использовать H.263 вместо H.264, для вашего случая это должно работать.