Contenus multimédias

Icône HAL multimédia Android

Android inclut Stagefright, un moteur de lecture multimédia au niveau natif qui intègre des codecs logiciels pour les formats multimédias populaires.

Les fonctionnalités de lecture audio et vidéo de Stagefright incluent l'intégration avec les codecs OpenMAX, la gestion de session, le rendu synchronisé dans le temps, le contrôle du transport et le DRM.

Stagefright prend également en charge l'intégration avec les codecs matériels personnalisés fournis par vous. Pour définir un chemin matériel pour encoder et décoder les médias, vous devez implémenter un codec matériel en tant que composant OpenMax IL (Integration Layer).

Remarque : Les mises à jour de Stagefright peuvent être effectuées via le processus de mise à jour de sécurité mensuelle d'Android et dans le cadre d'une version du système d'exploitation Android.

Architecture

Les applications multimédias interagissent avec le framework multimédia natif Android selon l'architecture suivante.

Architecture multimédia Android

Figure 1. Architecture multimédia

Cadre d'application
Au niveau du cadre d'application se trouve le code d'application qui utilise les API Android.media pour interagir avec le matériel multimédia.
Classeur IPC
Les proxys Binder IPC facilitent la communication au-delà des limites des processus. Ils se trouvent dans le répertoire frameworks/av/media/libmedia et commencent par la lettre « I ».
Framework multimédia natif
Au niveau natif, Android fournit un cadre multimédia qui utilise le moteur Stagefright pour l'enregistrement et la lecture audio et vidéo. Stagefright est livré avec une liste par défaut de codecs logiciels pris en charge et vous pouvez implémenter votre propre codec matériel en utilisant la norme de couche d'intégration OpenMax. Pour plus de détails sur l'implémentation, consultez les composants MediaPlayer et Stagefright situés dans frameworks/av/media .
Couche d'intégration OpenMAX (IL)
L'OpenMAX IL fournit à Stagefright un moyen standardisé de reconnaître et d'utiliser des codecs multimédia personnalisés basés sur le matériel appelés composants. Vous devez fournir un plugin OpenMAX sous la forme d'une bibliothèque partagée nommée libstagefrighthw.so . Ce plugin relie Stagefright à vos composants de codec personnalisés, qui doivent être implémentés conformément à la norme de composant OpenMAX IL.

Implémenter des codecs personnalisés

Stagefright est livré avec des codecs logiciels intégrés pour les formats multimédias courants, mais vous pouvez également ajouter vos propres codecs matériels personnalisés en tant que composants OpenMAX. Pour ce faire, vous devez créer les composants OMX et un plugin OMX qui relie vos codecs personnalisés au framework Stagefright. Pour des exemples de composants, consultez le hardware/ti/omap4xxx/domx/ ; pour un exemple de plugin pour le Galaxy Nexus, voir hardware/ti/omap4xx/libstagefrighthw .

Pour ajouter vos propres codecs :

  1. Créez vos composants selon le standard de composants OpenMAX IL. L'interface du composant se trouve dans le fichier frameworks/native/include/media/OpenMAX/OMX_Component.h . Pour en savoir plus sur la spécification OpenMAX IL, reportez-vous au site Web OpenMAX .
  2. Créez un plugin OpenMAX qui relie vos composants au service Stagefright. Pour les interfaces permettant de créer le plugin, consultez les fichiers d'en-tête frameworks/native/include/media/hardware/OMXPluginBase.h et HardwareAPI.h .
  3. Créez votre plugin en tant que bibliothèque partagée avec le nom libstagefrighthw.so dans votre Makefile de produit. Par exemple:
    LOCAL_MODULE := libstagefrighthw
    

    Dans le Makefile de votre appareil, assurez-vous de déclarer le module en tant que package de produit :

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

Exposer les codecs au framework

Le service Stagefright analyse les system/etc/media_codecs.xml et system/etc/media_profiles.xml pour exposer les codecs et profils pris en charge sur l'appareil aux développeurs d'applications via les classes android.media.MediaCodecList et android.media.CamcorderProfile . Vous devez créer les deux fichiers dans le répertoire device/<company>/<device>/ et les copier dans le répertoire system/etc de l'image système dans le Makefile de votre appareil. Par exemple:

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 \

Pour des exemples complets, consultez device/samsung/tuna/media_codecs.xml et device/samsung/tuna/media_profiles.xml .

Remarque : depuis Android 4.1, l'élément <Quirk> pour les codecs multimédias n'est plus pris en charge.