Мультимедиа

Значок Android Media HAL

В Android входит Stagefright – движок воспроизведения медиаконтента на нативном уровне, в который встроены программные кодеки для популярных медиаформатов.

Функции воспроизведения аудио и видео Stagefright включают интеграцию с кодеками OpenMAX, управление сеансами, синхронизированную по времени отрисовку, управление воспроизведением и DRM.

Stagefright также поддерживает интеграцию с пользовательскими аппаратными кодеками, предоставленными вами. Чтобы задать аппаратный путь для кодирования и декодирования медиаконтента, необходимо реализовать аппаратный кодек в качестве компонента OpenMax IL (уровня интеграции).

Примечание. Обновления Stagefright могут выпускаться в рамках ежемесячных обновлений системы безопасности Android и в составе новых версий ОС Android.

Архитектура

Медиаприложения взаимодействуют с мультимедийной платформой Android в соответствии со следующей архитектурой.

Архитектура медиа в Android

Рисунок 1. Медиаархитектура

Фреймворк приложения
На уровне фреймворка приложения находится код приложения, который использует API android.media для взаимодействия с мультимедийным оборудованием.
Binder IPC
Прокси-серверы Binder IPC упрощают обмен данными между процессами. Они находятся в каталоге frameworks/av/media/libmedia и начинаются с буквы I.
Native Multimedia Framework
На уровне нативных приложений Android предоставляет мультимедийный фреймворк, который использует движок Stagefright для записи и воспроизведения аудио и видео. В Stagefright по умолчанию есть список поддерживаемых программных кодеков, а собственный аппаратный кодек можно реализовать с помощью стандарта интеграционного уровня OpenMax. Дополнительные сведения о реализации можно найти в компонентах MediaPlayer и Stagefright, расположенных в каталоге frameworks/av/media.
OpenMAX Integration Layer (IL)
OpenMAX IL предоставляет Stagefright стандартизированный способ распознавания и использования аппаратных мультимедийных кодеков, называемых компонентами. Вы должны предоставить плагин OpenMAX в виде общей библиотеки с названием libstagefrighthw.so. Этот плагин связывает Stagefright с вашими компонентами кодека, которые должны быть реализованы в соответствии со стандартом компонентов OpenMAX IL.

Как реализовать собственные кодеки

В Stagefright встроены программные кодеки для распространенных форматов медиаконтента, но вы также можете добавить собственные аппаратные кодеки в виде компонентов OpenMAX. Для этого необходимо создать компоненты OMX и плагин OMX, который свяжет ваши кодеки с фреймворком Stagefright. Примеры компонентов можно найти в hardware/ti/omap4xxx/domx/, а пример плагина для Galaxy Nexus – в hardware/ti/omap4xx/libstagefrighthw.

Чтобы добавить собственные кодеки, выполните следующие действия:

  1. Создайте компоненты в соответствии со стандартом OpenMAX IL. Интерфейс компонента находится в файле frameworks/native/include/media/OpenMAX/OMX_Component.h. Подробную информацию о спецификации OpenMAX IL можно найти на сайте OpenMAX.
  2. Создайте плагин OpenMAX, который связывает ваши компоненты с сервисом Stagefright. Интерфейсы для создания плагина см. в заголовочных файлах frameworks/native/include/media/hardware/OMXPluginBase.h и HardwareAPI.h.
  3. Создайте плагин как общую библиотеку с названием libstagefrighthw.so в файле Makefile продукта. Пример:
    .
    LOCAL_MODULE := libstagefrighthw
    

    В файле Makefile устройства убедитесь, что модуль объявлен как пакет продукта:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

Как предоставить доступ к кодекам

Сервис Stagefright анализирует system/etc/media_codecs.xml и system/etc/media_profiles.xml, чтобы предоставить разработчикам приложений информацию о поддерживаемых кодеках и профилях на устройстве с помощью классов android.media.MediaCodecList и android.media.CamcorderProfile. Оба файла нужно создать в каталоге device/<company>/<device>/ и скопировать в каталог system/etc образа системы в файле Makefile устройства. Пример:

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 \

Полные примеры приведены в разделах device/samsung/tuna/media_codecs.xml и device/samsung/tuna/media_profiles.xml .

Примечание. Начиная с Android 4.1 элемент <Quirk> для медиакодеков больше не поддерживается.