Moduły multimediów

Android 10 i nowsze wersje zawierają kilka komponentów multimedialnych, które można aktualizować. Umożliwiają one aktualizowanie komponentów platformy za pomocą infrastruktury Sklepu Google Play lub mechanizmu aktualizacji bezprzewodowej (OTA) udostępnianego przez partnera. Komponenty multimedialne są spakowane w moduły, które umożliwiają dostarczanie aktualizacji zabezpieczeń i funkcji bez konieczności aktualizowania pełnego obrazu systemu.

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

Więcej informacji 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 jeden plik libstagefright.so. W Androidzie 10 i nowszych wersjach ekstraktory multimediów są oddzielnymi komponentami. Każdy ekstraktor ma własny plik .so z punktem wejścia, który udostępnia funkcję sniffer określającą, czy ekstraktor może obsługiwać dany plik multimedialny, oraz funkcję factory tworzącą instancję ekstraktora dla danego pliku multimedialnego. Każdy ekstraktor ma nazwę (która ułatwia debugowanie) i wersję, która wskazuje, który ekstraktor jest najnowszy.

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

Interfejs 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 parserów kontenerów multimedialnych platformy w celu 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– interfejs API i implementacja 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ł Kodeki multimediów 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 (w szczególności w aktualizacji systemowej Google Play w wersji 292100200), możesz dostosować 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ć 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 alokacji pamięci ION.

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

Aby zmienić parametry:

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

  2. Dodaj ten kod do pliku manifest.xml urządzenia.

    <hal format=">hidl&<quot>;
        nameandroid.hardwar<e.med>ia.c2</name
       > transpo<rthwbinder>/tran<sport
     >   <version1>.0/ve<rsion
       > interfac<e
      >      nameIComp<onent>Store/nam<e
          >  insta<ncedefaul>t/ins<tance
        >/<inte>rface
    /hal
    

Format i zależności

Moduł Media (com.android.media) i moduł Kodeki multimediów (com.android.media.swcodec) są w formacie APEX. Dołączone komponenty multimedialne korzystają tylko z interfejsów NDK API.

Aktualizacje

Podczas aktualizacji komponenty platformy na urządzeniu wczytują pakiet APEX zawierający kod Java i kod natywny.

Aktualizacje multimediów

Rysunek 1. Proces aktualizacji komponentu multimedialnego

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