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
- Medyayı getirme ve oynatma
- Öğeleri önceden yükleme yöneticisinden kaldırma
- Ön yükleme yöneticisiyle işiniz bittiğinde serbest bırakın
Ö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
addMediaItemsyö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,DefaultPreloadManageroluşturma bölümünde oluşturulanDefaultPreloadManagerdeğeridir.rankingData, önceden yükleme yöneticisinin her medya öğesinin önceliğini belirlemek için kullandığı bir değerdir.DefaultPreloadManageriçinrankingData, öğ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ığı Media3ExoPlayer. Bu oynatıcıyı, önceden yükleme yöneticisini oluşturmak için kullandığınız aynı derleyicideDefaultPreloadManager.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 birmediaItemolmalı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 birMediaSourcedöndürür. Örneğin, kullanıcı aniden bantta çok ileri atlarsa bu durum ortaya çıkabilir. - Kullanıcı yeni medya öğesini oynattıktan sonra
setCurrentPlayingIndexyö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()yerinereset()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.Builderoluşturun ve bunu kullanarakDefaultPreloadManageroluşturun. Eski oluşturucuyu tekrar kullanmaya çalışmayın.