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ą spakowane w moduły, które umożliwiają aktualizowanie zabezpieczeń i funkcji bez konieczności pełnej aktualizacji obrazu systemu.

W poniższych modułach znajdują się komponenty multimediów z możliwością aktualizacji.

Szczegółowe informacje o dodawaniu niestandardowych modułów wyodrębniania i dekoderów znajdziesz w artykule Dostosowywanie komponentów multimediów.

Ekstraktory multimediów

W Androidzie 9 i starszych wyodrębnianie jest kompilowane w jeden plik libstagefright.so. W Androidzie 10 lub nowszym wyodrębnianie multimediów to osobne komponenty. Każdy moduł wyodrębniania ma własny plik .so z punktem wejścia udostępniającym funkcję sniffera określającą, czy ekstrator może obsłużyć dany plik multimedialny, oraz funkcję fabryczną, 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 mediów automatycznie wczytuje wszystkie dostępne pliki ekstraktora .so, więc możesz tworzyć własne ekstraktory, dodając nowy plik .so bez konieczności modyfikowania pliku libstagefright ani innych bibliotek frameworku mediów. Możesz też sprawdzić, czy preferowany jest niestandardowy moduł wyodrębniania niż udostępniony przez Google.

MediaSession2 API

Interfejs MediaSession2 API pozwala aplikacjom do multimediów ujawniać elementy sterujące transportem i odtwarzać informacje w innych procesach, takich jak platforma Androida i inne aplikacje. Tego komponentu nie można dostosować.

Interfejs API MediaParser

Interfejs API MediaParser umożliwia firmie ExoPlayer efektywne wykorzystanie parserów kontenerów multimediów do wyodrębnienia 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 oparty jest MediaParser.

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

Kodeki multimediów

Moduł kodeków multimediów zawiera komponenty Codec2, które można zaktualizować. 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 oraz aktualizacji systemowej Google Play w wersji 292100200 lub nowszej możesz dostosować poniższe parametry alokacji pamięci ION.

Parametr Wartość domyślna Opis
heapMask 0xFFFFFFFF Dozwolone są wszystkie typy stosu.
allocFlags 0 Nie ustawiono żadnych flag.
minAlignment 0 Brak wyrównania.

Aby zastąpić parametry:

  1. Zarejestruj domyślną usługę android.hardware.media.c2 i podaj niestandardowe parametry użycia 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ły multimediów (com.android.media) i kodek mediów (com.android.media.swcodec) mają format APEX. Uwzględnione komponenty multimedialne korzystają tylko z interfejsów API NDK.

Aktualizacje

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

Aktualności multimedialne

Rysunek 1. Proces aktualizacji komponentu multimedialnego

Gdy platforma zainstaluje pakiet APEX, urządzenie uruchomi się ponownie i dołączy obraz dysku oraz procesy systemu multimedialnego (media.extractor i media.codec) wczytują zaktualizowane moduły od punktu podłączania.