Android 10 lub nowszy zawiera kilka aktualizowalnych komponentów multimedialnych, które umożliwiają aktualizację komponentów platformy za pośrednictwem infrastruktury Sklepu Google Play lub za pośrednictwem zapewnianego przez partnera mechanizmu bezprzewodowego (OTA). Komponenty multimedialne są spakowane razem w moduły, które umożliwiają dostarczanie aktualizacji zabezpieczeń i aktualizacji funkcji bez konieczności pełnej aktualizacji obrazu systemu.
Komponenty multimedialne, które można aktualizować, znajdują się w następujących modułach.
Głoska bezdźwięczna. Moduł ten zawiera ekstraktory multimediów , interfejsy API
MediaSession2
i interfejsy APIMediaParser
.Kodeki multimedialne . Moduł ten zawiera aktualizowalne komponenty oprogramowania Codec2.
Dostawca multimediów . Moduł ten optymalizuje indeksowane metadane (audio, wideo i obrazy z kart SD i urządzeń USB) i udostępnia te dane aplikacjom za pośrednictwem publicznych interfejsów API MediaStore .
Aby uzyskać szczegółowe informacje na temat dodawania niestandardowych ekstraktorów i dekoderów, zobacz Dostosowywanie komponentów multimedialnych .
Ekstraktory mediów
W systemie Android 9 i starszych ekstraktory są kompilowane w jeden plik libstagefright.so
. W systemie Android 10 lub nowszym ekstraktory multimediów stanowią osobne komponenty. Każdy ekstraktor ma swój własny plik .so
z punktem wejścia, który udostępnia funkcję sniffera w celu ustalenia, czy ekstraktor 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 pomóc w debugowaniu) i posiada wersję, aby wskazać, który ekstraktor jest najnowszy.
Struktura multimediów automatycznie ładuje wszystkie dostępne pliki ekstraktora .so
, więc możesz tworzyć własne ekstraktory, dodając nowy plik .so
bez konieczności modyfikowania bibliotek libstagefright
lub innych bibliotek struktury multimediów. Możesz także upewnić się, że ekstraktor niestandardowy będzie preferowany zamiast ekstraktora udostępnianego przez Google.
API MediaSession2
Interfejs API MediaSession2 umożliwia aplikacjom multimedialnym udostępnianie kontroli transportu i informacji o odtwarzaniu innym procesom, takim jak platforma Android i inne aplikacje. Tego komponentu nie można dostosować.
API MediaParsera
Interfejs API MediaParser umożliwia ExoPlayerowi efektywne wykorzystanie frameworkowych analizatorów kontenerów multimediów w celu wyodrębnienia próbek multimediów z kontenerów multimediów. MediaParser zawiera następujące zmiany w granicach kodu źródłowego:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. Implementacja API i cienkowarstwowa.external/exoplayer/
. Dosłowne źródła Exoplayer, na których zbudowano MediaParser.
Interfejsu API MediaParser nie można dostosować. Aby przetestować MediaParser, użyj testów w cts/tests/tests/mediaparser/
.
Kodeki multimedialne
Moduł Media Codecs zawiera aktualizowalne komponenty oprogramowania Codec2. Obsługa dostosowywania różni się w zależności od wersji:
W systemie Android 11 lub nowszym (w szczególności Google Play System Update v292100200 ) możesz dostosować parametry alokacji pamięci ION (szczegóły poniżej).
W systemie Android 9 lub starszym interfejsu API kodeka OMX nie można aktualizować, ale nadal można go używać na partycji dostawcy.
Alokacja pamięci ION
W systemie Android 11 lub nowszym i aktualizacji systemu Google Play v292100200 lub nowszej możesz dostosować następujące parametry alokacji pamięci ION.
Parametr | Domyślna wartość | Opis |
---|---|---|
heapMask | 0xFFFFFFFF | Dozwolone wszystkie typy stert. |
allocFlags | 0 | Nie ustawiono żadnych flag. |
minAlignment | 0 | Brak wyrównania. |
Aby zastąpić parametry:
Zarejestruj domyślną usługę
android.hardware.media.c2
i podaj niestandardowe parametry użytkowania ION.Aby utworzyć nową usługę, skopiuj plik frameworks/av/media/codec2/hidl/services/vendor.cpp do swojego repozytorium, a następnie zmodyfikuj
StoreImpl::Interface::SetIonUsage()
zgodnie z potrzebami.Aby ponownie wykorzystać proces (OMX)
media.codec
, skopiuj i zarejestruj klasęStoreImpl
z frameworks/av/media/codec2/hidl/services/vendor.cpp do istniejącego plikumediacodec
( frameworks/av/services/mediacodec/main_codecservice.cpp ).
Dodaj następujący kod do pliku
manifest.xml
urządzenia.<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 . Dołączone komponenty multimedialne opierają się wyłącznie na interfejsach API NDK.
Aktualizacje
Podczas aktualizacji komponenty platformy na urządzeniu ładują pakiet APEX zawierający język Java i kod natywny.
Rysunek 1. Przebieg aktualizacji komponentu multimedialnego
Po zainstalowaniu przez framework pakietu APEX urządzenie uruchamia się ponownie i montuje obraz dysku, a procesy systemu multimedialnego ( media.extractor
i media.codec
) ładują zaktualizowane moduły z punktu montowania.