
Android zawiera Stagefright, natywny mechanizm odtwarzania multimediów z wbudowanymi kodekami opartymi na oprogramowaniu dla popularnych formatów multimediów.
Funkcje odtwarzania dźwięku i wideo w Stagefright obejmują integrację z kodekiem OpenMAX, zarządzanie sesją, renderowanie z synchronizacją czasową, kontrolę transportu i DRM.
Stagefright obsługuje też integrację z niestandardowymi kodekami sprzętowymi dostarczonymi przez użytkownika. Aby ustawić ścieżkę sprzętową do kodowania i dekodowania multimediów, musisz zaimplementować kodek sprzętowy jako komponent OpenMax IL (Integration Layer).
Uwaga: aktualizacje Stagefright mogą być przeprowadzane w ramach comiesięcznego procesu aktualizacji zabezpieczeń Androida i w ramach wydania systemu operacyjnego Android.
Architektura
Aplikacje multimedialne współpracują z natywnym multimedialnym frameworkiem Androida zgodnie z tą architekturą.

Rysunek 1. Architektura mediów
- Platforma aplikacji
- Na poziomie platformy aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.media do interakcji z sprzętem multimedialnym.
- Binder IPC
- Pośrednicy IPC Binder ułatwiają komunikację między procesami.
Znajdziesz je w katalogu
frameworks/av/media/libmedia
, a ich nazwy rozpoczynają się od litery „I”. - Natywna platforma multimedialna
- Na poziomie natywnym Android udostępnia środowisko multimedialne, które wykorzystuje silnik Stagefright do nagrywania i odtwarzania dźwięku i obrazu. Stagefright jest dostarczany z domyślną listą obsługiwanych kodeków programowych. Możesz też zaimplementować własny kodek sprzętowy, korzystając ze standardu integracji OpenMax. Więcej informacji o wdrożeniu znajdziesz w komponentach MediaPlayer i Stagefright w
frameworks/av/media
. - OpenMAX Integration Layer (IL)
- OpenMAX IL zapewnia standardowy sposób rozpoznawania i używania przez Stagefright niestandardowych kodeków multimedialnych opartych na sprzęcie, zwanych komponentami. Musisz przesłać wtyczkę OpenMAX w postaci biblioteki współdzielonej o nazwie
libstagefrighthw.so
. Ta wtyczka łączy Stagefright z niestandardowymi komponentami kodeka, które muszą być zaimplementowane zgodnie ze standardem OpenMAX IL.
Wdrażanie kodeków niestandardowych
Stagefright jest wyposażony we wbudowane kodeki programowe dla typowych formatów multimediów, ale możesz też dodać własne niestandardowe kodeki sprzętowe jako komponenty OpenMAX. Aby to zrobić, musisz utworzyć komponenty OMX i wtyczkę OMX, która połączy Twoje niestandardowe kodeki z platformą Stagefright. Przykładowe komponenty znajdziesz w hardware/ti/omap4xxx/domx/
, a przykładowy wtyczkę do Galaxy Nexus – w hardware/ti/omap4xx/libstagefrighthw
.
Aby dodać własne kodeki:
- Utwórz komponenty zgodnie ze standardem OpenMAX IL. Interfejs komponentu znajduje się w pliku
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Więcej informacji o specyfikacji OpenMAX IL znajdziesz na stronie OpenMAX. - Utwórz wtyczkę OpenMAX, która połączy Twoje komponenty z usługą Stagefright. Interfejsy do tworzenia wtyczki znajdziesz w plikach nagłówków
frameworks/native/include/media/hardware/OMXPluginBase.h
iHardwareAPI.h
. - Utwórz w pliku Makefile w przypadku pluginu bibliotekę współdzieloną o nazwie
libstagefrighthw.so
. Przykład:
LOCAL_MODULE := libstagefrighthw
W pliku Makefile urządzenia pamiętaj, aby zadeklarować moduł jako pakiet produktu:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Udostępnianie kodeków dla frameworka
Usługa Stagefright analizuje wartości system/etc/media_codecs.xml
i system/etc/media_profiles.xml
, aby udostępnić obsługiwane kodeki
i profile na urządzeniu deweloperom aplikacji za pomocą klas android.media.MediaCodecList
i
android.media.CamcorderProfile
. Musisz utworzyć oba pliki w katalogu device/<company>/<device>/
i przekopiować je do katalogu system/etc
obrazu systemu w pliku Makefile urządzenia. Przykład:
PRODUCT_COPY_FILES += \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
Pełne przykłady znajdziesz w artykułach device/samsung/tuna/media_codecs.xml
i device/samsung/tuna/media_profiles.xml
.
Uwaga: od wersji 4.1 Androida element <Quirk>
dla kodeków multimedialnych nie jest już obsługiwany.