CompositionPlayer ile düzenlemeleri önizleme

Jetpack Media3 kitaplığı, video düzenlemelerini gerçek zamanlı olarak önizlemek için güçlü bir Player uygulaması olan CompositionPlayer API'sini sağlar. Uygulamanız, kullanıcıların efekt uygulama, kırpma veya birden fazla giriş medya öğesini birleştirme gibi işlemlerle videoları düzenlemesine olanak tanıyorsa CompositionPlayer, çıkışın doğru bir önizlemesini göstermenize yardımcı olur. Bu özellik, uygulanan düzenlemeleri kaydetmeniz gerekmediği durumlarda veya dışa aktarma için son videoya uygulamadan önce düzenlemelerin amaçlandığı şekilde yapılandırıldığını doğrulamak için faydalı olabilir.

CompositionPlayer nedir?

CompositionPlayer, Player arayüzünün özel bir uygulamasıdır ve özellikle Composition nesnelerini oynatmak için tasarlanmıştır. Composition, video klipler ve ses parçaları gibi giriş medya öğelerinin nasıl düzenleneceğini ve bunlara hangi ses ve video efektlerinin uygulanacağını tanımlar. Composition API hakkında daha fazla bilgi edinmek için Medya öğelerinin Composition tanımlama başlıklı makaleyi inceleyin.

CompositionPlayer'nın temel amacı, belirtilen tüm düzenlemelerle birlikte bu Composition'yi gerçek zamanlı olarak oluşturmaktır. Böylece kullanıcılar, zaman ve kaynak açısından maliyetli olabilecek dışa aktarma işlemine başlamadan önce düzenlemelerinin tam olarak nasıl görüneceğini görebilir. Aynı Composition nesnesi daha sonra dışa aktarma için Transformer örneğiyle kullanılabilir. Bu konu hakkında daha fazla bilgiyi Composition dışa aktarma başlıklı makalede bulabilirsiniz.

CompositionPlayer - ExoPlayer

Hem CompositionPlayer hem de ExoPlayer, Media3'teki Player uygulamaları olsa da farklı kullanım alanları için optimize edilmiştir:

Özellik

CompositionPlayer

ExoPlayer

Giriş medyası

Öğe başına efektler içeren birden fazla EditedMediaItem örneğinden oluşabilen tek bir Composition nesnesi alır.

Tek bir MediaItem veya MediaItem örneklerinin oynatma listesini alır.

Zaman çizelgesi

Zaman çizelgesi ve süre, kompozisyonun tamamına göre belirlenir.

Zaman çizelgesi ve süre, etkin olarak oynatılan MediaItem ile eşleşir.

Efektler

Efektler Kompozisyon içinde tanımlanır ve tek bir EditedMediaItem'a veya Kompozisyon'un tamamına uygulanabilir.

Efektler, setVideoEffects() ile ExoPlayer örneğinde ayarlanır ve her efekt, oynatma listesindeki her öğeye ayrı ayrı uygulanır.

Özünde, CompositionPlayer genellikle düzenleme bağlamında olmak üzere karmaşık bir Composition medya ve efekt oluşturmanız gerektiğinde en yararlı olanıdır. Ses veya video içeriklerinin genel amaçlı oynatılması ya da setVideoEffects() ile tek öğeli düzenlemelerin önizlemesi için ExoPlayer simgesini kullanın.

CompositionPlayer önizlemesi

CompositionPlayer'ı uygulamanıza entegre etmek için birkaç temel adım gerekir. Öncelikle, CompositionPlayer öğesini oluşturmak için Builder desenini kullanın, ardından oynatılacak Composition öğesini ayarlayın:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

Composition oluşturma hakkında bilgi edinmek için Composition oluşturma bölümüne bakın.

CompositionPlayer, Player arayüzünü uyguladığından, standart Player yöntemleriyle hedef çıkışı ayarlayabilir ve oynatıcıyı kontrol edebilirsiniz.

Hata işleme

Oynatma etkinliklerine ve hatalarına tepki vermek için CompositionPlayer öğenize bir Player.Listener örneği ekleyin. onPlayerError() geri çağırma işlevi, Composition veya VideoGraph.Factory gibi düzenlemeye özgü bileşenlerden kaynaklanan sorunları da gösterir. Daha fazla bilgi için Player events (Oynatıcı etkinlikleri) dokümanını okuyun.

Dikkat Edilmesi Gereken Önemli Noktalar

CompositionPlayer'ı kullanırken dikkat etmeniz gereken bazı özellikler ve sınırlamalar:

  • CompositionPlayer, Player arayüzüne dayalı olsa da oynatma için Composition'e bağlı olduğundan bazı davranışları ExoPlayer'den farklıdır. Örneğin, CompositionPlayer yalnızca tekrarlama modunun REPEAT_MODE_OFF veya REPEAT_MODE_ALL olarak ayarlanmasını destekler.
  • CompositionPlayer varsayılan olarak SingleInputVideoGraph.Factory kullanır. Ancak Kompozisyonunuzda resim veya video öğeleri içeren birden fazla sıra varsa CompositionPlayer örneğinizi oluştururken setVideoGraphFactory() kullanmanız gerekir. Bu sayede MultipleInputVideoGraph.Factory kullanabilirsiniz. Yalnızca bir dizide resim veya video öğeleri varsa ve diğerleri yalnızca ses içeriyorsa SingleInputVideoGraph.Factory yeterlidir.
  • Bestenizdeki tüm medya öğelerinin süresi açıkça ayarlanmış olmalıdır. Bu süre, resimler için MediaItem.Builder.setImageDurationMs(), ses veya videolar için EditedMediaItem.Builder.setDurationUs() ile ayarlanır.

Aşağıdaki kullanım alanları desteklenir:

  • Tek öğe önizlemesi.
  • Tek sıralı (yani sıralı medya öğeleri) önizleme.
  • Tek video dizisi + tek ses dizisi (örneğin, arka plan sesi) önizlemesi.

Aşağıdaki kullanım alanları aktif olarak geliştirilmektedir:

  • Birden fazla video dizisinin yer aldığı, resim içinde resim, yan yana ve ızgara gibi düzenlerin de dahil olduğu çok öğeli önizleme.
  • Düzenleme ardışık düzenini farklı bir grafik motoruyla özelleştirme

Özellik istekleri

CompositionPlayer ile ilgili özellik istekleriniz veya geri bildirimleriniz varsa Media3 GitHub deposunda sorun bildirin.