LITR (diucapkan "lai-tr") adalah alat transformasi video/audio ringan yang mendukung transcoding video dan trek audio dengan modifikasi bingkai opsional.
Dalam iterasi saat ini, Litr mendukung:
Secara default, LITR menggunakan tumpukan Android MediaCodec untuk perangkat keras yang dipercepat decoding/encoding dan OpenGL untuk rendering. Ini juga menggunakan mediaExtractor dan Mediamuxer untuk membaca/menulis media.
Cukup ambil melalui Gradle:
implementation ' com.linkedin.android.litr:litr:1.5.7 '... atau Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr</ artifactId >
< version >1.5.7</ version >
</ dependency >
Pertama, MediaTransformer instantiate dengan Context yang dapat mengakses Uri yang akan Anda gunakan untuk input dan output. Paling umum, itu akan menjadi konteks aplikasi.
MediaTransformer mediaTransformer = new MediaTransformer ( getApplicationContext ()); Kemudian cukup panggil metode transform untuk mengubah video Anda:
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );Beberapa hal penting yang terkait dengan transformasi:
requestId yang unik, itu akan digunakan saat menelepon kembali pada pendengar, atau dibutuhkan saat membatalkan transformasi yang sedang berlangsungnull berarti Anda tidak ingin memodifikasi trek dari jenis ituGlFilter S di TransformationOptions , yang akan diterapkan secara berurutanBufferFilter S dalam TransformationOptions yang akan diterapkan secara berurutantransform beberapa kali, untuk mengantri permintaan transformasiTransformationOptionsMediaRange dalam TransformationOptions Transformasi yang sedang berlangsung dapat dibatalkan dengan menelepon cancel dengan requestId :
mediaTransformer . cancel ( requestId ); Ketika Anda tidak lagi membutuhkan MediaTransformer , silakan lepaskan. Perhatikan bahwa instance MediaTransformer menjadi tidak dapat digunakan setelah Anda merilisnya, Anda harus membuat instantiate yang baru.
mediaTransformer . release (); Ketika transformasi gagal, pengecualian tidak dilemparkan, melainkan disediakan di TransformationListener.onError callback. Litr mendefinisikan pengecualiannya sendiri untuk skenario yang berbeda. Untuk API> = 23, pengecualian LITR juga akan mengandung MediaCodec.CodecException sebagai penyebab.
Jika memungkinkan, statistik transformasi akan disediakan dalam panggilan balik pendengar. Statistik termasuk format lintasan sumber dan target, codec yang digunakan dan hasil transformasi dan waktu untuk setiap trek.
Secara default, Litr menggunakan Stack Android MediaCodec untuk melakukan semua pekerjaan media, dan OpenGL untuk rendering. Tapi ini tidak diatur dalam batu.
Pada level tinggi, LITR memecah transformasi menjadi lima langkah penting:
Setiap langkah transformasi dilakukan oleh komponen. Setiap komponen diabstraksi sebagai antarmuka:
MediaSourceDecoderRendererEncoderMediaTarget Saat menggunakan implementasi komponen Anda sendiri, pastikan bahwa output komponen cocok dengan input yang diharapkan dari komponen berikutnya. Misalnya, jika Anda menggunakan Encoder khusus (AV1?), Pastikan ia menerima format bingkai apa pun yang dihasilkan Renderer ( GlSurface , ByteBuffer ) dan menghasilkan apa yang diharapkan MediaTarget sebagai input.
Komponen khusus dapat digunakan di TrackTransform S di metode transformasi "level rendah" di bawah ini:
transform ( requestId ,
List < TrackTransform > trackTransforms ,
listener ,
granularity )API ini memungkinkan komponen dan parameter yang menentukan per trek media, sehingga memungkinkan operasi berbasis trek, seperti trek muxing/demuxing, mentranskodasi trek yang berbeda secara berbeda, mengubah urutan trek, dll.
Anda dapat menggunakan filter khusus untuk memodifikasi bingkai video/audio. Jika Anda menulis filter video khusus, implementasikan antarmuka GlFilter untuk membuat operasi undian OpenGL tambahan. Jika Anda perlu mengubah bagaimana bingkai video sumber diterjemahkan ke bingkai video target, terapkan antarmuka GlFrameRender . Untuk filter audio, terapkan BufferFilter .
LITR sekarang memiliki 40 filter video yang dipercepat GPU baru yang diangkut dari proyek MP4Composer-Android dan Android-Gpuimage. Anda juga dapat membuat filter Anda sendiri hanya dengan mengkonfigurasi videoframerenderFilter dengan shader khusus Anda, tanpa pengkodean tambahan!
Semua filter video/audio hidup di perpustakaan "Filter Pack", yang tersedia melalui Gradle:
implementation ' com.linkedin.android.litr:litr-filters:1.5.7 '... atau Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr-filters</ artifactId >
< version >1.5.7</ version >
</ dependency >
Anda dapat masuk dalam daftar filter saat mengubah video atau trek audio. Perlu diingat bahwa filter akan diterapkan dalam urutan yang ada dalam daftar, jadi memesan masalah.
MediaTransformer sangat sengaja bukan singleton, untuk memudahkan mengejeknya dalam tes unit. Ada juga MockMediaTransformer untuk tes UI, yang dapat secara sinkron "memutar kembali" urutan callback pendengar.
Logika bisnis inti di LITR ditutupi dengan baik oleh tes unit. LITR dirancang untuk menggunakan pola injeksi ketergantungan, yang membuatnya sangat mudah untuk menulis tes JVM dengan ketergantungan yang diejek. Kami menggunakan kerangka mockito untuk mengejek.
Litr hadir dengan aplikasi demo yang cukup berguna, yang memungkinkan Anda mentranskode video/trek audio dengan parameter yang berbeda, selain memberikan kode sampel.
Harap baca Contributing.md untuk perincian tentang kode perilaku kami, dan proses untuk mengirimkan permintaan tarik kepada kami.
Untuk versi yang tersedia, lihat tag di repositori ini.
Anda dapat menggunakan snapshot build untuk menguji perubahan terbaru yang belum dirilis. Snapshot baru diterbitkan setelah setiap penggabungan ke cabang utama dengan menggunakan snapshot github action workflow.
Cukup tambahkan repositori snapshot sonatype ke skrip lulusan Anda:
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}Anda dapat menemukan versi snapshot terbaru untuk digunakan di file gradle.properties.
Lihat juga daftar kontributor yang berpartisipasi dalam proyek ini.
Proyek ini dilisensikan di bawah lisensi BSD 2 -Clause - lihat file lisensi untuk detailnya