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

См. страницу форматов, поддерживаемых ExoPlayer, для ознакомления с медиаформатами в целом. Те же ограничения на загрузку, извлечение и декодирование потоков применяются к Transformer, хотя Transformer не поддерживает входящие в комплект модули программного декодера ExoPlayer.

Transformer также использует MediaCodec для кодирования и требует мультиплексирования или мультиплексирования выходных медиафайлов, что ограничивает поддерживаемые выходные форматы. См. видеокодеки MediaCodec для получения дополнительной информации об ограничениях кодирования и MediaMuxer для получения информации об ограничениях, применимых к выходному медиаконтейнеру. Transformer выводит только файлы MP4.

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

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

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-медиа с другими приложениями или службами, которые не поддерживают прием 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) .

Работа с замедленным мультимедиа

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

Чтобы сгладить потоки замедленного движения, используйте метод компоновщика setFlattenForSlowMotion в EditedMediaItem .

Котлин

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

Ява

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

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