См. страницу форматов, поддерживаемых 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);
Это позволяет вам поддерживать замедленное видео, не беспокоясь об обработке этих специальных форматов. Все, что вам нужно сделать, это сохранить и воспроизвести сведенную версию видео вместо исходной.