- Почему в демонстрационном приложении нет доступа к локальным файлам?
- Почему экспорт не удается на определенном устройстве?
- Поддерживает ли Transformer преобразование (или запись) удаленного медиаконтента?
- Поддерживает ли Transformer входные данные в формате 8K?
- Как Transformer связан с перекодированием медиафайлов, совместимым с платформой?
- Как уменьшить задержку при экспорте или увеличить пропускную способность?
Почему в демонстрационном приложении нет доступа к локальным файлам?
Применение областей хранения данных в Android 11 (уровень API 30) запрещает прямой доступ к файловой системе. При ручном тестировании во время разработки можно получить доступ к локальным файлам, добавив разрешение на управление внешним хранилищем в манифест демоверсии приложения:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
Затем предоставьте разрешение с помощью adb:
adb shell appops set --uid androidx.media3.demo.transformer \
MANAGE_EXTERNAL_STORAGE allow
Почему на определенном устройстве не удается выполнить экспорт?
Сообщите о проблеме в инструменте отслеживания ошибок Media3, предоставив достаточно информации для ее воспроизведения. Чтобы со временем улучшить совместимость, в библиотеку можно добавлять обходные решения для проблем, связанных с определенными устройствами.
Поддерживает ли Transformer преобразование (или запись) удаленного медиаконтента?
Transformer поддерживает удаленные потоки с прогрессивной загрузкой, в том числе контейнеры медиафайлов, например MP4.
При очень плохом качестве связи экспорт может не удаться, поскольку буферизация удаленного медиаконтента в течение слишком долгого времени запускает в мультиплексоре проверки, предназначенные для определения того, что конвейер завис. Вы можете переопределить поведение по умолчанию, задав параметр maxDelayBetweenMuxerSamplesMs для Transformer.Builder:
Kotlin
Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build()
Java
new Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build();
Если передать значение C.TIME_UNSET, время ожидания будет полностью отключено. Однако если ваше приложение работает на чипсетах, где MediaCodec может зависнуть, рекомендуем установить ненулевое время ожидания большего размера.
Поддерживает ли Transformer входные данные в формате 8K?
Transformer реализован таким образом, что не ограничивает обработку видео 8K, но возможности оборудования устройства могут не позволить выполнить экспорт. Например, даже если устройство может снимать видео в формате 8K, его может быть невозможно декодировать и перекодировать из-за нехватки ресурсов аппаратного кодека или ОЗУ.
Как Transformer связан с перекодированием медиаконтента, совместимым с платформой?
Совместимое перекодирование медиаконтента – это функция платформы Android, которая появилась в Android 12 (уровень API 31). Она позволяет преобразовывать медиаконтент длиной до одной минуты в форматы, поддерживаемые приложением. Если вы включите эту функцию, при попытке прочитать медиафайл в несовместимом формате он будет перекодирован по запросу, а результат будет сохранен в кеше для последующих операций чтения.
Transformer также поддерживает конвертацию форматов, но доступен в виде библиотеки поддержки, и приложение полностью контролирует операцию перекодирования.
Как уменьшить задержку при экспорте или увеличить пропускную способность?
Transformer использует плагин MediaCodec для декодирования и кодирования с аппаратным ускорением, а OpenGL – для обработки видеокадров. Согласно нашим измерениям на типичных устройствах, ограничивающим фактором пропускной способности Transformer является пропускная способность аппаратного кодировщика MediaCodec для случаев использования без обработки ресурсоемких эффектов. Скорее всего, это повлияет и на другие реализации. Например, функция транскодирования, совместимая с платформой, работает так же, как Transformer.
Отладочный предпросмотр в демонстрационном приложении значительно снижает пропускную способность, поэтому при тестировании с помощью конечной сборки демонстрационного приложения его нужно отключить, чтобы получить реалистичное представление о производительности.