قد يريد المستخدمون تعديل عدة مواد عرض وسائط معًا بحيث يظهر أكثر من عنصر وسائط واحد في الوقت نفسه في الفيديو النهائي. ويشمل ذلك ترتيب العناصر في تخطيطات، مثل نافذة ضمن نافذة أو جنبًا إلى جنب أو شبكة. في ما يلي بعض الأمثلة على هذه المشاريع:
يمكنك استكشاف تنفيذ لهذه التصاميم في تطبيق العرض التوضيحي لـ Composition.
تنفيذ VideoCompositorSettings
تحتوي الواجهة VideoCompositorSettings على طريقتَين:
getOutputSize(List<Size> inputSizes)، ويمكنك استخدامها لتحديد حجم كل حقل إدخالEditedMediaItemSequencegetOverlaySettings(int inputId, long presentationTimeUs)، حيث يمكنك تحديد كيفية ظهور كل تسلسل في الإطار
ضبط طريقة عرض تسلسل باستخدام OverlaySettings
يجب أن يعرض تنفيذ getOverlaySettings() مثيلاً لواجهة OverlaySettings لكل تسلسل في مشروعك. تحدّد المَعلمة
inputId التسلسل الذي سيتم تطبيق الإعدادات عليه.
لإنشاء مثيل، يمكنك استخدام فئة StaticOverlaySettings
المضمّنة في Media3. راجِع صفحة StaticOverlaySettings.Builder المرجعية
للاطّلاع على القائمة الكاملة لخيارات الإعداد، والتي تتضمّن تعديلات مرئية
مثل الشفافية الأبجدية وسطوع النطاق الديناميكي العالي، وتعديلات موضعية مثل
نقطة الارتكاز والموقع داخل الإطار، وعمليات تحويل مثل التدوير
والتوسيع.
override fun getOverlaySettings(inputId: Int, presentationTimeUs: Long): OverlaySettings { return when (inputId) { // Position the first sequence in the top-left 0 -> { StaticOverlaySettings.Builder() // Scale the video down to 1/4th the size of the frame .setScale(0.5f, 0.5f) // Anchor the sequence in the middle of frame .setOverlayFrameAnchor(0f, 0f) // Position the video in the top-left section of the frame .setBackgroundFrameAnchor(-0.5f, 0.5f) .build() } // Add more cases for remaining input sequences else -> StaticOverlaySettings.Builder().build() } }
باستخدام المَعلمة presentationTimeUs للطريقة getOverlaySettings()، يمكنك تعديل هذه الإعدادات استنادًا إلى موضع الفيديو، كما هو موضّح في مثال الصورة المتحركة في وضع "نافذة ضمن النافذة" في وقت سابق من هذه الصفحة.
override fun getOverlaySettings(inputId: Int, presentationTimeUs: Long): OverlaySettings { return if (inputId == 0) { // Use the first sequence as the overlay val cycleRadians = 2 * PI * (presentationTimeUs.toDouble() / cycleTimeUs) StaticOverlaySettings.Builder() // Scale the overlay down .setScale(0.35f, 0.35f) // Anchor the overlay in the top-middle of the frame .setOverlayFrameAnchor(0f, 1f) // Move the overlay over time .setBackgroundFrameAnchor(sin(cycleRadians).toFloat() * 0.5f, -0.2f) // Rotate the overlay over time .setRotationDegrees(cos(cycleRadians).toFloat() * -10f) .build() } else { // Present the second sequence in the background as normal StaticOverlaySettings.Builder().build() } }
الملاحظات
إذا كانت لديك أي ملاحظات أو طلبات ميزات لحالات استخدام تركيب الفيديو، يمكنك الإبلاغ عن مشكلة في مستودع Media3 على GitHub.