Multimedia

Ikona interfejsu HAL multimediów na Androida

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ą.

Architektura multimediów w Androidzie

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:

  1. 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.
  2. 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.hHardwareAPI.h.
  3. 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.xmldevice/samsung/tuna/media_profiles.xml .

Uwaga: od wersji 4.1 Androida element <Quirk> dla kodeków multimedialnych nie jest już obsługiwany.