Décodage AAC en utilisant MediaCodec API sur Android
Je suis en train d'utiliser les MediaCodec API sur Android pour décoder un flux AAC. (C'est cru AAC.) J'ai essayé d'utiliser le MediaFormat.createAudioFormat() pour créer le format de l'objet à transmettre à MediaCodec.configurer(), mais j'ai continué de faire des erreurs lors de l'utilisation de l'AAC (audio/mp4a-latm). (Il fonctionne avec les formats MP3 (audio/mpeg) quoique...)
Enfin, j'ai créé un MediaExtractor pour un fichier AAC et regarda le format de l'objet qu'elle produisait. J'ai vu qu'il comprenait la touche "csd-0" pour un ByteBuffer composé de deux octets à la fois avec la valeur 0x12. Si je comprend que la clé et la valeur dans le format de l'objet que j'ai utilisé pour configurer le codec AAC, tout fonctionne.
Quelqu'un a une idée de ce qui se passe? La documentation précise que je ne devrais pas la configuration de cette touche. Quelqu'un aurait-il un pointeur vers MediaCodec exemples pour décoder les fichiers AAC sans l'aide de MediaExtractor pour générer le format de l'objet?
OriginalL'auteur Benjamin Reed | 2012-10-17
Vous devez vous connecter pour publier un commentaire.
Oui, le codec config 2 octets sont les initiales de vous recevoir. Et oui, c'est cru aac blocs de données. Vous pouvez voir comment je tire le format ci-dessous lors de l'encodage. J'ai d'abord essayé de suivre la documentation, qui dit qu'ils sont en latm format, et a essayé de l'analyser. J'ai ensuite trouvé un certain 'diff' sur l'android documentation qui a dit que la sortie est en effet brut des blocs. Sachant qu'ensuite, c'était simplement une question de choisir un conteneur pour mes besoins. En particulier, j'ai besoin de l'adts contenant plutôt que le format flv ou mp4.
De copier les données de la charge utile dans un tableau qui est assez grand pour votre conteneur, il suffit d'ajouter sur votre bits. Alors, après avoir écumé internet pour ma solution, j'ai produit le code suivant:
Utilisant quelque chose comme ceci:
Les config sont les audio config, et en général, les deux premiers octets de sortie par le latm media codec. Le BufferINfo objet doit avoir Codec_info drapeau.
OriginalL'auteur Andy--S
J'ai utilisé le code ci-dessous et ajouter de l'ES qui a supprimé les ADTS en-tête, il pourrait bien fonctionner, mais je ne sais vraiment pas pourquoi devriez mettre "csd-0", ou codec va se produire d'erreur
OriginalL'auteur huntyy
Je n'avais pas de problèmes de décodage/jouer AAC de contenu sur les quelques appareils que j'ai testé. Mon approche a été d'utiliser la MediaExtractor tout d'abord de définir la source de Données, puis initialiser le MediaFormat et enfin faire le travail dans une boucle avec des tampons envoyé à/à/à partir de la MediaCodec. Pour la surface, j'ai utilisé nulle, c'est juste un lecteur audio, donc il n'y a rien à afficher.
J'ai également mis en place un code d'exemple qu'un Androïde de la bibliothèque, qui est disponible sur mon blog: http://www.pocketmagic.net/2014/06/android-audio-player-using-mediacodec-mediaextractor/
OriginalL'auteur radhoo