Медиа модули

Android 10 или более поздней версии включает в себя несколько обновляемых мультимедийных компонентов, которые позволяют обновлять компоненты платформы через инфраструктуру Google Play Store или через беспроводной механизм (OTA), предоставляемый партнерами. Мультимедийные компоненты упакованы в модули, что позволяет предоставлять обновления безопасности и обновления функций без необходимости полного обновления образа системы.

Обновляемые медиа-компоненты существуют в следующих модулях.

Подробную информацию о добавлении пользовательских экстракторов и декодеров см. в разделе «Настройка медиа-компонентов» .

Медиа-экстракторы

В 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 Никакого выравнивания.

Чтобы переопределить параметры:

  1. Зарегистрируйте службу android.hardware.media.c2 по умолчанию и укажите пользовательские параметры использования ION.

  2. Добавьте следующий код в файл 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>
    

Формат и зависимости

Медиа-модуль ( com.android.media ) и модуль медиа-кодека ( com.android.media.swcodec ) имеют формат APEX . Включенные медиа-компоненты полагаются только на API-интерфейсы NDK.

Обновления

Во время обновления компоненты платформы на устройстве загружают пакет APEX, содержащий Java и собственный код.

Обновления СМИ

Рис. 1. Порядок обновления медиа-компонента

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