Người dùng có thể muốn chỉnh sửa nhiều thành phần nội dung nghe nhìn cùng nhau để có nhiều mục nội dung nghe nhìn xuất hiện cùng lúc trong video cuối cùng. Ví dụ: sắp xếp các mục trong bố cục như chế độ hình trong hình, cạnh nhau hoặc lưới. Dưới đây là một số ví dụ về những dự án như vậy:
Bạn có thể khám phá cách triển khai các bố cục này trong ứng dụng minh họa Composition.
Triển khai VideoCompositorSettings
Giao diện VideoCompositorSettings chứa 2 phương thức:
getOutputSize(List<Size> inputSizes)mà bạn có thể dùng để chỉ định kích thước của từng đầu vàoEditedMediaItemSequencegetOverlaySettings(int inputId, long presentationTimeUs), đây là nơi bạn có thể chỉ định cách mỗi chuỗi xuất hiện trong khung hình
Định cấu hình cách trình bày một chuỗi bằng OverlaySettings
Quá trình triển khai getOverlaySettings() sẽ trả về một thực thể của giao diện OverlaySettings cho mỗi chuỗi trong dự án của bạn. Tham số inputId xác định trình tự mà các chế độ cài đặt sẽ được áp dụng.
Để tạo một thực thể, bạn có thể sử dụng lớp StaticOverlaySettings có trong Media3. Hãy xem trang tham chiếu StaticOverlaySettings.Builder để biết danh sách đầy đủ các lựa chọn cấu hình, bao gồm cả các điểm sửa đổi về hình ảnh như độ trong suốt alpha và độ chói HDR, các điểm sửa đổi về vị trí như điểm neo và vị trí trong khung hình, cũng như các điểm sửa đổi về phép biến đổi như xoay và tỷ lệ.
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() } }
Bằng cách sử dụng tham số presentationTimeUs của phương thức getOverlaySettings(), bạn có thể sửa đổi các chế độ cài đặt này dựa trên vị trí của video, như minh hoạ bằng ví dụ về chế độ hình trong hình chuyển động ở phần trước của trang này.
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() } }
Phản hồi
Nếu bạn có ý kiến phản hồi hoặc yêu cầu về tính năng cho các trường hợp sử dụng tính năng kết hợp video, hãy gửi vấn đề trên kho lưu trữ Media3 trên GitHub.