LITR(发音为“ LAI-TR”)是一种轻巧的视频/音频转换工具,可通过可选的框架修改来支持转码视频和音轨。
在目前的迭代中,LITR支持:
默认情况下,LITR使用Android MediaCodec堆栈进行硬件加速/编码和OpenGL进行渲染。它还使用MediaExtractor和MediaMuxer来读/写媒体。
只需通过Gradle抓住:
implementation ' com.linkedin.android.litr:litr:1.5.7 '
...或小牛:
< 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
方法来转换您的视频:
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );
与转型有关的几个值得注意的事物:
requestId
,将其回电时使用,或在取消正在进行的转换时需要null
目标格式意味着您不想修改该类型的轨道TransformationOptions
中传递GlFilter
s的列表,该列表将按顺序应用TransformationOptions
中传递BufferFilter
s的列表,该列表将按顺序应用transform
,以排队转换请求TransformationOptions
中设置TransformationOptions
中指定MediaRange
来选择媒体可以通过使用其requestId
致电cancel
来取消持续的转换:
mediaTransformer . cancel ( requestId );
当您不再需要MediaTransformer
时,请发布。请注意,发布MediaTransformer
实例在发布后变得无法使用,您将必须实例化新的实例。
mediaTransformer . release ();
当转换失败时,不会引发异常,而是在TransformationListener.onError
中提供的。 LITR定义了其不同情况的例外。对于API> = 23,LITR异常还将包含MediaCodec.CodecException
作为原因。
在可能的情况下,将在侦听器回调中提供转换统计信息。统计信息包括源和目标轨道格式,使用的编解码器以及每个轨道的转换结果以及时间。
默认情况下,LITR使用Android MediaCodec堆栈进行所有媒体工作,并使用OpenGL进行渲染。但这不是石头固定的。
在高水平上,LITR将转型分为五个基本步骤:
每个转换步骤均由组件执行。每个组件被抽象为一个接口:
MediaSource
Decoder
Renderer
Encoder
MediaTarget
使用自己的组件实现时,请确保组件的输出匹配下一个组件的预期输入。例如,如果您使用的是自定义Encoder
(AV1?),请确保它接受任何帧格式Renderer
生成的框架格式( GlSurface
, ByteBuffer
),并输出MediaTarget
期望的输入。
自定义组件可以在“低级别”变换方法下的TrackTransform
s中使用:
transform ( requestId ,
List < TrackTransform > trackTransforms ,
listener ,
granularity )
此API允许每个媒体轨道定义组件和参数,从而允许基于轨道的操作,例如序曲/延迟轨道,以不同的方式转码轨道,更改轨道顺序等。
您可以使用自定义过滤器修改视频/音频帧。如果您正在编写自定义视频过滤器,请实现GlFilter
接口以进行额外的OpenGL抽奖操作。如果您需要更改源视频框架在目标视频框架上的渲染方式,请实现GlFrameRender
接口。对于音频过滤器,请实现BufferFilter
。
LITR现在有40个新的GPU加速视频过滤器,这些视频过滤器从MP4Composer-Android和Android-GPUimage Projects移植。您还可以通过使用自定义着色器配置VideoframerenderFilter来创建自己的过滤器,而没有额外的编码!
所有视频/音频过滤器都现用在“过滤包”库中,该库可通过Gradle提供:
implementation ' com.linkedin.android.litr:litr-filters:1.5.7 '
...或小牛:
< 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配备了非常有用的演示应用程序,除了提供示例代码外,还可以将带有不同参数的视频/音频轨道转码。
请阅读有关我们的行为准则的详细信息以及向我们提交拉的请求的过程的详细信息。
有关可用的版本,请参见此存储库上的标签。
您可以使用快照构建来测试最新的未发布更改。每次合并后,通过部署快照GitHub Action Workflow将新的快照发布。
只需将Sonatype快照存储库添加到您的Gradle脚本中:
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
您可以在gradle.properties文件中找到最新的快照版本。
另请参阅参与该项目的贡献者列表。
该项目是根据BSD 2 -CAREASE许可证获得许可的 - 有关详细信息,请参见许可证文件