Медиа модули

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

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

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

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

В 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/ .

Медиа-кодеки

Модуль Media Codecs включает обновляемые программные компоненты 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>
    

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

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

Обновления

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

Медиа-обновления

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

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