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:
Media Ten moduł zawiera ekstraktory multimediów,
MediaSession2interfejsy API orazMediaParserinterfejsy API.Kodeki multimediów. Ten moduł zawiera komponenty Codec2, które można aktualizować.
MediaProvider. Ten moduł optymalizuje indeksowane metadane (audio, wideo i obrazy z kart SD i urządzeń USB urządzeń) oraz udostępnia te dane aplikacjom za pomocą publicznych interfejsów API MediaStore.
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:
Zarejestruj domyślną usługę
android.hardware.media.c2i podaj niestandardowe parametry użycia ION.Aby utworzyć nową usługę, skopiuj plik frameworks/av/media/codec2/hidl/services/vendor.cpp do repozytorium, a następnie zmodyfikuj
StoreImpl::Interface::SetIonUsage()zgodnie z potrzebami.Aby ponownie użyć procesu
media.codec(OMX), skopiuj i zarejestrujStoreImplklasę z frameworks/av/media/codec2/hidl/services/vendor.cpp do istniejącego plikumediacodec(frameworks/av/services/mediacodec/main_codecservice.cpp).
Dodaj ten kod do pliku
manifest.xmlurzą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.
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.