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ılara 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
- Önceden yükleme yöneticisindeki öncelikleri geçersiz kılma
- Medya getirme ve oynatma
- Ön yükleme yöneticisinden öğeleri kaldırma
- Ön yükleme yöneticisini işiniz bittiğinde serbest bırakma
Ö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 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 videoları ekleyebilirsiniz. Ön yükleme yöneticisine daha sonra yeni öğeler de ekleyebilirsiniz.
Medya öğelerinin eklenmesi, önceden yükleme yöneticisinin içeriği yüklemeye başlamasına tek başına neden olmaz. Ön yüklemeyi tetiklemek için ön yükleme yöneticisindeki öncelikleri geçersiz kılmanız gerekir.
val initialMediaItems = pullMediaItemsFromService(/* count= */ 20);
for (index in 0 until initialMediaItems.size) {
preloadManager.add(initialMediaItems.get(index), /* rankingData= */ index)
}
// items aren't actually loaded yet! need to call invalidate() after this
Kodla ilgili önemli noktalar
- Bu snippet, önceden yükleme yöneticisini oluşturduktan sonra ilk olarak nasıl dolduracağınızı gösterir. Ayrıca, öğeleri mevcut ve doldurulmuş bir ön yükleme yöneticisine eklemek için
add()
işlevini de çağırabilirsiniz. - Bu snippet'te
pullMediaItemsFromService()
, oynatılacak içerik listesini getirmek için kullanılan uygulama mantığıdır. Kod, en fazla 20 öğeden oluşan bir liste getirmek için bu yöntemi çağırır. preloadManager
, Tahmin segmenti oluşturmaDefaultPreloadManager
bölümünde oluşturulanDefaultPreloadManager
'dir. Kod, her öğeyi döngüye eklemek için yöneticininadd()
yöntemini çağırır.rankingData
, önceden yükleme yöneticisinin her medya öğesinin önceliğini belirlemek için kullandığı bir değerdir.DefaultPreloadManager
içinrankingData
, öğ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.
Önceden yükleme yöneticisindeki öncelikleri geçersiz kılma
Önceden yükleme yöneticisinin içeriği önceden yüklemeye başlamasını tetiklemek için invalidate()
işlevini çağırarak öğelerin önceliklerinin güncel olmadığını önceden yükleme yöneticisine bildirmeniz gerekir. Bu işlemi aşağıdaki durumlarda yapmanız gerekir:
- Ön yükleme yöneticisine yeni medya öğeleri eklediğinizde veya medya öğelerini kaldırdığınızda
Birden fazla öğe ekliyor veya kaldırıyorsanız hepsini eklemeli, ardından
invalidate()
işlevini çağırmalısınız. - Kullanıcı bir medya öğesinden diğerine geçtiğinde Bu durumda, İçeriği getirme ve oynatma bölümünde açıklandığı gibi,
invalidate()
işlevini çağırmadan önce mevcut oynatma dizinini güncellediğinizden emin olmanız gerekir.
Önceden yükleme yöneticisini geçersiz kıldığınızda, her öğeden ne kadar içerik yüklemesi gerektiğini öğrenmek için TargetPreloadStatusControl
oluşturduğunuz çağrılır. Ardından, her öğenin içeriğini öncelik sırasına göre (yüksekten düşüğe) yükler.
preloadManager.invalidate()
Kodla ilgili önemli noktalar
- Arama
invalidate()
, önceden yükleme yöneticisinin bildiği her medya öğesinin önceliğini yeniden değerlendirmesini tetikler. Bu nedenle, önceden yükleme yöneticisinde çok sayıda değişiklik yapıyorsanızinvalidate()
işlevini çağırmadan önce değişiklikleri tamamlamanız gerekir.
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. Önceden yükleme yöneticisi, öğedeki içeriği henüz yüklemediyse içerik normal şekilde oynatılır.
// When a media item is about to display on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
player.setMediaSource(mediaSource)
}
player.prepare()
// When the media item is displaying at the center of the screen
player.play()
preloadManager.setCurrentPlayingIndex(currentIndex)
// Need to call invalidate() to update the priorities
preloadManager.invalidate()
Kodla ilgili önemli noktalar
player
, uygulamanın içeriği oynatmak için kullandığı Media3ExoPlayer
'tür. Bu oynatıcıyı, ön yükleme yöneticisini oluşturmak için kullandığınız aynı oluşturucudaDefaultPreloadManager.Builder.buildExoPlayer()
çağrısı yaparak 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 olmaz. Bu durumda, önceden yüklenmiş verileri olmayan birMediaSource
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 vermesi için bu bilgiye ihtiyacı vardır. Mevcut dizini güncelledikten sonra, preload yöneticisinin her öğenin önceliğini yeniden belirlemesi içininvalidate()
işlevini çağırın.
Ö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 bulunan öğeleri de kaldırabilirsiniz. Örneğin, kullanıcının izlediği içerikten 15 öğeden daha uzakta olan bir öğenin ö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 öğeleri istediğiniz zaman tekrar ekleyebilirsiniz.
preloadManager.remove(mediaItem)
Kodla ilgili önemli noktalar
- Ön yükleme yöneticisindeki tüm öğeleri kaldırmak istiyorsanız
remove()
yerinereset()
öğesini çağırabilirsiniz. Bu yaklaşım, bantınızdaki 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 ve ön yükleme yöneticisindeki öncelikleri geçersiz kılmanız 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ırakıldığından 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 bunuDefaultPreloadManager
oluşturmak için kullanın. Eski oluşturucuyu yeniden kullanmaya çalışmayın.