Medienmodule

Android 10 oder höher umfasst mehrere aktualisierbare Medienkomponenten, die es ermöglichen, Framework-Komponenten über die Google Play Store-Infrastruktur oder über einen vom Partner bereitgestellten OTA-Mechanismus (Over-the-Air) zu aktualisieren. Medienkomponenten werden in Modulen zusammengefasst, sodass Sicherheits- und Funktionsupdates bereitgestellt werden können, ohne dass ein vollständiges Systemimage-Update erforderlich ist.

Aktualisierbare Media-Komponenten sind in den folgenden Modulen verfügbar.

Weitere Informationen zum Hinzufügen benutzerdefinierter Extraktoren und Decodern finden Sie unter Media-Komponenten anpassen.

Media-Extraktoren

In Android 9 und niedriger werden Extraktoren in einer einzigen libstagefright.so-Datei kompiliert. In Android 10 oder höher sind Media-Extraktoren separate Komponenten. Jeder Extraktor hat eine eigene .so-Datei mit einem Einstiegspunkt, der eine Sniffer-Funktion zum Bestimmen enthält, ob der Extraktor die angegebene Media-Datei verarbeiten kann, und eine Factory-Funktion, die eine Instanz des Extraktors für die angegebene Media-Datei erstellt. Jeder Extraktor hat einen Namen (zur Unterstützung beim Debugging) und eine Versionsnummer, um anzugeben, welcher Extraktor der neueste ist.

Das Media-Framework lädt automatisch alle verfügbaren .so-Dateien für Extraktoren. Sie können also eigene Extraktoren erstellen, indem Sie eine neue .so-Datei hinzufügen, ohne libstagefright oder andere Media-Framework-Bibliotheken ändern zu müssen. Sie können auch dafür sorgen, dass ein benutzerdefinierter Extrahierer dem von Google bereitgestellten Extrahierer vorgezogen wird.

MediaSession2 API

Mit der MediaSession2 API können Media-Apps ihre Transportsteuerelemente und Wiedergabeinformationen für andere Prozesse wie das Android-Framework und andere Apps verfügbar machen. Diese Komponente kann nicht angepasst werden.

MediaParser API

Mit der MediaParser API kann ExoPlayer Framework-Media-Container-Parser effizient nutzen, um Media-Samples aus Media-Containern zu extrahieren. MediaParser umfasst die folgenden Änderungen an den Grenzen des Quellcodes:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java. Implementierung der API und der dünnen Schicht.

  • external/exoplayer/: Exoplayer-Quellen, auf denen MediaParser basiert.

Die MediaParser API kann nicht angepasst werden. Verwenden Sie zum Testen von MediaParser die Tests in cts/tests/tests/mediaparser/.

Medien-Codecs

Das Modul „Media Codecs“ enthält aktualisierbare Softwarekomponenten für Codec2. Die Unterstützung für die Anpassung unterscheidet sich je nach Release:

  • Unter Android 11 oder höher (insbesondere Google Play-Systemupdate v292100200) können Sie die Parameter für die ION-Speicherzuweisung anpassen (siehe unten).

  • In Android 9 oder niedriger kann die OMX-Codec-API nicht aktualisiert werden, aber Sie können sie weiterhin in der Anbieterpartition verwenden.

ION-Arbeitsspeicherzuweisung

Unter Android 11 oder höher und Google Play-Systemupdate v292100200 oder höher können Sie die folgenden Parameter für die ION-Speicherzuweisung anpassen.

Parameter Standardwert Beschreibung
heapMask 0xFFFFFFFF Alle Heap-Typen sind zulässig.
allocFlags 0 Keine Flags festgelegt.
minAlignment 0 Keine Ausrichtung.

So überschreiben Sie die Parameter:

  1. Registrieren Sie einen Standarddienst für android.hardware.media.c2 und geben Sie benutzerdefinierte ION-Nutzungsparameter an.

  2. Fügen Sie den folgenden Code in das Gerät manifest.xml ein.

    <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 und Abhängigkeiten

Das Media-Modul (com.android.media) und das Media Codec-Modul (com.android.media.swcodec) sind im APEX-Format. Die enthaltenen Media-Komponenten basieren nur auf NDK-APIs.

Updates

Während eines Updates laden die Framework-Komponenten auf dem Gerät ein APEX-Paket, das Java- und nativen Code enthält.

Media Updates

Abbildung 1: Ablauf der Aktualisierung von Media-Komponenten

Nachdem das Framework das APEX-Paket installiert hat, wird das Gerät neu gestartet und das Laufwerk-Image wird eingebunden. Die Media-Systemprozesse (media.extractor und media.codec) laden die aktualisierten Module vom Mount-Punkt.