تعریف چیدمان‌ها با VideoCompositorSettings سفارشی

کاربران ممکن است بخواهند چندین دارایی رسانه‌ای را با هم ویرایش کنند تا بیش از یک مورد رسانه‌ای به‌طور هم‌زمان در ویدیو نهایی ظاهر شود. این شامل چیدن موارد در چیدمان‌هایی مانند تصویردرتصویر، کناربه‌کنار، یا جدولی می‌شود. در اینجا چند نمونه از این پروژه‌ها آورده شده است:

ویدیو با چیدمان تصویردرتصویر
فایل‌های رسانه‌ای در چیدمان تصویردرتصویر مرتب شده‌اند.
ویدیو با چیدمان جدولی
فایل‌های رسانه‌ای در چیدمان جدولی ۲×۲ مرتب شده‌اند.

می‌توانید پیاده‌سازی این چیدمان‌ها را در برنامه نمایشی «ترکیب» کاوش کنید.

پیاده‌سازی VideoCompositorSettings

واسط VideoCompositorSettings شامل ۲ روش است:

پیکربندی ارائه توالی با OverlaySettings

پیاده‌سازی شما از getOverlaySettings() باید نمونه‌ای از رابط OverlaySettings را برای هر توالی در پروژه شما برگرداند. پارامتر inputId مشخص می‌کند که تنظیمات برای کدام توالی اعمال خواهد شد. برای ساختن نمونه، می‌توانید از کلاس StaticOverlaySettings در Media3 استفاده کنید. برای فهرست کامل گزینه‌های پیکربندی، که شامل تغییرات دیداری مثل شفافیت آلفا و درخشندگی HDR، تغییرات موقعیتی مثل نقطه اتصال و مکان در قاب، و تبدیل‌هایی مثل چرخش و مقیاس می‌شود، به صفحه مرجع 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 ثبت کنید.