Özel VideoCompositorSettings ile düzen tanımlama

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:

Pencere içinde pencere düzenine sahip video
Pencere içinde pencere düzeninde yerleştirilmiş medya öğeleri.
Izgara düzenine sahip video
Medya öğeleri 2x2 ızgara düzeninde yerleştirilir.

Bu düzenlerin nasıl uygulandığını Composition demo uygulamasında inceleyebilirsiniz.

VideoCompositorSettings uygulayın

VideoCompositorSettings arayüzü 2 yöntem içerir:

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.