LITR (وضوحا "LAI-TR") هي أداة تحويل فيديو/صوت خفيفة الوزن تدعم ترميز الفيديو والصوت مع تعديل إطار اختياري.
في تكرارها الحالي يدعم LITR:
بشكل افتراضي ، يستخدم LITR مكدس Android MediaCodec للأجهزة المتسارعة فك الارتباط/الترميز و 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
S الذي ستستخدمه في الإدخال والمخرجات. الأكثر شيوعا ، سيكون هذا سياق التطبيق.
MediaTransformer mediaTransformer = new MediaTransformer ( getApplicationContext ());
ثم ببساطة استدعاء طريقة transform
لتحويل الفيديو الخاص بك:
mediaTransformer . transform ( requestId ,
sourceVideoUri ,
targetVideoFilePath ,
targetVideoFormat ,
targetAudioFormat ,
videoTransformationListener ,
transformationOptions );
القليل من الأشياء البارزة المتعلقة بالتحول:
requestId
فريد من نوعه ، سيتم استخدامه عند الاتصال بمستمع ، أو مطلوب عند إلغاء التحول المستمرnull
يعني أنك لا تريد تعديل المسار (المسارات) من هذا النوعGlFilter
في TransformationOptions
، والتي سيتم تطبيقها بالترتيبBufferFilter
في TransformationOptions
، والتي سيتم تطبيقها بالترتيبtransform
عدة مرات ، لطلبات تحويل قائمة الانتظارTransformationOptions
MediaRange
في TransformationOptions
يمكن إلغاء التحول المستمر عن طريق الاتصال cancel
مع requestId
:
mediaTransformer . cancel ( requestId );
عندما لم تعد بحاجة إلى MediaTransformer
، يرجى إطلاقه. لاحظ أن مثيل MediaTransformer
يصبح غير قابل للاستعمال بعد إطلاقه ، سيتعين عليك إنشاء مثيل جديد.
mediaTransformer . release ();
عندما يفشل التحول ، لا يتم إلقاء الاستثناء ، بل يتم توفيره في تحويل TransformationListener.onError
. تحدد 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 )
تتيح واجهة برمجة التطبيقات هذه تحديد المكونات والمعلمات لكل مسار الوسائط ، مما يسمح للعمليات القائمة على المسار ، مثل مسارات muxing/demuxing ، وتجاوز المسارات المختلفة بشكل مختلف ، وتغيير ترتيب المسار ، إلخ.
يمكنك استخدام المرشحات المخصصة لتعديل إطارات الفيديو/الصوت. إذا كنت تكتب مرشح فيديو مخصص ، فقم بتنفيذ واجهة GlFilter
لإجراء عمليات رسم OpenGL إضافية. إذا كنت بحاجة إلى تغيير كيفية عرض إطار الفيديو المصدر على إطار فيديو مستهدف ، فقم بتنفيذ واجهة GlFrameRender
. لمرشح الصوت ، تنفيذ BufferFilter
.
لدى LITR الآن 40 مرشحات فيديو جديدة معالجة GPU تم نقلها من مشاريع MP4COMPOSER-Android و Android-GPUIMAGE. يمكنك أيضًا إنشاء مرشح خاص بك ببساطة عن طريق تكوين videoframerenderfilter مع تظليلك المخصص ، مع عدم وجود ترميز إضافي!
تعيش جميع مرشحات الفيديو/الصوت في مكتبة "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
لاختبارات واجهة المستخدم ، والتي يمكن أن "تشارك" بشكل متزامن في سلسلة من عمليات الاسترجاعات للمستمع.
منطق الأعمال الأساسي في LITR مغطى جيدًا باختبارات الوحدة. تم تصميم LITR لاستخدام نمط حقن التبعية ، مما يجعل من السهل جدًا كتابة اختبارات JVM مع تبعيات مسيرة. نستخدم إطار عمل Mockito للسخرية.
يأتي LITR مع تطبيق تجريبي مفيد جدًا ، والذي يتيح لك نقل مسارات الفيديو/الصوت مع معلمات مختلفة ، بالإضافة إلى توفير رمز عينة.
يرجى قراءة المساهمة.
للحصول على الإصدارات المتاحة ، راجع العلامات الموجودة على هذا المستودع.
يمكنك استخدام Snapshot Builds لاختبار أحدث التغييرات التي لم يتم إصدارها. يتم نشر لقطة جديدة بعد كل دمج في الفرع الرئيسي من خلال سير عمل Snapshot Github Action.
فقط أضف مستودع Sonatype Snapshot إلى نصوص Gradle:
repositories {
maven {
url " https://oss.sonatype.org/content/repositories/snapshots/ "
}
}
يمكنك العثور على أحدث إصدار لقطة لاستخدامها في ملف Gradle.properties.
انظر أيضًا قائمة المساهمين الذين شاركوا في هذا المشروع.
تم ترخيص هذا المشروع بموجب ترخيص BSD 2 -Cause - راجع ملف الترخيص للحصول على التفاصيل