LITR(「LAI-TR」と発音)は、オプションのフレーム変更によりトランスコーディングビデオとオーディオトラックをサポートする軽量ビデオ/オーディオ変換ツールです。
現在の反復では、litrは次のようにサポートしています。
デフォルトでは、LITRは、ハードウェアの加速デコード/エンコードとレンダリングにOpenGLにAndroid MediaCodecスタックを使用します。また、Media Exctractorと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
指定することでオプションでトリミングできます継続的な変換は、 cancel
requestId
ことでキャンセルできます。
mediaTransformer . cancel ( requestId );
MediaTransformer
不要になったら、リリースしてください。 MediaTransformer
インスタンスは、リリースした後に使用できなくなることに注意してください。新しいものをインスタンス化する必要があります。
mediaTransformer . release ();
変換が失敗した場合、例外はスローされず、 TransformationListener.onError
コールバックで提供されます。 LITRは、さまざまなシナリオに対して独自の例外を定義しています。 API> = 23の場合、LITR例外には、原因として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により、メディアトラックごとにコンポーネントとパラメーターを定義できるため、マクシング/デンバーのトラック、さまざまなトラックのトランスコーディング、トラックオーダーの変更など、トラックベースの操作が可能になります。
カスタムフィルターを使用して、ビデオ/オーディオフレームを変更できます。カスタムビデオフィルターを作成している場合は、 GlFilter
インターフェイスを実装して、追加のOpenGL Draw操作を作成します。ソースビデオフレームがターゲットビデオフレームにレンダリングされる方法を変更する必要がある場合は、 GlFrameRender
インターフェイスを実装してください。オーディオフィルターの場合、 BufferFilter
を実装します。
LITRには、MP4Composer-AndroidおよびAndroid-Gpuimageプロジェクトから移植された40の新しいGPU加速ビデオフィルターがあります。また、追加のコーディングなしで、カスタムシェーダーで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
、単体テストで簡単にock笑することを可能にするために、非常に意図的にシングルトンではありません。 UIテスト用のMockMediaTransformer
もあります。これは、リスナーのコールバックのシーケンスを「再生する」ことができます。
LITRのコアビジネスロジックは、単体テストでよくカバーされています。 LITRは、依存関係噴射パターンを使用するように設計されているため、mocked依存関係を使用してJVMテストを簡単に記述できます。モッキングにモッキートフレームワークを使用します。
LITRには非常に便利なデモアプリが付属しており、サンプルコードを提供することに加えて、さまざまなパラメーターを使用してビデオ/オーディオトラックをトランスコードできます。
私たちの行動規範の詳細と、私たちにプル要求を送信するプロセスについては、converting.mdをお読みください。
利用可能なバージョンについては、このリポジトリのタグを参照してください。
スナップショットビルドを使用して、最新の未発表の変更をテストできます。デプロイスナップショットGitHubアクションワークフローにより、メインブランチにマージするたびに新しいスナップショットが公開されます。
SonatypeスナップショットリポジトリをGradleスクリプトに追加するだけです。
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
gradle.propertiesファイルで使用する最新のスナップショットバージョンを見つけることができます。
このプロジェクトに参加した貢献者のリストも参照してください。
このプロジェクトは、BSD 2 -Clauseライセンスの下でライセンスされています - 詳細については、ライセンスファイルを参照してください