LITR (ออกเสียงว่า "LAI-TR") เป็นเครื่องมือการแปลงวิดีโอ/เสียงที่มีน้ำหนักเบาซึ่งรองรับแทร็กวิดีโอและเสียงที่มีการปรับเปลี่ยนเฟรมเสริม
ในการทำซ้ำปัจจุบัน LITR รองรับ:
โดยค่าเริ่มต้น LITR ใช้ Android MediaCodec Stack สำหรับฮาร์ดแวร์เร่งการถอดรหัส/การเข้ารหัสและ OpenGL สำหรับการแสดงผล นอกจากนี้ยังใช้ MediaExtractor และ MediaMuxer เพื่ออ่าน/เขียนสื่อ
เพียงแค่คว้าผ่าน Gradle:
implementation ' com.linkedin.android.litr:litr:1.5.7 '
... หรือ Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr</ artifactId >
< version >1.5.7</ version >
</ dependency >
ขั้นแรกให้อินสแตนซ์ MediaTransformer
ด้วย Context
ที่สามารถเข้าถึง Uri
ที่คุณจะใช้สำหรับอินพุตและเอาต์พุต โดยทั่วไปจะเป็นบริบทของแอปพลิเคชัน
MediaTransformer mediaTransformer = new MediaTransformer ( getApplicationContext ());
จากนั้นเพียงแค่เรียกใช้วิธี transform
เพื่อแปลงวิดีโอของคุณ:
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );
มีสิ่งที่น่าสังเกตน้อยมากที่เกี่ยวข้องกับการเปลี่ยนแปลง:
requestId
ที่ไม่ซ้ำกันมันจะถูกใช้เมื่อโทรกลับไปที่ผู้ฟังหรือจำเป็นเมื่อยกเลิกการแปลงอย่างต่อเนื่องnull
หมายความว่าคุณไม่ต้องการแก้ไขแทร็กของประเภทนั้นGlFilter
s ใน TransformationOptions
ซึ่งจะนำไปใช้ตามลำดับBufferFilter
s ใน TransformationOptions
ซึ่งจะนำไปใช้ตามลำดับtransform
หลายครั้งเพื่อขอคิวการเปลี่ยนแปลงTransformationOptions
MediaRange
ใน TransformationOptions
การแปลงอย่างต่อเนื่องสามารถยกเลิกได้โดยการโทร cancel
ด้วย requestId
ของมัน:
mediaTransformer . cancel ( requestId );
เมื่อคุณไม่ต้องการ MediaTransformer
อีกต่อไปโปรดปล่อยมัน โปรดทราบว่าอินสแตนซ์ของ MediaTransformer
นั้นไม่สามารถใช้งานได้หลังจากที่คุณปล่อยมันคุณจะต้องสร้างอินสแตนซ์ใหม่
mediaTransformer . release ();
เมื่อการเปลี่ยนแปลงล้มเหลวข้อยกเว้นจะไม่ถูกโยนทิ้ง แต่ให้ไว้ใน TransformationListener.onError
callback 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 นี้อนุญาตให้กำหนดส่วนประกอบและพารามิเตอร์ต่อการติดตามสื่อจึงช่วยให้การดำเนินการตามแทร็กเช่นแทร็ก muxing/demuxing, transcoding แทร็กที่แตกต่างกันเปลี่ยนลำดับการติดตาม ฯลฯ ฯลฯ
คุณสามารถใช้ตัวกรองที่กำหนดเองเพื่อแก้ไขเฟรมวิดีโอ/เสียง หากคุณกำลังเขียนตัวกรองวิดีโอที่กำหนดเองให้ใช้อินเทอร์เฟซ GlFilter
เพื่อดำเนินการ Draw OpenGL เพิ่มเติม หากคุณต้องการเปลี่ยนวิธีการแสดงเฟรมวิดีโอต้นฉบับลงบนเฟรมวิดีโอเป้าหมายให้ใช้อินเทอร์เฟซ GlFrameRender
สำหรับตัวกรองเสียงให้ใช้ BufferFilter
ตอนนี้ LITR มีตัวกรองวิดีโอแบบเร่งความเร็ว GPU 40 ตัวที่พอร์ตจากโครงการ MP4composer-Android และ Android-Gpuimage นอกจากนี้คุณยังสามารถสร้างตัวกรองของคุณเองได้ง่ายๆโดยกำหนดค่า VideoFramerenderFilter ด้วย shader ที่กำหนดเองของคุณโดยไม่มีการเข้ารหัสเพิ่มเติม!
ตัวกรองวิดีโอ/เสียงทั้งหมดอยู่ในไลบรารี "Filter Pack" ซึ่งมีให้ผ่าน Gradle:
implementation ' com.linkedin.android.litr:litr-filters:1.5.7 '
... หรือ Maven:
< dependency >
< groupId >com.linkedin.android.litr</ groupId >
< artifactId >litr-filters</ artifactId >
< version >1.5.7</ version >
</ dependency >
คุณสามารถส่งผ่านรายการตัวกรองเมื่อเปลี่ยนวิดีโอหรือแทร็กเสียง โปรดทราบว่าตัวกรองจะถูกนำไปใช้ในลำดับที่พวกเขาอยู่ในรายการดังนั้นการสั่งซื้อเรื่อง
MediaTransformer
นั้นไม่ได้ตั้งใจอย่างมากที่จะทำให้การเยาะเย้ยอย่างง่ายดายในการทดสอบหน่วย นอกจากนี้ยังมี MockMediaTransformer
สำหรับการทดสอบ UI ซึ่งสามารถซิงโครนัส "เล่นกลับ" ลำดับของการเรียกผู้ฟัง
ตรรกะธุรกิจหลักใน LITR ได้รับการคุ้มครองอย่างดีจากการทดสอบหน่วย LITR ได้รับการออกแบบมาเพื่อใช้รูปแบบการฉีดพึ่งพาซึ่งทำให้ง่ายต่อการเขียนการทดสอบ JVM ด้วยการพึ่งพาการเยาะเย้ย เราใช้เฟรมเวิร์ก Mockito เพื่อเยาะเย้ย
LITR มาพร้อมกับแอพสาธิตที่มีประโยชน์ซึ่งช่วยให้คุณสามารถแทร็กวิดีโอ/เสียงที่มีพารามิเตอร์ที่แตกต่างกันนอกเหนือจากการให้รหัสตัวอย่าง
โปรดอ่านรายละเอียดเกี่ยวกับจรรยาบรรณของเราและกระบวนการในการส่งคำขอดึงให้เรา
สำหรับเวอร์ชันที่มีให้ดูที่แท็กในที่เก็บนี้
คุณสามารถใช้ Snapshot Builds เพื่อทดสอบการเปลี่ยนแปลงล่าสุดที่ยังไม่เผยแพร่ สแน็ปช็อตใหม่ได้รับการเผยแพร่หลังจากทุกการรวมเข้ากับสาขาหลักโดย Workflow การดำเนินการ Snapshot GitHub
เพียงเพิ่มที่เก็บสแน็ปช็อต sonatype ลงในสคริปต์ Gradle ของคุณ:
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
คุณสามารถค้นหาเวอร์ชันสแน็ปช็อตล่าสุดที่ใช้ในไฟล์ gradle.properties
ดูรายชื่อผู้สนับสนุนที่เข้าร่วมในโครงการนี้
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต BSD 2 -cluse - ดูไฟล์ใบอนุญาตสำหรับรายละเอียด