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許可證獲得許可的 - 有關詳細信息,請參見許可證文件