В Android входит Stagefright – движок воспроизведения медиаконтента на нативном уровне, в который встроены программные кодеки для популярных медиаформатов.
Функции воспроизведения аудио и видео Stagefright включают интеграцию с кодеками OpenMAX, управление сеансами, синхронизированную по времени отрисовку, управление воспроизведением и DRM.
Stagefright также поддерживает интеграцию с пользовательскими аппаратными кодеками, предоставленными вами. Чтобы задать аппаратный путь для кодирования и декодирования медиаконтента, необходимо реализовать аппаратный кодек в качестве компонента OpenMax IL (уровня интеграции).
Примечание. Обновления Stagefright могут выпускаться в рамках ежемесячных обновлений системы безопасности 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.
Чтобы добавить собственные кодеки, выполните следующие действия:
- Создайте компоненты в соответствии со стандартом OpenMAX IL. Интерфейс компонента находится в файле
frameworks/native/include/media/OpenMAX/OMX_Component.h. Подробную информацию о спецификации OpenMAX IL можно найти на сайте OpenMAX. - Создайте плагин OpenMAX, который связывает ваши компоненты с сервисом Stagefright. Интерфейсы для создания плагина см. в заголовочных файлах
frameworks/native/include/media/hardware/OMXPluginBase.hиHardwareAPI.h. - Создайте плагин как общую библиотеку с названием
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> для медиакодеков больше не поддерживается.