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つの重要なステップに分解します。
各変換ステップは、コンポーネントによって実行されます。各コンポーネントは、インターフェイスとして抽象化されています。
MediaSourceDecoderRendererEncoderMediaTarget独自のコンポーネントの実装を使用する場合、コンポーネントの出力が次のコンポーネントの予想入力と一致することを確認してください。たとえば、カスタム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ライセンスの下でライセンスされています - 詳細については、ライセンスファイルを参照してください