Поддерживаемые форматы

Чтобы узнать больше о форматах медиаконтента, ознакомьтесь с поддерживаемыми форматами ExoPlayer. В Transformer действуют те же ограничения на загрузку, извлечение и декодирование потоков, что и в ExoPlayer, но Transformer не поддерживает встроенные программные модули декодирования ExoPlayer.

Для кодирования Transformer также использует MediaCodec, что ограничивает поддерживаемые выходные форматы. Подробнее о видеокодеках MediaCodec…

По умолчанию Transformer экспортирует стандартные файлы MP4 с помощью InAppMp4Muxer. Если ваше приложение требует фрагментированный MP4, вы можете передать InAppFragmentedMp4Muxer.Factory при инициализации экземпляра Transformer. Media3 также поддерживает другие форматы, такие как WebM, AAC, Ogg и WAV, с помощью специальных мультиплексоров, например WebmMuxer, AacMuxer, OggMuxer и WavMuxer. Чтобы внедрить их, нужно использовать специальный тег Muxer.Factory, но в будущих версиях будут доступны готовые реализации фабрик, которые упростят этот процесс.

Поддержка изображений

Transformer использует BitmapFactory для загрузки и декодирования всех объектов изображений, поэтому Transformer поддерживает все форматы, которые поддерживает BitmapFactory. Поддерживаемые типы изображений перечислены в разделе Поддержка изображений. Если в контейнере есть изображения, которые можно использовать в многокадровых форматах (например, GIF), при использовании DefaultAssetLoaderFactory будет показан один кадр.

Специальные форматы

Transformer поддерживает входные данные в новых медиаформатах, которые предоставляют специальные функции по сравнению с обычными форматами.

Как работать с HDR-видео

Все больше устройств поддерживают съемку видео в формате HDR, который позволяет передавать более яркие и точные цвета, а также расширенный диапазон яркости.

Transformer поддерживает редактирование HDR-видео на устройствах с Android 13 (уровень API 33) и более поздних версий, если на них есть необходимые кодеки. При редактировании HDR-видео все видеоэффекты GL должны обрабатывать 16-битные компоненты цвета с плавающей запятой и цветовое пространство BT.2020. HDR_MODE_KEEP_HDR – режим по умолчанию при создании Composition. Если редактирование HDR не поддерживается, Transformer использует HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

Преобразование HDR в SDR, также известное как сопоставление тонов, поддерживается в Android 10 (уровень API 29) и более поздних версиях на устройствах с необходимыми возможностями декодирования и поддержкой OpenGL. Это полезно, когда вы делитесь HDR-контентом с другими приложениями или сервисами, которые не поддерживают его. Чтобы включить сопоставление тонов с помощью вызова OpenGL, используйте setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) при создании Composition. Начиная с Android 12 (уровень API 31), MediaCodec также поддерживает тональное отображение на некоторых устройствах, в том числе на всех устройствах с Android 13 или более поздней версии, которые могут снимать HDR-видео. Чтобы включить тональную компрессию, используя MediaCodec, вызовите метод setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).

Transformer также поддерживает следующие продвинутые сценарии транскодирования:

  • Ultra HDR в HDR-видео. Вы можете преобразовать изображения в формате Ultra HDR в HDR-видео, сохранив динамический диапазон и широкую цветовую гамму. Благодаря этому фотографии будут соответствовать пиковой яркости и насыщенности HDR-видео на смешанных временных шкалах.
  • Транскодирование и трансмуксирование Dolby Vision. Transformer поддерживает трансмуксирование базового слоя с обратной совместимостью (например, HEVC) из медиафайлов Dolby Vision (профиль 8) без повторного кодирования или транскодирование с преобразованием тона в стандартные форматы SDR.

Как работать с замедленной съемкой

В видео с замедленной съемкой есть метаданные, указывающие, с какой скоростью нужно воспроизводить каждый фрагмент. Сглаживание – это процесс создания нового видеопотока на основе видео с замедленной съемкой. При этом скорость воспроизведения отдельных фрагментов изменяется в соответствии с метаданными, чтобы видео корректно воспроизводилось даже в проигрывателях, которые не поддерживают метаданные замедленной съемки.

Чтобы сгладить замедленную съемку, используйте метод setFlattenForSlowMotion builder на EditedMediaItem.

Kotlin

val editedMediaItem =
  EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer = Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

Java

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

Это позволяет поддерживать видео в замедленной съемке, не беспокоясь об обработке специальных форматов. Вам нужно будет хранить и воспроизводить сглаженную версию видео вместо исходной.