İç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ı önceden 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

Ön yükleme yöneticisine, izleyeceği her medya öğesi hakkında bilgi vermeniz gerekir. Örneğin, uygulamanızda bir video karuseli varsa bu videoları önceden yükleme yöneticisine eklersiniz. Kullanım alanınıza bağlı olarak tüm videoları veya yalnızca şu anda oynatılan videonun yakınındaki tüm videoları ekleyebilirsiniz. Ön yükleme yöneticisine daha sonra yeni öğeler de ekleyebilirsiniz.

Bunu yapmak için addMediaItems gibi bir toplu ekleme yöntemi kullanın. Alternatif olarak, medya öğelerini tek tek eklemek için add (veya addMediaSource) numarasını arayabilirsiniz. Ancak medya öğelerini tek tek eklemek önceden yüklemeyi otomatik olarak tetiklemez. Ayrı yöntemler kullanırken öğe ekleme işlemini tamamladığınızda önceden yükleme yöneticisine öncelikleri güncellemesini ve önceden yüklemeye başlamasını bildirmek için invalidate işlevini açıkça bir kez ç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 başlangıçta toplu modda nasıl dolduracağınızı gösterir. Önceden yükleme yöneticisine öğe eklemek için addMediaItems işlevini çağırabilirsiniz.
  • Bu snippet'te pullMediaItemsFromService(), oynatılacak içerik listesini getirmek için kullanılan uygulama mantığını ifade eder. Kod, en fazla 20 öğeden oluşan bir liste getirmek için bu yöntemi çağırır.
  • preloadManager, oluşturmaDefaultPreloadManager bölümünde oluşturulan DefaultPreloadManager'dır.
  • 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 gösteren bir tam sayıdır. Ön yükleme yöneticisi, her öğenin şu anda oynatılan öğeden ne kadar uzakta olduğuna göre önceliği belirler.

Medya içeriğini getirme ve oynatma

Kullanıcı yeni bir medya öğesine geçtiğinde, medya öğesini önceden yükleme yöneticisinden almanız gerekir. Ön yükleme yöneticisi içeriğin bir kısmını yüklediyse içerik, ön yükleme yöneticisini kullanmadığınız duruma kıyasla daha hızlı oynatılır. Ön yükleme yöneticisi, öğedeki içeriği henüz yüklemediyse içerik normal şekilde oynatılır.

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

// 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'tür. Bu oynatıcıyı, önceden yükleme yöneticisini oluşturmak için kullandığınız aynı oluşturucuda DefaultPreloadManager.Builder.buildExoPlayer() işlevini ç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() işlevini çağırır. Bu, mediaItem önceden yükleme yöneticisine eklediğiniz bir öğe olmalıdır. Önceden yükleme yöneticisi içeriği yüklemeye başlamamışsa sorun yoktur. Bu durumda, önceden yüklenmiş verileri olmayan bir MediaSource döndürülür. Örneğin, kullanıcının bir anda karusel içinde çok ileri gitmesi bu duruma neden olabilir.
  • Kullanıcı yeni medya öğesini oynattıktan sonra, yeni öğenin karuseldeki yerini önceden yükleme yöneticisine bildirmek için setCurrentPlayingIndex işlevini çağırın. Önceden yükleme yöneticisinin, sonraki öğenin yüklenmesine öncelik vermek için bu bilgiye ihtiyacı vardır.

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

Ön yükleme yöneticisinin verimli çalışmaya devam etmesi için artık izlemesi gerekmeyen öğeleri kaldırmanız gerekir. Ayrıca, kullanıcıların mevcut konumundan çok uzakta olan ancak karusel içinde kalmaya devam eden öğeleri de kaldırabilirsiniz. Örneğin, bir öğe kullanıcının izlediği içerikten 15 öğeden daha uzaktaysa önceden yüklenmesine gerek olmadığına karar verebilirsiniz. Bu durumda, öğeler o kadar uzaklaştığında kaldırılırdı. Kullanıcı, kaldırılan öğelere doğru hareket ederse bu öğeleri her zaman tekrar ekleyebilirsiniz.

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

preloadManager.removeMediaItems(mediaItemsToRemove)

Kodla ilgili önemli noktalar

  • Ön yükleme yöneticisindeki tüm öğeleri kaldırmak istiyorsanız remove() yerine reset() işlevini çağırabilirsiniz. Bu yaklaşım, banttaki tüm öğeleri değiştirmeniz gerektiğinde faydalıdır. Bu durumda, öğeleri kaldırdıktan sonra ön yükleme yöneticisine yeni öğeler eklemeniz gerekir.

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

Ön yükleme yöneticisine artık ihtiyacınız olmadığında kaynaklarını boşaltmak için yöneticinin serbest bırakılması gerekir. Özellikle, etkinliğiniz yok edildiğinde serbest bıraktığınızdan emin olun.

preloadManager.release()

Kodla ilgili önemli noktalar

  • Nesneyi 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 DefaultPreloadManager oluşturmak için kullanın. Eski oluşturucuyu yeniden kullanmaya çalışmayın.