![Значок Android Media HAL](https://source.android.google.cn/static/devices/media/images/ape_fwk_hal_media.png?authuser=4&hl=ru)
Android включает Stagefright, механизм воспроизведения мультимедиа на собственном уровне, который имеет встроенные программные кодеки для популярных форматов мультимедиа.
Функции воспроизведения аудио и видео Stagefright включают интеграцию с кодеками OpenMAX, управление сеансами, синхронизированный по времени рендеринг, управление транспортом и DRM.
Stagefright также поддерживает интеграцию с пользовательскими аппаратными кодеками, предоставленными вами. Чтобы задать аппаратный путь для кодирования и декодирования мультимедиа, необходимо реализовать аппаратный кодек в качестве компонента OpenMax IL (уровень интеграции).
Примечание. Обновления Stagefright могут происходить в процессе ежемесячного обновления системы безопасности Android и в составе выпуска ОС Android.
Архитектура
Мультимедийные приложения взаимодействуют с собственной мультимедийной инфраструктурой Android в соответствии со следующей архитектурой.
![Медиа-архитектура Android](https://source.android.google.cn/static/devices/media/images/ape_fwk_media.png?authuser=4&hl=ru)
Рисунок 1. Медиа-архитектура
- Платформа приложения
- На уровне структуры приложения находится код приложения, использующий API-интерфейсы android.media для взаимодействия с мультимедийным оборудованием.
- Связующее МПК
- Прокси-серверы Binder IPC упрощают обмен данными через границы процессов. Они находятся в каталоге
frameworks/av/media/libmedia
и начинаются с буквы «I». - Собственная мультимедийная структура
- На исходном уровне Android предоставляет мультимедийную среду, использующую механизм Stagefright для записи и воспроизведения аудио и видео. Stagefright поставляется со списком поддерживаемых программных кодеков по умолчанию, и вы можете реализовать свой собственный аппаратный кодек, используя стандарт уровня интеграции OpenMax. Для получения дополнительных сведений о реализации см. компоненты MediaPlayer и Stagefright, расположенные в
frameworks/av/media
. - Уровень интеграции OpenMAX (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>
для медиакодеков больше не поддерживается.