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:
Media Ten moduł obejmuje ekstraktory multimediów,
MediaSession2
interfejsy API iMediaParser
interfejsy API.Kodeki multimedialne. Ten moduł zawiera komponenty oprogramowania Codec2, które można aktualizować.
MediaProvider. Ten moduł optymalizuje zindeksowane metadane (audio, wideo i obrazy z kart SD i urządzeń USB) i udostępnia te dane aplikacjom za pomocą publicznych interfejsów API MediaStore.
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:
Zarejestruj domyślną usługę
android.hardware.media.c2
i 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 (OMX)
media.codec
, skopiuj i zarejestruj klasęStoreImpl
z pliku frameworks/av/media/codec2/hidl/services/vendor.cpp w istniejącym plikumediacodec
(frameworks/av/services/mediacodec/main_codecservice.cpp).
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.
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.extractor
i media.codec
) wczytają zaktualizowane moduły z punktu montowania.