Медиа модули

В Android 10 и более поздних версиях есть несколько обновляемых медиакомпонентов, которые позволяют обновлять компоненты фреймворка через инфраструктуру Google Play Store или через предоставляемый партнёрами механизм беспроводного обновления (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 System Update v292100200 ) вы можете настроить параметры распределения памяти ION (подробности см. ниже).

  • В Android 9 и ниже API кодека OMX не обновляется, но вы по-прежнему можете использовать его в разделе поставщика.

Распределение памяти ION

В Android 11 и выше и обновлении системы Google Play версии 292100200 и выше вы можете настроить следующие параметры распределения памяти 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 . Включенные медиакомпоненты используют только API NDK.

Обновления

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

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

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

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