Medien

Symbol für Android Media HAL

Android enthält Stagefright, eine Medienwiedergabe-Engine auf nativer Ebene mit integrierten softwarebasierten Codecs für gängige Medienformate.

Zu den Audio- und Videowiedergabefunktionen von Stagefright gehören die Integration mit OpenMAX-Codecs, die Sitzungsverwaltung, das zeitsynchrone Rendering, die Transportsteuerung und die digitale Rechteverwaltung.

Stagefright unterstützt auch die Integration von benutzerdefinierten Hardware-Codecs, die Sie zur Verfügung stellen. Wenn du einen Hardwarepfad zum Codieren und Decodieren von Medien festlegen möchtest, musst du einen hardwarebasierten Codec als OpenMax IL-Komponente (Integration Layer) implementieren.

Hinweis:Stagefright-Updates können über das monatliche Sicherheitsupdate von Android und als Teil einer Android-Betriebssystemversion erfolgen.

Architektur

Medienanwendungen interagieren gemäß der folgenden Architektur mit dem nativen Multimedia-Framework von Android.

Android-Medienarchitektur

Abbildung 1: Medienarchitektur

Anwendungs-Framework
Auf Anwendungs-Framework-Ebene befindet sich Anwendungscode, der APIs von android.media verwendet, um mit der Multimedia-Hardware zu interagieren.
Binder IPC
Die Binder-IPC-Proxys erleichtern die Kommunikation über Prozessgrenzen hinweg. Sie befinden sich im Verzeichnis frameworks/av/media/libmedia und beginnen mit dem Buchstaben „I“.
Natives Multimedia-Framework
Auf nativer Ebene bietet Android ein Multimedia-Framework, das die Stagefright-Engine für die Audio- und Videoaufzeichnung und -wiedergabe nutzt. Stagefright enthält eine Standardliste der unterstützten Softwarecodecs. Sie können auch Ihren eigenen Hardwarecodec mit dem OpenMax-Integrationsschichtstandard implementieren. Weitere Implementierungsdetails finden Sie in den Komponenten „MediaPlayer“ und „Stagefright“ unter frameworks/av/media.
OpenMAX Integration Layer (IL)
OpenMAX IL bietet eine standardisierte Möglichkeit für Stagefright, benutzerdefinierte hardwarebasierte Multimedia-Codecs, sogenannte Komponenten, zu erkennen und zu verwenden. Sie müssen ein OpenMAX-Plug-in in Form einer freigegebenen Bibliothek mit dem Namen libstagefrighthw.so bereitstellen. Dieses Plug-in verknüpft Stagefright mit Ihren benutzerdefinierten Codec-Komponenten, die gemäß dem OpenMAX IL-Komponentenstandard implementiert werden müssen.

Benutzerdefinierte Codecs implementieren

Stagefright bietet integrierte Software-Codecs für gängige Medienformate. Sie können aber auch eigene benutzerdefinierte Hardware-Codecs als OpenMAX-Komponenten hinzufügen. Dazu müssen Sie die OMX-Komponenten und ein OMX-Plug-in erstellen, das Ihre benutzerdefinierten Codecs mit dem Stagefright-Framework verbindet. Beispielkomponenten finden Sie im hardware/ti/omap4xxx/domx/. Ein Beispiel-Plug-in für das Galaxy Nexus finden Sie unter hardware/ti/omap4xx/libstagefrighthw.

So fügen Sie eigene Codecs hinzu:

  1. Erstellen Sie Ihre Komponenten gemäß dem OpenMAX IL-Komponentenstandard. Die Komponenten-Benutzeroberfläche befindet sich in der Datei frameworks/native/include/media/OpenMAX/OMX_Component.h. Weitere Informationen zur OpenMAX IL-Spezifikation finden Sie auf der OpenMAX-Website.
  2. Erstellen Sie ein OpenMAX-Plug-in, das Ihre Komponenten mit dem Stagefright-Dienst verknüpft. Die Schnittstellen zum Erstellen des Plug-ins finden Sie in den Headerdateien frameworks/native/include/media/hardware/OMXPluginBase.h und HardwareAPI.h.
  3. Erstelle dein Plug-in als freigegebene Bibliothek mit dem Namen libstagefrighthw.so in deiner Produkt-Makefile. Beispiel:
    LOCAL_MODULE := libstagefrighthw
    

    Deklarieren Sie das Modul im Makefile Ihres Geräts als Produktpaket:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

Codecs für das Framework freigeben

Der Stagefright-Dienst analysiert die system/etc/media_codecs.xml und system/etc/media_profiles.xml, um App-Entwicklern über die Klassen android.media.MediaCodecList und android.media.CamcorderProfile die unterstützten Codecs und Profile auf dem Gerät zur Verfügung zu stellen. Sie müssen beide Dateien im Verzeichnis device/<company>/<device>/ erstellen und in das Verzeichnis system/etc des System-Images im Makefile Ihres Geräts kopieren. Beispiel:

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 \

Vollständige Beispiele finden Sie unter device/samsung/tuna/media_codecs.xml und device/samsung/tuna/media_profiles.xml .

Hinweis:Ab Android 4.1 wird das Element <Quirk> für Mediencodecs nicht mehr unterstützt.