Moduły multimediów

Android 10 lub nowszy zawiera kilka komponentów multimedialnych, które można aktualizować. Umożliwiają one aktualizowanie komponentów platformy za pomocą infrastruktury Sklepu Google Play lub mechanizmu OTA dostarczonego przez partnera. Komponenty multimedialne są pakowane w moduły, które umożliwiają dostarczanie aktualizacji zabezpieczeń i funkcji bez konieczności aktualizowania całego obrazu systemu.

Komponenty multimedialne, 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 multimedialnych.

Ekstraktory multimediów

W Androidzie 9 i starszych wersjach ekstraktory są kompilowane w jednym plikulibstagefright.so. W Androidzie 10 lub nowszym ekstraktory multimediów są osobnymi komponentami. Każdy ekstraktor ma własny .so plik z punktem wejścia, który udostępnia funkcję sniffer do określania, 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.

Platforma multimedialna automatycznie wczytuje wszystkie dostępne pliki .so, dzięki czemu możesz tworzyć własne ekstraktory, dodając nowy plik .so bez konieczności modyfikowania .so ani innych bibliotek platformy multimedialnej.libstagefright Możesz też zadbać o to, aby ekstraktor niestandardowy był preferowany względem ekstraktora dostarczonego przez Google.

MediaSession2 API

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

MediaParser API

Interfejs MediaParser API umożliwia ExoPlayerowi efektywne korzystanie z parserów kontenerów multimedialnych platformy do wyodrębniania próbek multimedialnych z kontenerów multimedialnych. MediaParser zawiera te zmiany w granicach 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 Exoplayera, 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 (a konkretnie w aktualizacji systemowej Google Play w wersji 292100200) możesz dostosować parametry przydzielania pamięci ION (szczegóły znajdziesz poniżej).

  • W Androidzie 9 lub starszym interfejs OMX API kodeka nie może być aktualizowany, ale nadal możesz go używać w partycji dostawcy.

Alokacja pamięci ION

W Androidzie 11 lub nowszym oraz w aktualizacji systemowej Google Play w wersji 292100200 lub nowszej możesz dostosować te parametry przydzielania pamięci ION:

Parametr Wartość domyślna Opis
heapMask 0xFFFFFFFF Dozwolone są wszystkie typy sterty.
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ł multimedialny (com.android.media) i moduł kodeka multimedialnego (com.android.media.swcodec) są w formacie APEX. Komponenty multimedialne są oparte wyłącznie na interfejsach NDK API.

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

Po zainstalowaniu pakietu APEX przez platformę urządzenie uruchomi się ponownie i zamontuje obraz dysku, a procesy systemu multimedialnego (media.extractormedia.codec) wczytają zaktualizowane moduły z punktu montowania.