Android 10 или более поздней версии включает в себя несколько обновляемых мультимедийных компонентов, которые позволяют обновлять компоненты платформы через инфраструктуру Google Play Store или через беспроводной механизм (OTA), предоставляемый партнерами. Мультимедийные компоненты упакованы в модули, что позволяет предоставлять обновления безопасности и обновления функций без необходимости полного обновления образа системы.
Обновляемые медиа-компоненты существуют в следующих модулях.
СМИ. Этот модуль включает в себя экстракторы мультимедиа , API
MediaSession2
и APIMediaParser
.Медиакодеки . Этот модуль включает в себя обновляемые компоненты программного обеспечения Codec2.
Медиапровайдер . Этот модуль оптимизирует индексированные метаданные (аудио, видео и изображения с SD-карт и USB-устройств) и делает эти данные доступными для приложений через общедоступные API MediaStore .
Подробную информацию о добавлении пользовательских экстракторов и декодеров см. в разделе «Настройка медиа-компонентов» .
Медиа-экстракторы
В Android 9 и более ранних версиях экстракторы компилируются в один файл libstagefright.so
. В Android 10 или более поздних версиях медиаэкстракторы являются отдельными компонентами. Каждый экстрактор имеет свой собственный файл .so
с точкой входа, которая предоставляет функцию анализа , позволяющую определить, может ли экстрактор обрабатывать данный медиафайл, и фабрическую функцию, которая создает экземпляр экстрактора для данного медиафайла. Каждому экстрактору присвоено имя (чтобы помочь в отладке) и версия, чтобы указать, какой экстрактор является самым новым.
Медиа-фреймворк автоматически загружает все доступные файлы экстрактора .so
, поэтому вы можете создавать свои собственные экстракторы, добавляя новый файл .so
, без необходимости изменять libstagefright
или другие библиотеки медиа-фреймворка. Вы также можете убедиться, что собственный экстрактор предпочтительнее экстрактора, предоставленного Google.
Медиасессион2 API
API MediaSession2 позволяет мультимедийным приложениям предоставлять свои элементы управления транспортировкой и информацию о воспроизведении другим процессам, таким как платформа Android и другие приложения. Этот компонент нельзя настроить.
МедиаПарсер API
API MediaParser позволяет ExoPlayer эффективно использовать анализаторы медиаконтейнеров платформы для извлечения образцов мультимедиа из медиаконтейнеров. MediaParser включает следующие изменения границ исходного кода:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. API и реализация тонкого уровня.external/exoplayer/
. Дословные исходные коды Exoplayer, на которых построен MediaParser.
API MediaParser нельзя настроить. Чтобы протестировать MediaParser, используйте тесты в cts/tests/tests/mediaparser/
.
Медиакодеки
Модуль Медиа-кодеки включает в себя обновляемые программные компоненты Codec2. Поддержка настройки различается в разных выпусках:
В Android 11 или более поздней версии (в частности , обновление системы Google Play v292100200 ) вы можете настроить параметры распределения памяти ION (подробности см. ниже).
В Android 9 или более ранней версии API кодека OMX не подлежит обновлению, но вы все равно можете использовать его в разделе поставщика.
Распределение памяти ION
В Android 11 или более поздней версии и обновлении системы Google Play v292100200 или более поздней версии вы можете настроить следующие параметры распределения памяти ION.
Параметр | Значение по умолчанию | Описание |
---|---|---|
heapMask | 0xFFFFFFFF | Разрешены все типы кучи. |
allocFlags | 0 | Флаги не установлены. |
minAlignment | 0 | Никакого выравнивания. |
Чтобы переопределить параметры:
Зарегистрируйте службу
android.hardware.media.c2
по умолчанию и укажите пользовательские параметры использования ION.Чтобы создать новую службу, скопируйте файл frameworks/av/media/codec2/hidl/services/vendor.cpp в свой репозиторий, а затем при необходимости измените
StoreImpl::Interface::SetIonUsage()
.Чтобы повторно использовать процесс
media.codec
(OMX), скопируйте и зарегистрируйте классStoreImpl
из frameworks/av/media/codec2/hidl/services/vendor.cpp в существующий файлmediacodec
( frameworks/av/services/mediacodec/main_codecservice.cpp ).
Добавьте следующий код в файл
manifest.xml
устройства.xml.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
Формат и зависимости
Медиа-модуль ( com.android.media
) и модуль медиа-кодека ( com.android.media.swcodec
) имеют формат APEX . Включенные медиа-компоненты полагаются только на API-интерфейсы NDK.
Обновления
Во время обновления компоненты платформы на устройстве загружают пакет APEX, содержащий Java и собственный код.
Рисунок 1. Порядок обновления медиа-компонента
После того, как платформа установит пакет APEX, устройство перезагружается и монтирует образ диска, а процессы медиасистемы ( media.extractor
и media.codec
) загружают обновленные модули из точки монтирования.