İçerikleri yönetme ve oynatma

Bu sayfada, video içeriğini yönetmek için önceden yükleme yöneticisinin nasıl kullanılacağı açıklanmaktadır. Önceden yükleme yöneticisi kullanarak kullanıcıya daha iyi bir deneyim sunabilirsiniz. Kullanıcı bir medya öğesinden diğerine geçtiğinde, yönetici içeriğin bir kısmını zaten yüklediği için oynatma daha hızlı başlar.

Bu sayfada aşağıdaki konular ele alınmaktadır:

Önceden yükleme yöneticisine medya öğeleri ekleme

Önceden yükleme yöneticisine, izleyeceği her medya öğesini bildirmeniz gerekir. Örneğin, uygulamanızda bir video bandı varsa bunları önceden yükleme yöneticisine eklersiniz. Kullanım alanınıza bağlı olarak tüm videoları veya yalnızca oynatılmakta olan videonun yakınındaki tüm videoları ekleyebilirsiniz. Daha sonra önceden yükleme yöneticisine yeni öğeler de ekleyebilirsiniz.

Bunun için addMediaItems gibi bir toplu ekleme yöntemi kullanın. Alternatif olarak, medya öğelerini tek tek eklemek için add (veya addMediaSource) yöntemini çağırabilirsiniz. Ancak medya öğelerini tek tek eklemek, önceden yüklemeyi otomatik olarak tetiklemez. Ayrı yöntemler kullanırken, öğe eklemeyi tamamladıktan sonra önceden yükleme yöneticisine öncelikleri güncellemesini ve önceden yüklemeye başlamasını söylemek için invalidate yöntemini açıkça çağırmanız gerekir.

val initialMediaItems = pullMediaItemsFromService(count = 20)
val rankingDataList = initialMediaItems.indices.toList()
preloadManager.addMediaItems(initialMediaItems, rankingDataList)

Kodla ilgili önemli noktalar

  • Bu snippet, önceden yükleme yöneticisini oluşturduktan sonra toplu modda ilk olarak nasıl dolduracağınızı gösterir. Mevcut ve doldurulmuş bir önceden yükleme yöneticisine öğe eklemek için addMediaItems yöntemini çağırabilirsiniz.
  • Bu snippet'te pullMediaItemsFromService(), uygulamanın oynatılacak içerik listesini getirme mantığıdır. Kod, en fazla 20 öğe içeren bir liste almak için bu yöntemi çağırır.
  • preloadManager, DefaultPreloadManager oluşturma bölümünde oluşturulan DefaultPreloadManager değeridir.
  • rankingData, önceden yükleme yöneticisinin her medya öğesinin önceliğini belirlemek için kullandığı bir değerdir. DefaultPreloadManager için rankingData, öğenin banttaki konumunu temsil eden bir tam sayıdır. Önceden yükleme yöneticisi, her öğenin o anda oynatılan öğeye olan uzaklığına göre önceliği belirler.

Medyayı getirme ve oynatma

Kullanıcı yeni bir medya öğesine geçtiğinde medya öğesini önceden yükleme yöneticisinden almanız gerekir. Önceden yükleme yöneticisi içeriklerden herhangi birini yüklediyse içerik, önceden yükleme yöneticisini kullanmadığınız duruma göre daha hızlı oynatılır. Önceden yükleme yöneticisi bu öğeden henüz içerik yüklemediyse içerik normal şekilde oynatılır.

Ayrıca, önceden yükleme yöneticisinin gelecekteki önceden yükleme işlemlerinin önceliklerini belirlemesini sağlamak için setCurrentPlayingIndex yöntemini çağırarak önceden yükleme yöneticisindeki mevcut oynatma dizinini güncellemeniz gerekir.

// When a media item is about to be displayed on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
  player.setMediaSource(mediaSource)
} else {
  // If the mediaSource is null, its mediaItem hasn't been added to the preload
  // manager yet. Send it directly to the player when it's about to play.
  player.setMediaItem(mediaItem)
}
player.prepare()

// When the media item is being displayed at the center of the screen ("in focus")
player.play()
// Update the current playing index to let the preload manager know where the user
// is in the carousel/pagination/list.
preloadManager.setCurrentPlayingIndex(currentIndex)

Kodla ilgili önemli noktalar

  • player, uygulamanın içeriği oynatmak için kullandığı Media3 ExoPlayer. Bu oynatıcıyı, önceden yükleme yöneticisini oluşturmak için kullandığınız aynı derleyicide DefaultPreloadManager.Builder.buildExoPlayer() yöntemini çağırarak oluşturmanız gerekir.
  • Kullanıcı yeni bir medya öğesine geçtiğinde uygulama, önceden yükleme yöneticisinden medya kaynağını almak için getMediaSource() yöntemini çağırır. Bu, önceden yükleme yöneticisine eklediğiniz bir mediaItem olmalıdır. Önceden yükleme yöneticisi içeriği yüklemeye henüz başlamadıysa sorun olmaz. Bu durumda, önceden yüklenmiş verileri olmayan bir MediaSource döndürür. Örneğin, kullanıcı aniden bantta çok ileri atlarsa bu durum ortaya çıkabilir.
  • Kullanıcı yeni medya öğesini oynattıktan sonra setCurrentPlayingIndex yöntemini çağırarak önceden yükleme yöneticisine yeni öğenin banttaki yerini bildirin. Önceden yükleme yöneticisi, bir sonraki öğenin yüklenmesine öncelik vermek için bu bilgiye ihtiyaç duyar.

Önceden yükleme yöneticisinden öğeleri kaldırma

Önceden yükleme yöneticisinin verimli çalışmaya devam etmesi için artık izlemesi gerekmeyen öğeleri kaldırmanız gerekir. Hâlâ bantta olan ancak kullanıcının mevcut konumundan uzakta olan öğeleri de kaldırabilirsiniz. Örneğin, kullanıcının izlediği öğeden 15 öğe uzakta olan bir öğenin önceden yüklenmesine gerek olmadığına karar verebilirsiniz. Bu durumda, o kadar uzaklaşan öğeleri kaldırırsınız. Kullanıcı, kaldırılan öğelere geri dönerse bunları dilediğiniz zaman tekrar ekleyebilirsiniz.

Kaldırılacak medya öğelerinin listesi varsa removeMediaItems yöntemini kullanabilirsiniz. Alternatif olarak, medya öğelerini tek tek kaldırmak için remove (veya removeMediaSource) yöntemini çağırabilirsiniz.

preloadManager.removeMediaItems(mediaItemsToRemove)

Kodla ilgili önemli noktalar

  • Önceden yükleme yöneticisinden tüm öğeleri kaldırmak istiyorsanız remove() yerine reset() yöntemini çağırabilirsiniz. Bu yaklaşım, banttaki tüm öğeleri değiştirmeniz gerekiyorsa kullanışlıdır. Bu durumda, öğeleri kaldırdıktan sonra önceden yükleme yöneticisine yeni öğeler eklemeniz gerekir.

Önceden yükleme yöneticisiyle işiniz bittiğinde onu serbest bırakın

Önceden yükleme yöneticisine artık ihtiyacınız olmadığında kaynaklarını serbest bırakmak için yöneticinin kullanımını sonlandırmanız gerekir. Özellikle, etkinliğiniz yok edildiğinde oturumu serbest bıraktığınızdan emin olun.

preloadManager.release()

Kodla ilgili önemli noktalar

  • Serbest bıraktıktan sonra nesnenin yöntemlerinden hiçbirini çağırmamalısınız.
  • Başka bir ön yükleme yöneticisi oluşturmanız gerekiyorsa yeni bir DefaultPreloadManager.Builder oluşturun ve bunu kullanarak DefaultPreloadManager oluşturun. Eski oluşturucuyu tekrar kullanmaya çalışmayın.