Я получаю строку IllegalStateException в MediaCodec.configure(), я пытаюсь записать аудио с помощью MediaCodec. Это происходит только на некоторых телефонах, на вкладках все в порядке. Этот конкретный пример сбоя - от Samsung Galaxy S4. Исключение следов:Illegal State Exception при вызове MediaCodec.configure()
01-22 17:33:38.379: V/ACodec(16541): [OMX.google.aac.decoder] Now Loaded
01-22 17:33:38.379: V/ACodec(16541): onConfigureComponent
01-22 17:33:38.379: W/ACodec(16541): [OMX.google.aac.decoder] Failed to set standard component role 'audio_encoder.aac'.
01-22 17:33:38.379: E/ACodec(16541): [OMX.google.aac.decoder] configureCodec returning error -2147483648
01-22 17:33:38.379: E/MediaCodec(16541): Codec reported an error. (omx error 0x80001001, internalError -2147483648)
01-22 17:33:38.384: D/AndroidRuntime(16541): Shutting down VM
01-22 17:33:38.384: W/dalvikvm(16541): threadid=1: thread exiting with uncaught exception (group=0x418d0700)
01-22 17:33:38.414: W/BugSenseHandler(16541): Transmitting crash Exception Unable to resolve host "bugsense.appspot.com": No address associated with hostname
01-22 17:33:41.404: E/AndroidRuntime(16541): FATAL EXCEPTION: main
01-22 17:33:41.404: E/AndroidRuntime(16541): java.lang.IllegalStateException
01-22 17:33:41.404: E/AndroidRuntime(16541): at android.media.MediaCodec.native_configure(Native Method)
01-22 17:33:41.404: E/AndroidRuntime(16541): at android.media.MediaCodec.configure(MediaCodec.java:259)
01-22 17:33:41.404: E/AndroidRuntime(16541): at com.example.poc.MyRenderer.startRecordPressed(MyRenderer.java:344)
Аудио формат декларации:
MediaFormat format = new MediaFormat();
format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100);
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
format.setInteger(MediaFormat.KEY_BIT_RATE, 64000);
Аудио инициализация датчика:
mAudioEncoder = MediaCodec.createEncoderByType("audio/mp4a-latm");
mAudioEncoder.configure(mAudioFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); //<-This line fails
mAudioEncoder.start();
Кто-нибудь есть идеи, что это может быть? Странно, что это происходит только на некоторых устройствах. Любые предложения приветствуются!
Настройка выглядит нормально. Еще одна особенность вашего кода заключается в том, что вы объявляете локальный формат MediaFormat, но позже вы, как представляется, используете переменную-член «mAudioEncoder». Можете ли вы подтвердить, что правильный формат используется? Возможно, запишите значение 'mAudioFormat' прямо перед вызовом' configure() '. – fadden
Это просто экстракт, mAudioFormat инициализирован, я дважды проверял. Вы не знаете, что может быть проблемой? И как отладить это дальше? – Alexey
CTS EncoderTest делает то, что делает ваш код, поэтому он должен абсолютно работать на всех устройствах. Можете ли вы добавить выход из журнала «MediaFormat» к вашему вопросу? Любопытно, что неудачи выходят из «OMX.google.aac.decoder» для кодировщика, но, возможно, это нормально. (Я не очень много работал со звуком.) – fadden