LITR (произносится «lai-tr»)-это легкий инструмент для трансформации видео/аудио, который поддерживает транскодирование видео и аудио-треков с необязательной модификацией кадров.
В своей нынешней итерации LITR поддерживает:
По умолчанию LITR использует Android MediaCodec Stack для аппаратного ускоренного декодирования/кодирования и OpenGL для рендеринга. Он также использует MediaExtractor и MediaMuxer для чтения/записи носителя.
Просто возьмите через Gradle:
implementation ' com.linkedin.android.litr:litr:1.5.7 '
... или Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr</ artifactId >
< version >1.5.7</ version >
</ dependency >
Во -первых, экземпляр MediaTransformer
с Context
, который может получить доступ к Uri
, который вы будете использовать для ввода и вывода. Чаще всего это будет контекст приложения.
MediaTransformer mediaTransformer = new MediaTransformer ( getApplicationContext ());
Затем просто вызовите метод transform
, чтобы преобразовать ваше видео:
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );
Немногие заметные вещи, связанные с трансформацией:
requestId
, он будет использоваться при вызове слушателя или необходимо при отмене непрерывного преобразованияnull
целевой формат означает, что вы не хотите изменять трек (ы) такого типаGlFilter
S в TransformationOptions
, который будет применен в порядкеBufferFilter
в TransformationOptions
, которые будут применены в порядкеtransform
несколько раз, чтобы получить запросы на преобразование в очередиTransformationOptions
MediaRange
в TransformationOptions
Продолжающееся преобразование может быть отменено, позвонив cancel
с его requestId
:
mediaTransformer . cancel ( requestId );
Когда вам больше не понадобится MediaTransformer
, пожалуйста, отпустите его. Обратите внимание, что экземпляр MediaTransformer
становится непригодным после его выпуска, вам придется создать экземпляр нового.
mediaTransformer . release ();
Когда преобразование не удается, исключение не бросается, а скорее предоставляется в TransformationListener.onError
обратный вызов. LITR определяет свои собственные исключения для различных сценариев. Для API> = 23 исключение LIT также будет содержать MediaCodec.CodecException
в качестве причины.
Когда это возможно, статистика преобразования будет предоставлена в обратных вызовах слушателей. Статистика включает в себя форматы источника и целевых дорожек, используемые кодеки и результаты преобразования и время для каждой дорожки.
По умолчанию LITR использует Android MediaCodec Stack для выполнения всей работы в мультимедиа, и OpenGL для рендеринга. Но это не в камне.
На высоком уровне LITR разбивает трансформацию на пять основных шагов:
Каждый шаг преобразования выполняется компонентом. Каждый компонент абстрагирован как интерфейс:
MediaSource
Decoder
Renderer
Encoder
MediaTarget
При использовании ваших собственных реализаций компонентов убедитесь, что вывод компонента соответствует ожидаемому входу следующего компонента. Например, если вы используете пользовательский Encoder
(AV1?), Убедитесь, что он принимает любой Renderer
формата кадров ( GlSurface
, ByteBuffer
), и выводит то, что MediaTarget
ожидает в качестве входного материала.
Пользовательские компоненты можно использовать в TrackTransform
S в методе преобразования низкого уровня:
transform ( requestId ,
List < TrackTransform > trackTransforms ,
listener ,
granularity )
Этот API позволяет определять компоненты и параметры на трек носителя, таким образом, позволяя операциям на основе треков, таких как дорожки MUXING/Demuxing, по -разному транскодировать различные треки, изменение порядка трека и т. Д.
Вы можете использовать пользовательские фильтры для изменения видео/аудио кадров. Если вы пишете пользовательский видеофильтр, реализуйте интерфейс GlFilter
, чтобы сделать дополнительные операции RopeGl Draw. Если вам нужно изменить то, как источник видео кадры отображается на целевой видео кадре, внедрите интерфейс GlFrameRender
. Для аудиофильтра реализуйте BufferFilter
.
Теперь LITR имеет 40 новых видеофильтров с ускоренным графическим процессором, переносимыми из проектов MP4Composer-Android и Android-Gpuimage. Вы также можете создать свой собственный фильтр, просто настраивая VideoFramerenderFilter с вашим пользовательским шейдером, без дополнительного кодирования!
Все видео/аудиофильтры живут в библиотеке «Filter Pack», которая доступна через Gradle:
implementation ' com.linkedin.android.litr:litr-filters:1.5.7 '
... или Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr-filters</ artifactId >
< version >1.5.7</ version >
</ dependency >
Вы можете передать список фильтров при преобразовании видео или аудио -трека. Имейте в виду, что фильтры будут применены в том порядке, в котором они находятся в списке, поэтому заказ вопросов.
MediaTransformer
- это очень намеренно не синглтон, чтобы позволить легко насмехаться над модульными тестами. Существует также MockMediaTransformer
для тестов пользовательского интерфейса, которые могут синхронно «воспроизводить» последовательность обратных вызовов слушателя.
Основная бизнес -логика в LITR хорошо покрывается модульными тестами. LITR предназначен для использования паттерна впрыска зависимостей, что делает очень легко писать тесты JVM с высмеиваемыми зависимостями. Мы используем структуру Mockito для издевательства.
LITR поставляется с довольно полезным демонстрационным приложением, которое позволяет транскоду видео/аудио -треков с различными параметрами, в дополнение к предоставлению образца кода.
Пожалуйста, прочитайте Anforming.md для получения подробной информации о нашем кодексе поведения и процессе отправки нам запросов.
Для доступных версий см. Теги в этом репозитории.
Вы можете использовать сборки снимков для проверки новейших неизданных изменений. Новый снимок опубликован после каждого слияния в основной филиале с помощью рабочего процесса Deploy Snappel Github Github.
Просто добавьте хранилище снимка сонатипа в свои сценарии Gradle:
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
Вы можете найти последнюю версию снимка для использования в файле gradle.properties.
См. Также Список участников, которые участвовали в этом проекте.
Этот проект лицензирован по лицензии BSD 2 -CLAUSE - см. Файл лицензии для получения подробной информации