Contenus multimédias

Icône Android Media HAL

Android inclut Stagefright, un moteur de lecture multimédia au niveau natif doté de codecs logiciels intégrés pour les formats multimédias courants.

Les fonctionnalités de lecture audio et vidéo de Stagefright incluent l'intégration aux codecs OpenMAX, la gestion des sessions, le rendu synchronisé avec le temps, le contrôle du transport et la gestion des droits numériques (DRM).

Stagefright est également compatible avec l'intégration des codecs matériels personnalisés que vous fournissez. Pour définir un chemin matériel pour encoder et décoder des contenus multimédias, vous devez implémenter un codec basé sur du matériel en tant que composant OpenMax IL (Integration Layer).

Remarque:Les mises à jour Stagefright peuvent être effectuées via le processus de mise à jour de sécurité mensuelle d'Android et dans le cadre d'une version de l'OS 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

Framework d'application
Au niveau du framework d'application, le code d'application utilise les API android.media pour interagir avec le matériel multimédia.
IPC de classeur
Les proxy IPC du Binder facilitent la communication au-delà des limites de processus. Ils se trouvent dans le répertoire frameworks/av/media/libmedia et commencent par la lettre "I".
Native Multimedia Framework
Au niveau natif, Android fournit un framework multimédia qui utilise le moteur Stagefright pour l'enregistrement et la lecture audio et vidéo. Stagefright est fourni avec une liste par défaut des codecs logiciels compatibles. Vous pouvez implémenter votre propre codec matériel à l'aide de la norme de couche d'intégration OpenMax. Pour en savoir plus sur l'implémentation, consultez les composants MediaPlayer et Stagefright situés dans frameworks/av/media.
OpenMAX Integration Layer (IL)
L'IL OpenMAX permet à Stagefright de reconnaître et d'utiliser des codecs multimédias basés sur du matériel personnalisés appelés composants. Vous devez fournir un plug-in OpenMAX sous la forme d'une bibliothèque partagée nommée libstagefrighthw.so. Ce plug-in associe 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 fourni 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 plug-in OMX qui associent vos codecs personnalisés au framework Stagefright. Pour obtenir des exemples de composants, consultez hardware/ti/omap4xxx/domx/. Pour obtenir un exemple de plug-in pour le Galaxy Nexus, consultez hardware/ti/omap4xx/libstagefrighthw.

Pour ajouter vos propres codecs:

  1. Créez vos composants conformément à la norme de composant 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, consultez le site Web OpenMAX.
  2. Créez un plug-in OpenMAX qui lie vos composants au service Stagefright. Pour connaître les interfaces permettant de créer le plug-in, consultez les fichiers d'en-tête frameworks/native/include/media/hardware/OMXPluginBase.h et HardwareAPI.h.
  3. Créez votre plug-in en tant que bibliothèque partagée avec le nom libstagefrighthw.so dans le fichier Makefile de votre produit. Exemple :
    LOCAL_MODULE := libstagefrighthw
    

    Dans le fichier 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 fichiers system/etc/media_codecs.xml et system/etc/media_profiles.xml pour exposer les codecs et profils compatibles 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>/, puis les copier dans le répertoire system/etc de l'image système dans le Makefile de votre appareil. 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 obtenir des exemples complets, consultez device/samsung/tuna/media_codecs.xml et device/samsung/tuna/media_profiles.xml .

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