Modules multimédias

Android 10 ou version ultérieure inclut plusieurs composants multimédias pouvant être mis à jour qui permettent de mettre à jour les composants du framework via l'infrastructure du Google Play Store ou un mécanisme Over The Air (OTA) fourni par un partenaire. Les composants multimédias sont empaquetés ensemble dans des modules qui permettent de fournir des mises à jour de sécurité et de fonctionnalités sans nécessiter de mise à jour complète de l'image système.

Les composants multimédias pouvant être mis à jour existent dans les modules suivants.

Pour en savoir plus sur l'ajout d'extracteurs et de décodeurs personnalisés, consultez la section Personnaliser les composants multimédias.

Extracteurs multimédias

Sous Android 9 et versions antérieures, les extracteurs sont compilés dans un seul fichier libstagefright.so. Sous Android 10 ou version ultérieure, les extracteurs multimédias sont des composants distincts. Chaque extracteur possède son propre fichier .so avec un point d'entrée qui fournit une fonction sniffer pour déterminer si l'extracteur peut gérer le fichier multimédia donné, et une fonction factory qui crée une instance de l'extracteur pour ce fichier multimédia. Chaque extracteur est nommé (pour faciliter le débogage) et versionnée 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. Impossible de personnaliser ce composant.

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. API et implémentation de couches minces.

  • external/exoplayer/ : sources Exoplayer mot pour mot sur lesquelles MediaParser est créé.

L'API MediaParser ne peut pas être personnalisée. Pour tester MediaParser, utilisez les tests de cts/tests/tests/mediaparser/.

Codecs multimédias

Le module Media Codecs inclut des composants logiciels Codec2 pouvant être mis à jour. La prise en charge de la personnalisation varie selon les versions:

  • Sous Android 11 ou version ultérieure (en particulier la mise à jour du système Google Play v292100200), vous pouvez personnaliser les paramètres d'allocation de mémoire ION (voir ci-dessous pour en savoir plus).

  • Sous 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

Sous 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 Aucun indicateur défini.
minAlignment 0 Aucun alignement.

Pour remplacer les paramètres :

  1. Enregistrez un service android.hardware.media.c2 par défaut et fournissez des paramètres d'utilisation ION personnalisés.

  2. 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

Le module Media (com.android.media) et le module Media Codec (com.android.media.swcodec) sont au format APEX. Les composants multimédias inclus ne s'appuient que sur les API du 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.

Actualités des médias

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 d'installation.