Android 10 и более поздние версии включают в себя несколько обновляемых мультимедийных компонентов, позволяющих обновлять компоненты платформы через инфраструктуру Google Play Store или с помощью механизма беспроводного обновления (OTA), предоставляемого партнерами. Мультимедийные компоненты объединены в модули, что позволяет предоставлять обновления безопасности и обновления функций без необходимости полного обновления образа системы.
В следующих модулях имеются обновляемые медиакомпоненты.
Медиафайлы. Этот модуль включает в себя инструменты для извлечения медиафайлов , API
MediaSession2и APIMediaParser.Медиакодеки . Этот модуль включает обновляемые программные компоненты Codec2.
MediaProvider . Этот модуль оптимизирует индексированные метаданные (аудио, видео и изображения с SD-карт и USB-устройств) и делает эти данные доступными для приложений через общедоступные API MediaStore .
Подробную информацию о добавлении пользовательских экстракторов и декодеров см. в разделе «Настройка медиакомпонентов» .
экстракторы медиафайлов
В Android 9 и более ранних версиях программы для извлечения медиафайлов компилируются в один файл libstagefright.so . В Android 10 и более поздних версиях программы для извлечения медиафайлов представляют собой отдельные компоненты. Каждая программа имеет свой собственный файл .so с точкой входа, которая предоставляет функцию анализа трафика для определения возможности обработки данного медиафайла, и фабричной функцией, которая создает экземпляр программы для данного медиафайла. Каждая программа имеет имя (для облегчения отладки) и версию, указывающую, какая программа является самой новой.
Медиафреймворк автоматически загружает все доступные файлы .so для извлечения контента, поэтому вы можете создавать собственные экстракторы, добавляя новый файл .so без необходимости изменять libstagefright или другие библиотеки медиафреймворка. Вы также можете настроить приоритет пользовательского экстрактора над экстрактором, предоставленным Google.
API MediaSession2
API MediaSession2 позволяет медиаприложениям предоставлять доступ к элементам управления воспроизведением и информации о воспроизведении другим процессам, таким как платформа Android и другие приложения. Этот компонент нельзя настроить.
API MediaParser
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 не подлежит обновлению, но его все еще можно использовать в разделе vendor.
распределение памяти ION
В Android 11 и более поздних версиях, а также в Google Play System Update версии 292100200 и выше, можно настроить следующие параметры для распределения памяти 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 ).
Добавьте следующий код в файл device
manifest.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>
Формат и зависимости
Модули Media ( com.android.media ) и Media Codec ( com.android.media.swcodec ) имеют формат APEX . Включенные компоненты мультимедиа используют только API NDK.
Обновления
В процессе обновления компоненты фреймворка на устройстве загружают пакет APEX, содержащий Java-код и нативный код.

Рисунок 1. Схема обновления медиакомпонента.
После установки пакета APEX фреймворком устройство перезагружается, монтирует образ диска, и процессы медиасистемы ( media.extractor и media.codec ) загружают обновленные модули из точки монтирования.