LITR ( "LAI-TR"으로 발음)은 옵션 프레임 수정으로 비디오 및 오디오 트랙을 트랜스 코딩하는 것을 지원하는 가벼운 비디오/오디오 변환 도구입니다.
현재 반복에서 litr는 다음을 지원합니다.
기본적으로 Litr는 하드웨어 가속 디코딩/인코딩 및 OpenGL 렌더링에 Android MediaCodec 스택을 사용합니다. 또한 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 >
먼저, 입력 및 출력에 사용할 Uri
액세스 할 수있는 Context
와 함께 MediaTransformer
인스턴스화하십시오. 가장 일반적으로, 그것은 응용 프로그램 컨텍스트가 될 것입니다.
MediaTransformer mediaTransformer = new MediaTransformer ( getApplicationContext ());
그런 다음 transform
Method를 호출하여 비디오를 변환합니다.
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );
변형과 관련된 주목할만한 것들 :
requestId
제공하십시오. 청취자를 다시 호출 할 때 사용되거나 진행중인 변환을 취소 할 때 필요합니다.null
대상 형식 전달은 해당 유형의 트랙을 수정하고 싶지 않다는 것을 의미합니다.TransformationOptions
에서 GlFilter
목록을 전달하여 순서대로 적용됩니다.TransformationOptions
에서 BufferFilter
목록을 전달하여 순서대로 적용됩니다.transform
여러 번 호출하여 대기열 변환 요청을 할 수 있습니다.TransformationOptions
에서 설정할 수 있습니다.TransformationOptions
에서 MediaRange
지정하여 미디어를 선택적으로 다듬을 수 있습니다. requestId
로 cancel
호출하여 진행중인 변환을 취소 할 수 있습니다.
mediaTransformer . cancel ( requestId );
더 이상 MediaTransformer
필요하지 않으면 해제하십시오. MediaTransformer
인스턴스는 해제 후 사용할 수 없게되므로 새 제품을 인스턴스화해야합니다.
mediaTransformer . release ();
변환이 실패하면 예외가 발생하지 않고 TransformationListener.onError
콜백에 제공됩니다. Litr는 다른 시나리오에 대한 자체 예외를 정의합니다. API> = 23의 경우 Litr Exception에는 MediaCodec.CodecException
포함됩니다.
가능하면 리스너 콜백에 변환 통계가 제공됩니다. 통계에는 소스 및 대상 트랙 형식, 사용 된 코덱 및 각 트랙의 변환 결과 및 시간이 포함됩니다.
기본적으로 Litr는 Android MediaCodec 스택을 사용하여 모든 미디어 작업을 수행하고 렌더링을위한 OpenGL을 사용합니다. 그러나 이것은 돌로 설정되어 있지 않습니다.
높은 수준에서 Litr은 5 가지 필수 단계로 전환을 분류합니다.
각 변환 단계는 구성 요소에 의해 수행됩니다. 각 구성 요소는 인터페이스로 추상화됩니다.
MediaSource
Decoder
Renderer
Encoder
MediaTarget
고유 한 구성 요소 구현을 사용할 때 구성 요소의 출력이 다음 구성 요소의 예상 입력과 일치하는지 확인하십시오. 예를 들어, 사용자 정의 Encoder
(AV1?)를 사용하는 경우 프레임 형식 Renderer
생성하는 모든 프레임 형식 ( GlSurface
, ByteBuffer
)을 수용하고 MediaTarget
입력으로 기대하는 것을 출력하십시오.
사용자 정의 구성 요소는 "낮은 레벨"변환 방법 아래의 TrackTransform
s에서 사용할 수 있습니다.
transform ( requestId ,
List < TrackTransform > trackTransforms ,
listener ,
granularity )
이 API는 미디어 트랙 당 구성 요소 및 매개 변수를 정의 할 수 있으므로 Muxing/Demuxing 트랙과 같은 트랙 기반 작업, 다른 트랙을 다르게 트랜스 코딩, 트랙 순서 변경 등을 허용합니다.
사용자 정의 필터를 사용하여 비디오/오디오 프레임을 수정할 수 있습니다. 사용자 정의 비디오 필터를 작성하는 경우 GlFilter
인터페이스를 구현하여 추가 OpenGL 드로우 작업을 수행하십시오. 소스 비디오 프레임이 대상 비디오 프레임으로 렌더링되는 방식을 변경 해야하는 경우 GlFrameRender
인터페이스를 구현하십시오. 오디오 필터의 경우 BufferFilter
구현하십시오.
Litr에는 이제 MP4 Composer-Android 및 Android-Gpuimage 프로젝트에서 포팅 된 40 개의 새로운 GPU 가속 비디오 필터가 있습니다. 추가 코딩없이 사용자 정의 셰이더로 VideoframerenderFilter를 구성하여 간단히 자신의 필터를 만들 수도 있습니다!
모든 비디오/오디오 필터는 "필터 팩"라이브러리에 있으며 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
단위 테스트에서 쉽게 조롱 할 수 있도록 의도적으로 싱글 톤이 아닙니다. UI 테스트를위한 MockMediaTransformer
도 있으며, 이는 일련의 청취자 콜백을 동시에 "재생"할 수 있습니다.
LITR의 핵심 비즈니스 로직은 단위 테스트에 의해 잘 다루어 있습니다. LITR은 의존성 주입 패턴을 사용하도록 설계되었으므로 조롱 된 종속성으로 JVM 테스트를 쉽게 작성할 수 있습니다. 우리는 조롱에 mockito 프레임 워크를 사용합니다.
LITR에는 매우 유용한 데모 앱이 제공되어 샘플 코드를 제공하는 것 외에도 다양한 매개 변수로 비디오/오디오 트랙을 트랜스 코드 할 수 있습니다.
당사의 행동 강령에 대한 자세한 내용과 당사에 풀 요청을 제출하는 프로세스는 Contributing.md를 읽으십시오.
사용 가능한 버전은이 저장소의 태그를 참조하십시오.
스냅 샷 빌드를 사용하여 최신 미공개 변경 사항을 테스트 할 수 있습니다. 배포 Snapshot GitHub Action Workflow를 통해 매 분기에 병합 된 후 새 스냅 샷이 게시됩니다.
Sonatype Snapshot 저장소를 Gradle 스크립트에 추가하십시오.
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
Gradle.Properties 파일에서 사용할 최신 스냅 샷 버전을 찾을 수 있습니다.
이 프로젝트에 참여한 기고자 목록도 참조하십시오.
이 프로젝트는 BSD 2 -Clause 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.