Kullanıcılar, birden fazla medya öğesinin son videoda aynı anda görünmesi için birden fazla medya öğesini birlikte düzenlemek isteyebilir. Örneğin, öğeleri pencere içinde pencere, yan yana veya ızgara gibi düzenlerde yerleştirebilirsiniz. Bu tür projelere bazı örnekler:
Bu düzenlerin nasıl uygulandığını Composition demo uygulamasında inceleyebilirsiniz.
VideoCompositorSettings uygulayın
VideoCompositorSettings arayüzü 2 yöntem içerir:
getOutputSize(List<Size> inputSizes): Her girişin boyutunu belirtmek için kullanabilirsiniz.EditedMediaItemSequencegetOverlaySettings(int inputId, long presentationTimeUs): Her sekansın karede nasıl görüneceğini belirleyebileceğiniz yerdir.
OverlaySettings ile bir dizinin sunumunu yapılandırma
getOverlaySettings() uygulamanız, projenizdeki her sıra için OverlaySettings arayüzünün bir örneğini döndürmelidir. inputId parametresi, ayarların hangi sıraya uygulanacağını tanımlar.
Örnek oluşturmak için Media3'te yer alan StaticOverlaySettings sınıfını kullanabilirsiniz. Alfa şeffaflığı ve HDR parlaklığı gibi görsel değişiklikler, sabitleme noktası ve çerçeve içindeki konum gibi konumsal değişiklikler ve döndürme ve ölçek gibi dönüşümler dahil olmak üzere yapılandırma seçeneklerinin tam listesi için StaticOverlaySettings.Builder referans sayfasına bakın.
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() } }
getOverlaySettings() yönteminin presentationTimeUs parametresini kullanarak bu ayarları videonun konumuna göre değiştirebilirsiniz. Bu durum, bu sayfanın başlarında yer alan hareketli resim içinde resim örneğinde gösterilmiştir.
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() } }
Geri bildirim
Video birleştirme kullanım alanlarıyla ilgili geri bildiriminiz veya özellik isteğiniz varsa Media3 GitHub deposunda sorun bildirin.