Vous pouvez étendre l'extracteur de support et les composants du codec multimédia à l'aide du fournisseur
. Les API MediaSession2 et MediaParser ne peuvent pas être personnalisées (mais vous
les modifications en amont pour les anciennes API MediaPlayer
et MediaSession
).
Pour prendre en charge d'autres types de contenus multimédias dans Android Media Framework, vous devez : créer un extracteur et un décodeur personnalisés ; Par exemple : Pour ajouter la prise en charge des vidéos Windows Media dans des fichiers AVI, vous devez créer un fichier AVI Extractor et un Decoder vidéo Windows Media.
À propos des extensions
Si les extracteurs de médias par défaut ne répondent pas à vos exigences, vous pouvez placer
plug-ins d'extraction personnalisés dans /system/lib[64]/extractors/
. Processus d'extraction
charge automatiquement les plug-ins extracteurs à partir du package APEX fourni par Google et
de /system/lib[64]/extractors/
.
De même, vous pouvez configurer des services de codec multimédia personnalisés qui utilisent le codec Codec 2.0
définie dans frameworks/av/media/codec2/core/
. Pour une
implémentation, consultez frameworks/av/media/codec2/hidl/services/
. La
le point d'entrée de la bibliothèque est l'interface C2ComponentStore
. Pour consulter un exemple, reportez-vous à
à l'implémentation du magasin de codec logiciel par défaut à l'adresse
frameworks/av/media/codec2/vndk/C2Store.cpp
Si vous utilisez votre propre fichier APEX, structurez le service de codec et chargez le fichier APEX.
à l'aide des mêmes processus que le service mediaswcodec
. Pour ce faire, définissez
bibliothèque partagée de premier niveau responsable
de l'enregistrement de tous les composants C2, puis
créer un package APEX (avec des dépendances transitives) qui se trouve dans le fournisseur
partition. Lorsque le processus de service du codec
fournisseur commence, il peut ensuite charger ce
point d'entrée de premier niveau.
Créer un extracteur
Lorsque vous ajoutez un extracteur pour un nouveau format, assurez-vous que celui-ci dépend uniquement de
des API NDK stables et ne dépend d'aucune API privée. Les extracteurs doivent
implémenter l'API définie par
frameworks/av/include/media/MediaExtractorPluginApi.h
et peuvent utiliser le langage C++
des wrappers de commodité dans
frameworks/av/include/media/MediaExtractorPluginHelper.h
Comme Android
La version 10 ou ultérieure n'accepte que la version la plus élevée
API d'extraction, veillez à modéliser votre extracteur d'après celui-ci avec le
le numéro de version le plus élevé de l'API.
Placez des extracteurs personnalisés dans /system/lib/64/extractors
ou dans un apex de fournisseur,
qui s'ouvre avec l'apex Google contenant les extracteurs Google. À
vérifiez que le framework a chargé votre extracteur, exécutez la commande suivante.
adb shell dumpsys media.extractor
Vous devriez obtenir une liste des extracteurs disponibles semblable à ce qui suit.
Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)
Si votre extracteur personnalisé prend en charge un format déjà pris en charge par un
fourni par Google, vous pouvez forcer le framework à utiliser votre extracteur en
Utiliser la fonction Sniff()
pour renvoyer un niveau de confiance supérieur à celui
fourni par Google.
Lorsque Media Framework charge votre extracteur (à partir de /system/lib/64/extractors
ou d'un fournisseur APEX), il reconnaît le fichier et obtient des informations sur son
contenus. L'étape suivante consiste à ajouter un décodeur pour le format afin que le framework puisse
comprendre comment analyser
le contenu du fichier.
Créer un décodeur personnalisé
Vous avez besoin d'un décodeur personnalisé pour tout format qui n'est pas encore compatible avec une décodeur fourni par Google. Exemple :
Pour ajouter la compatibilité avec Media Framework pour les fichiers AVI au format MP3, vous devez disposer d'un fichier AVI mais n'avez pas besoin d'un décodeur MP3, car il en existe déjà un.
Pour ajouter la compatibilité avec Media Framework pour les fichiers AVI contenant Windows Media, vous devez besoin à la fois d’un extracteur AVI et d’un décodeur Windows Media.
L'ajout d'un nouveau décodeur est semblable à l'ajout de vos propres décodeurs matériels pour AVC ou HEVC.
Alors que l'extracteur publie le type MIME des pistes multimédias qu'il
les codecs compatibles avec ces types MIME doivent être présents
pour qu'il soit entièrement pris en charge. La chaîne de type MIME réelle utilisée est strictement
accord entre l'extracteur et le codec (la chaîne n'a pas besoin d'être
ajouté au fichier MediaDefs.h
).
Intégrer à l'outil d'analyse multimédia
L'outil d'analyse multimédia recherche de nouveaux types de fichiers et les ajoute à la base de données multimédia.
Pour que l'outil d'analyse multimédia puisse gérer votre type de fichier personnalisé, il doit
le savoir. Sur Android 10 ou version ultérieure, MimeUtils
(dans
libcore
) gère le mappage de la MIME à l'extension. Auparavant, ce mappage était
géré dans le fichier MediaFile.java
, qui continue de contenir un mappage à partir de
Type MIME vers constantes de format MTP.
Un extracteur peut exporter une liste des extensions de nom de fichier qu'il accepte (par exemple, MP3
ou MP4). Cependant, seul LegacyMediaScanner
l'utilise : cela n'a aucun effet sur
ModernMediaScanner
, utilisé par défaut.