Moduły multimedialne

Android 10 lub nowszy zawiera kilka komponentów multimediów, które można aktualizować za pomocą infrastruktury Sklepu Google Play lub mechanizmu OTA udostępnianego przez partnera. Komponenty multimediów są pakowane w moduły, co umożliwia dostarczanie aktualizacji zabezpieczeń i funkcji bez konieczności aktualizacji całego obrazu systemu.

Komponenty multimediów, które można aktualizować, znajdują się w tych modułach:

Szczegółowe informacje o dodawaniu niestandardowych ekstraktorów i dekoderów znajdziesz w artykule Dostosowywanie komponentów MediaComponent.

Ekstraktory multimediów

W Androidzie 9 i starszych wyodrębnianie jest kompilowane w jeden plik libstagefright.so. W Androidzie 10 lub nowszym wyodrębniciele multimediów są oddzielnymi komponentami. Każdy ekstraktor ma własny plik .so z punktem wejścia, który udostępnia funkcję sniffer służącą do sprawdzania, czy ekstraktor może obsłużyć dany plik multimedialny, oraz funkcję factory, która tworzy instancję ekstraktora dla danego pliku multimedialnego. Każdy ekstraktor ma nazwę (aby ułatwić debugowanie) i wersję, która wskazuje, który ekstraktor jest najnowszy.

Framework multimediów automatycznie wczytuje wszystkie dostępne pliki .so, dzięki czemu możesz tworzyć własne wyodrębnianie, dodając nowy plik .so bez konieczności modyfikowania pliku libstagefright ani innych bibliotek frameworku multimediów. Możesz też określić, że niestandardowy ekstraktor ma być preferowany przed ekstraktorem dostarczonym przez Google.

MediaSession2 API

Interfejs MediaSession2 API umożliwia aplikacjom multimedialnym udostępnianie elementów sterujących transportem i informacji o odtwarzaniu innym procesom, takim jak platforma Android i inne aplikacje. Tego komponentu nie można dostosować.

Interfejs MediaParser API

Interfejs MediaParser API umożliwia ExoPlayerowi efektywne korzystanie z analizatorów kontenerów multimedialnych frameworku do wyodrębniania próbek multimediów z kontenerów multimediów. MediaParser zawiera te zmiany w ograniczeniach kodu źródłowego:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java. Implementacja interfejsu API i cienkiej warstwy.

  • external/exoplayer/. Źródła dosłowne Exoplayer, na których opiera się MediaParser.

Interfejsu MediaParser API nie można dostosować. Aby przetestować MediaParser, użyj testów w cts/tests/tests/mediaparser/.

Kodeki multimediów

Moduł kodeków multimedialnych zawiera komponenty Codec2, które można aktualizować. Obsługa dostosowywania różni się w zależności od wersji:

  • W Androidzie 11 lub nowszym (szczególnie w aktualizacji systemu Google Play w wersji 292100200) możesz dostosowywać parametry alokacji pamięci ION (szczegóły poniżej).

  • W Androidzie 9 lub starszym interfejs OMX codec API nie jest aktualizowany, ale nadal możesz go używać na partycji dostawcy.

Przydział pamięci ION

W Androidzie 11 lub nowszym i aktualizacji systemu Google Play w wersji 292100200 lub nowszej możesz dostosować te parametry do alokacji pamięci ION.

Parametr Wartość domyślna Opis
heapMask 0xFFFFFFFF Dozwolone są wszystkie typy stosu.
allocFlags 0 Nie ustawiono flag.
minAlignment 0 Brak dopasowania.

Aby zastąpić parametry:

  1. Zarejestruj domyślną usługę android.hardware.media.c2 i podaj niestandardowe parametry ION.

  2. Dodaj ten kod do urządzenia 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 i zależności

Moduł Media (com.android.media) i moduł Media Codec (com.android.media.swcodec) są w formacie APEX. Zawarte komponenty multimedialne korzystają tylko z interfejsów NDK.

Aktualizacje

Podczas aktualizacji komponenty platformy na urządzeniu wczytują pakiet APEX, który zawiera kod Java i kod natywny.

Aktualizacje multimediów

Rysunek 1. Proces aktualizacji komponentu multimedialnego

Gdy platforma framework zainstaluje pakiet APEX, urządzenie się zrestartuje i zamontuje obraz dysku. Następnie procesy systemu multimedialnego (media.extractormedia.codec) wczytują zaktualizowane moduły z punktu zamontowania.