Medienmodule

Android 10 oder höher umfasst mehrere aktualisierbare Medienkomponenten, die die Aktualisierung von Framework-Komponenten über die Google Play Store-Infrastruktur oder über einen von Partnern bereitgestellten Over-the-Air-Mechanismus (OTA) ermöglichen. Medienkomponenten sind in Modulen zusammengefasst, die die Bereitstellung von Sicherheitsupdates und Funktionsupdates ermöglichen, ohne dass ein vollständiges System-Image-Update erforderlich ist.

In den folgenden Modulen sind aktualisierbare Medienkomponenten vorhanden.

Einzelheiten zum Hinzufügen benutzerdefinierter Extraktoren und Decoder finden Sie unter Anpassen von Medienkomponenten .

Medienextraktoren

In Android 9 und niedriger werden Extraktoren in einer einzigen libstagefright.so Datei kompiliert. In Android 10 oder höher sind Medienextraktoren separate Komponenten. Jeder Extraktor verfügt über eine eigene .so Datei mit einem Einstiegspunkt, der eine Sniffer- Funktion bereitstellt, um festzustellen, ob der Extraktor die angegebene Mediendatei verarbeiten kann, sowie eine Factory- Funktion, die eine Instanz des Extraktors für die angegebene Mediendatei erstellt. Jeder Extraktor wird benannt (um beim Debuggen zu helfen) und mit einer Version versehen, um anzugeben, welcher Extraktor der neueste ist.

Das Medien-Framework lädt automatisch alle verfügbaren Extraktor .so Dateien, sodass Sie Ihre eigenen Extraktoren erstellen können, indem Sie eine neue .so Datei hinzufügen, ohne libstagefright oder andere Medien-Framework-Bibliotheken ändern zu müssen. Sie können auch sicherstellen, dass ein benutzerdefinierter Extraktor dem von Google bereitgestellten Extraktor vorgezogen wird.

MediaSession2-API

Mit der MediaSession2-API können Medien-Apps ihre Transportsteuerung und Wiedergabeinformationen anderen Prozessen wie dem Android-Framework und anderen Apps zur Verfügung stellen. Diese Komponente kann nicht angepasst werden.

MediaParser-API

Mit der MediaParser-API kann ExoPlayer Framework-Mediencontainer-Parser effizient nutzen, um Medienbeispiele aus Mediencontainern zu extrahieren. MediaParser enthält die folgenden Änderungen an den Quellcodegrenzen:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java . API- und Thin-Layer-Implementierung.

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

Die MediaParser-API kann nicht angepasst werden. Um MediaParser zu testen, verwenden Sie die Tests in cts/tests/tests/mediaparser/ .

Mediencodecs

Das Media Codecs-Modul enthält aktualisierbare Software-Codec2-Komponenten. Die Unterstützung für die Anpassung unterscheidet sich zwischen den Versionen:

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

  • In Android 9 oder niedriger ist die OMX-Codec-API nicht aktualisierbar, Sie können sie jedoch weiterhin in der Herstellerpartition verwenden.

ION-Speicherzuordnung

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

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

So überschreiben Sie die Parameter:

  1. Registrieren Sie einen Standarddienst android.hardware.media.c2 und stellen Sie benutzerdefinierte ION-Nutzungsparameter bereit.

  2. Fügen Sie dem Gerät manifest.xml den folgenden Code hinzu.

    <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 Medienmodul ( com.android.media ) und das Mediencodec-Modul ( com.android.media.swcodec ) liegen im APEX- Format vor. Enthaltene Medienkomponenten basieren nur auf NDK-APIs.

Aktualisierung

Bei einem Update laden die Framework-Komponenten auf dem Gerät ein APEX-Paket, das Java und nativen Code enthält.

Medienaktualisierungen

Abbildung 1. Der Aktualisierungsablauf der Medienkomponente

Nachdem das Framework das APEX-Paket installiert hat, startet das Gerät neu und stellt das Festplatten-Image bereit. Die Mediensystemprozesse ( media.extractor und media.codec ) laden die aktualisierten Module vom Bereitstellungspunkt.