J'essaie de décoder les fichiers codés AAC dans mon application et d'initialiser l'objet MediaFormat
utilisé pour initialiser mon objet MediaCodec
, Ceci est le code pour configurer le variables pour l'objet MediaFormat
MediaFormat.getByteBuffer ("csd-0") Retourne null sur certains appareils
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");
le problème que je suis face est que la déclaration mCSDBuffer = mediaFormat.getByteBuffer("csd-0")
me va chercher null
pour le même fichier sur certains appareils. L'application est en production et je vois cette erreur sur les appareils de processeurs armabi-v7a/armabi
avec niveau d'API Android de 17, 18 et 19 et la plupart de ces erreurs sont sur les appareils Samsung. Toute direction à ce sujet?
J'ai également une fonction personnalisée à l'aide de laquelle je génère le tampon "csd-0" comme mentionné dans http://stackoverflow.com/a/32154154/2606411. Puis-je l'utiliser pour définir manuellement l'info? – Swapnil
Vous pourriez être en mesure d'utiliser cela. Mais si vous le faites, vous devriez probablement également retirer les en-têtes ADTS des paquets audio réels. IMO, si MediaExtractor choisit de renvoyer des données au format ADTS (c'est-à-dire pas d'en-têtes 'csd-0' et ADTS dans les paquets), alors MediaCodec devrait être capable de le gérer, donc je ne pense pas que vous devriez tout. – mstorsjo
Nous avons nous-mêmes encodé les fichiers que nous utilisons et nous avons défini des en-têtes ADTS pour chacun d'entre eux, donc je suppose qu'il est logique de définir cet en-tête manuellement. – Swapnil