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


میتوانید پیادهسازی این طرحبندیها را در برنامه آزمایشی کامپوزیشن بررسی کنید.
پیادهسازی تنظیمات 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() } }
بازخورد
اگر بازخورد یا درخواست ویژگی جدیدی برای موارد استفاده از ترکیب ویدیو دارید، میتوانید مشکل خود را در مخزن گیتهاب مدیا۳ ثبت کنید.