Android 10 ou version ultérieure inclut plusieurs composants multimédias pouvant être mis à jour, ce qui permet de mettre à jour les composants du framework via l'infrastructure du Google Play Store ou via un mécanisme OTA (Over-The-Air) fourni par un partenaire. Les composants multimédias sont regroupés dans des modules qui permettent de fournir des mises à jour de sécurité et des mises à jour de fonctionnalités sans nécessiter de mise à jour complète de l'image système.
Des composants multimédias pouvant être mis à jour existent dans les modules suivants.
Media. Ce module inclut les extracteurs de contenu multimédia, les API
MediaSession2
et les APIMediaParser
.Codecs multimédias Ce module inclut des composants Codec2 logiciels pouvant être mis à jour.
MediaProvider. Ce module optimise les métadonnées indexées (audio, vidéo et images provenant de cartes SD et d'appareils USB) et met ces données à la disposition des applications via les API publiques MediaStore.
Pour savoir comment ajouter des extracteurs et des décodeurs personnalisés, consultez Personnaliser les composants multimédias.
Extracteurs de contenu multimédia
Dans Android 9 et les versions antérieures, les extracteurs sont compilés dans un seul fichier libstagefright.so
. Dans Android 10 ou version ultérieure, les extracteurs de contenu multimédia sont des composants distincts. Chaque extracteur possède son propre fichier .so
avec un point d'entrée qui fournit une fonction sniffer permettant de déterminer si l'extracteur peut gérer le fichier multimédia donné, ainsi qu'une fonction factory qui crée une instance de l'extracteur pour le fichier multimédia donné. Chaque extracteur est nommé (pour faciliter le débogage) et versionné pour indiquer quel extracteur est le plus récent.
Le framework multimédia charge automatiquement tous les fichiers .so
d'extracteur disponibles. Vous pouvez donc créer vos propres extracteurs en ajoutant un fichier .so
sans avoir à modifier libstagefright
ni d'autres bibliothèques du framework multimédia. Vous pouvez également vous assurer qu'un extracteur personnalisé est préféré à l'extracteur fourni par Google.
API MediaSession2
L'API MediaSession2 permet aux applications multimédias d'exposer leurs commandes de transport et leurs informations de lecture à d'autres processus tels que le framework Android et d'autres applications. Ce composant ne peut pas être personnalisé.
API MediaParser
L'API MediaParser permet à ExoPlayer d'utiliser efficacement les analyseurs de conteneurs multimédias du framework pour extraire des échantillons multimédias à partir de conteneurs multimédias. MediaParser inclut les modifications suivantes apportées aux limites du code source :
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. Implémentation de l'API et de la couche fine.external/exoplayer/
. Sources verbatim d'ExoPlayer sur lesquelles MediaParser est basé.
L'API MediaParser ne peut pas être personnalisée. Pour tester MediaParser, utilisez les tests dans cts/tests/tests/mediaparser/
.
Codecs multimédias
Le module Codecs multimédias inclut des composants Codec2 logiciels pouvant être mis à jour. La compatibilité avec la personnalisation diffère selon les versions :
Dans Android 11 ou version ultérieure (plus précisément Mise à jour du système Google Play v292100200), vous pouvez personnaliser les paramètres d'allocation de mémoire ION (voir ci-dessous pour plus d'informations).
Dans Android 9 ou version antérieure, l'API de codec OMX n'est pas actualisable, mais vous pouvez toujours l'utiliser dans la partition du fournisseur.
Allocation de mémoire ION
Dans Android 11 ou version ultérieure et la mise à jour du système Google Play v292100200 ou version ultérieure, vous pouvez personnaliser les paramètres suivants pour l'allocation de mémoire ION.
Paramètre | Valeur par défaut | Description |
---|---|---|
heapMask |
0xFFFFFFFF |
Tous les types de tas sont autorisés. |
allocFlags |
0 |
Aucune option n'est définie. |
minAlignment |
0 |
Aucun alignement. |
Pour remplacer les paramètres :
Enregistrez un service
android.hardware.media.c2
par défaut et fournissez des paramètres d'utilisation ION personnalisés.Pour créer un service, copiez le fichier frameworks/av/media/codec2/hidl/services/vendor.cpp dans votre dépôt, puis modifiez
StoreImpl::Interface::SetIonUsage()
selon vos besoins.Pour réutiliser le processus
media.codec
(OMX), copiez et enregistrez la classeStoreImpl
de frameworks/av/media/codec2/hidl/services/vendor.cpp dans le fichiermediacodec
existant (frameworks/av/services/mediacodec/main_codecservice.cpp).
Ajoutez le code suivant à l'appareil
manifest.xml
.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
Format et dépendances
Les modules Média (com.android.media
) et Codec média (com.android.media.swcodec
) sont au format APEX. Les composants multimédias inclus ne s'appuient que sur les API NDK.
Mises à jour
Lors d'une mise à jour, les composants du framework sur l'appareil chargent un package APEX contenant du code Java et natif.
Figure 1 : Flux de mise à jour du composant multimédia
Une fois que le framework a installé le package APEX, l'appareil redémarre et monte l'image disque. Les processus du système multimédia (media.extractor
et media.codec
) chargent les modules mis à jour à partir du point de montage.