کاربران ممکن است بخواهند چندین دارایی رسانهای را با هم ویرایش کنند تا بیش از یک مورد رسانهای بهطور همزمان در ویدیو نهایی ظاهر شود. این شامل چیدن موارد در چیدمانهایی مانند تصویردرتصویر، کناربهکنار، یا جدولی میشود. در اینجا چند نمونه از این پروژهها آورده شده است:
میتوانید پیادهسازی این چیدمانها را در برنامه نمایشی «ترکیب» کاوش کنید.
پیادهسازی VideoCompositorSettings
واسط VideoCompositorSettings شامل ۲ روش است:
getOutputSize(List<Size> inputSizes)، که میتوانید از آن برای تعیین اندازه هر ورودیEditedMediaItemSequenceاستفاده کنیدgetOverlaySettings(int inputId, long presentationTimeUs)، که در آن میتوانید مشخص کنید هر توالی چگونه در قاب ظاهر شود
پیکربندی ارائه توالی با 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 ثبت کنید.