Я пытаюсь декодировать файлы AAC в моем приложении и инициализировать объект MediaFormat
, используемый для инициализации объекта MediaCodec
. Это код для настройки переменные для MediaFormat
объектаMediaFormat.getByteBuffer ("csd-0"), возвращающий нуль на некоторых устройствах
MediaExtractor mediaExtractor = new MediaExtractor();
try {
mediaExtractor.setDataSource(audioFilePath);
} catch (IOException e) {
return false;
}
Log.d(TAG, "Number of tracks in the file are:" + mediaExtractor.getTrackCount());
MediaFormat mediaFormat = mediaExtractor.getTrackFormat(0);
Log.d(TAG, "mediaFormat:" + mediaFormat.toString());
mSampleRate = mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);
Log.d(TAG, "mSampleRate: " + mSampleRate);
mChannels = mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);
Log.d(TAG, "mChannels number of channels: " + mChannels);
// Reading the duration from the file and converting from micro seconds to milliseconds.
mDuration = (int) (mediaFormat.getLong(MediaFormat.KEY_DURATION)/1000);
Log.d(TAG, "duration: " + mDuration);
// Getting the csd-0 info from the file ..
mCSDBuffer = mediaFormat.getByteBuffer("csd-0");
проблема я столкнулся в том, что заявление mCSDBuffer = mediaFormat.getByteBuffer("csd-0")
выбирает меня null
для одного файла на некоторых устройствах. Приложение находится в производстве, и я вижу эту ошибку на процессорах armabi-v7a/armabi
с уровнем API android API 17, 18 и 19, и большинство этих ошибок на устройствах Samsung. Любое направление на это?
У меня также есть пользовательская функция, с помощью которой я генерирую буфер «csd-0», как указано в http://stackoverflow.com/a/32154154/2606411. Могу ли я использовать это, чтобы вручную установить информацию? – Swapnil
Возможно, вы сможете это использовать. Но если вы это сделаете, вероятно, вы также должны лишить заголовки ADTS из фактических аудиопакетов. IMO, если MediaExtractor решает возвращать данные в формате ADTS (т. Е. Нет заголовков 'csd-0' и ADTS в пакетах), то MediaCodec должен иметь возможность обрабатывать его, поэтому я не думаю, что вам нужно будет делать какое-либо редактирование на все. – mstorsjo
Мы сами закодировали файлы, которые мы используем, и мы установили заголовки ADTS для всех из них, поэтому я предполагаю, что имеет смысл установить этот заголовок вручную. – Swapnil