Modules média

Android 10 ou version ultérieure comprend plusieurs composants multimédias pouvant être mis à jour qui permettent de mettre à jour les composants du framework via l'infrastructure 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 une mise à jour complète de l'image système.

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

Pour plus de détails sur l'ajout d'extracteurs et de décodeurs personnalisés, consultez Personnalisation des composants multimédias .

Extracteurs de mé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 de médias sont des composants distincts. Chaque extracteur possède son propre fichier .so avec un point d'entrée qui fournit une fonction de renifleur pour déterminer si l'extracteur peut gérer le fichier multimédia donné, et une fonction d'usine 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 d'extracteur .so disponibles, vous pouvez donc créer vos propres extracteurs en ajoutant un nouveau fichier .so sans avoir à modifier libstagefright ou d'autres bibliothèques de 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 contrôles 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 des conteneurs multimédias. MediaParser inclut les modifications suivantes dans les limites du code source :

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java . Implémentation d'API et de couche mince.

  • external/exoplayer/ . Sources verbatim Exoplayer sur lesquelles MediaParser est construit.

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 Media Codecs comprend des composants logiciels Codec2 pouvant être mis à jour. La prise en charge de la personnalisation diffère 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 plus de détails).

  • Sous Android 9 ou version antérieure, l'API du codec OMX ne peut pas être mise à jour, mais vous pouvez toujours l'utiliser dans la partition du fournisseur.

Allocation de mémoire ION

Sous Android 11 ou version ultérieure et Google Play System Update 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 autorisés.
allocFlags 0 Aucun drapeau n'est 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 au manifest.xml de l’appareil.

    <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 reposent uniquement 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.

Mises à jour des médias

Figure 1. Flux de mise à jour du composant multimédia

Une fois que le framework a installé le package APEX, le périphérique redémarre et monte l'image disque et les processus du système multimédia ( media.extractor et media.codec ) chargent les modules mis à jour à partir du point de montage.