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 หลายครั้งเพื่อขอคิวการเปลี่ยนแปลงTransformationOptionsMediaRange ใน TransformationOptions การแปลงอย่างต่อเนื่องสามารถยกเลิกได้โดยการโทร cancel ด้วย requestId ของมัน:
mediaTransformer . cancel ( requestId ); เมื่อคุณไม่ต้องการ MediaTransformer อีกต่อไปโปรดปล่อยมัน โปรดทราบว่าอินสแตนซ์ของ MediaTransformer นั้นไม่สามารถใช้งานได้หลังจากที่คุณปล่อยมันคุณจะต้องสร้างอินสแตนซ์ใหม่
mediaTransformer . release (); เมื่อการเปลี่ยนแปลงล้มเหลวข้อยกเว้นจะไม่ถูกโยนทิ้ง แต่ให้ไว้ใน TransformationListener.onError callback LITR กำหนดข้อยกเว้นของตัวเองสำหรับสถานการณ์ที่แตกต่างกัน สำหรับ API> = 23 ข้อยกเว้น LITR จะมี MediaCodec.CodecException เป็นสาเหตุ
เมื่อเป็นไปได้สถิติการแปลงจะมีให้ในการโทรกลับผู้ฟัง สถิติรวมถึงรูปแบบการติดตามแหล่งที่มาและเป้าหมายตัวแปลงสัญญาณที่ใช้และผลลัพธ์การแปลงและเวลาสำหรับแต่ละแทร็ก
โดยค่าเริ่มต้น LITR ใช้ Android MediaCodec สแต็กเพื่อทำงานสื่อทั้งหมดและ OpenGL สำหรับการแสดงผล แต่นี่ไม่ได้ตั้งอยู่ในหิน
ในระดับสูง LITR แบ่งการเปลี่ยนแปลงออกเป็นห้าขั้นตอนสำคัญ:
แต่ละขั้นตอนการแปลงจะดำเนินการโดยส่วนประกอบ แต่ละส่วนประกอบจะถูกแยกออกเป็นอินเทอร์เฟซ:
MediaSourceDecoderRendererEncoderMediaTarget เมื่อใช้การใช้งานส่วนประกอบของคุณเองตรวจสอบให้แน่ใจว่าเอาต์พุตของส่วนประกอบตรงกับอินพุตที่คาดหวังของส่วนประกอบถัดไป ตัวอย่างเช่นหากคุณใช้ 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 - ดูไฟล์ใบอนุญาตสำหรับรายละเอียด