Na tej stronie dowiesz się, jak zarządzać treściami wideo za pomocą menedżera wstępnego wczytywania. Korzystając z menedżera wstępnego wczytywania, możesz zapewnić użytkownikowi większą wygodę. Gdy przełączy się on z jednego elementu multimedialnego na inny, odtwarzanie rozpocznie się szybciej, ponieważ menedżer wczytał już część treści.
Na tej stronie znajdziesz informacje na te tematy:
- Dodawanie elementów multimedialnych do menedżera wstępnego wczytywania
- Pobieranie i odtwarzanie multimediów
- Usuwanie elementów z menedżera wstępnego wczytywania
- Zwalnianie menedżera wstępnego wczytywania po zakończeniu pracy
Dodawanie elementów multimedialnych do menedżera wstępnego wczytywania
Musisz poinformować menedżera wstępnego wczytywania o każdym elemencie multimedialnym, który ma śledzić. Jeśli np. w aplikacji znajduje się karuzela filmów, dodaj je do menedżera wstępnego wczytywania. W zależności od przypadku możesz dodać wszystkie filmy lub tylko te, które znajdują się w pobliżu aktualnie odtwarzanego filmu. Później możesz też dodać do menedżera wstępnego wczytywania nowe elementy.
Aby to zrobić, użyj metody dodawania zbiorczego, np. addMediaItems. Możesz też wywołać funkcję add (lub addMediaSource), aby dodawać elementy multimedialne pojedynczo. Dodawanie plików multimedialnych pojedynczo nie powoduje jednak automatycznego wstępnego wczytywania. Jeśli używasz poszczególnych metod, po dodaniu elementów musisz jawnie wywołać funkcję invalidate, aby poinformować menedżera wstępnego wczytywania o konieczności zaktualizowania priorytetów i rozpoczęcia wstępnego wczytywania.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
Najważniejsze informacje o kodzie
- Ten fragment kodu pokazuje, jak po utworzeniu menedżera wstępnego wczytywania wstępnie wypełnić go w trybie wsadowym. Możesz wywołać funkcję
addMediaItems, aby dodać elementy do istniejącego, wypełnionego menedżera wstępnego wczytywania. - W tym fragmencie kodu
pullMediaItemsFromService()to logika aplikacji służąca do pobierania listy treści do odtworzenia. Kod wywołuje tę metodę, aby pobrać listę maksymalnie 20 elementów. preloadManagertoDefaultPreloadManagerutworzony w sekcji TworzenieDefaultPreloadManager.rankingDatato wartość, której menedżer wstępnego wczytywania używa do określania priorytetu każdego elementu multimedialnego. W przypadkuDefaultPreloadManagerwartośćrankingDatato liczba całkowita reprezentująca pozycję elementu w karuzeli. Menedżer wstępnego wczytywania określa priorytet na podstawie odległości każdego elementu od elementu, który jest aktualnie odtwarzany.
Pobieranie i odtwarzanie multimediów
Gdy użytkownik przejdzie do nowego elementu multimedialnego, musisz pobrać go z menedżera wstępnego wczytywania. Jeśli menedżer wstępnego wczytywania wczytał już część treści, odtwarzanie będzie szybsze niż w przypadku, gdyby nie został użyty. Jeśli menedżer wstępnego wczytywania nie wczytał jeszcze treści z tego elementu, odtwarzanie przebiega normalnie.
Musisz też zaktualizować bieżący indeks odtwarzania w menedżerze wstępnego wczytywania, wywołując funkcję setCurrentPlayingIndex. Dzięki temu menedżer wstępnego wczytywania będzie mógł określać priorytety przyszłych operacji wstępnego wczytywania.
// 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)
Najważniejsze informacje o kodzie
playerto Media3ExoPlayer, którego aplikacja używa do odtwarzania treści. Odtwarzacz musisz utworzyć, wywołując metodęDefaultPreloadManager.Builder.buildExoPlayer()w tym samym konstruktorze, którego użyto do utworzenia menedżera wstępnego wczytywania.- Gdy użytkownik przełączy się na nowy element multimedialny, aplikacja wywoła funkcję
getMediaSource(), aby pobrać źródło multimediów z menedżera wstępnego wczytywania. Musi to byćmediaItem, który został już dodany do menedżera wstępnego wczytywania. Nie ma znaczenia, czy menedżer wstępnego wczytywania już rozpoczął wczytywanie treści. W takim przypadku zwraca on obiektMediaSource, który nie zawiera wstępnie wczytanych danych. Może się tak zdarzyć, gdy użytkownik nagle przesunie karuzelę o wiele pozycji do przodu. - Gdy użytkownik odtworzy nowy element multimedialny, wywołaj funkcję
setCurrentPlayingIndex, aby poinformować menedżera wstępnego wczytywania, w którym miejscu karuzeli znajduje się nowy element. Menedżer wstępnego wczytywania potrzebuje tych informacji, aby określić priorytet wczytywania następnego elementu.
Usuwanie elementów z menedżera wstępnego wczytywania
Aby menedżer wstępnego wczytywania działał wydajnie, usuń z niego elementy, których nie musi już śledzić. Możesz też usuwać elementy, które nadal znajdują się w karuzeli, ale są daleko od bieżącej pozycji użytkownika. Możesz na przykład zdecydować, że jeśli element znajduje się w odległości większej niż 15 elementów od tego, co ogląda użytkownik, nie musi być wstępnie wczytywany. W takim przypadku usuniesz elementy, gdy znajdą się w odpowiedniej odległości. Jeśli użytkownik ponownie zacznie się interesować usuniętymi produktami, zawsze możesz dodać je z powrotem.
Jeśli masz listę elementów multimedialnych do usunięcia, możesz użyć
removeMediaItems. Możesz też zadzwonić pod numer remove (lub removeMediaSource), aby usunąć poszczególne elementy multimedialne.
preloadManager.removeMediaItems(mediaItemsToRemove)
Najważniejsze informacje o kodzie
- Jeśli chcesz usunąć wszystkie elementy z menedżera wstępnego wczytywania, możesz wywołać funkcję
reset()zamiastremove(). To podejście jest przydatne, jeśli chcesz zmienić wszystkie elementy w karuzeli. W takim przypadku po usunięciu elementów musisz dodać nowe do menedżera wstępnego wczytywania.
Zwalnianie menedżera wstępnego wczytywania po zakończeniu pracy
Gdy menedżer wstępnego wczytywania nie jest już potrzebny, musisz go zwolnić, aby zwolnić jego zasoby. Pamiętaj, aby zwolnić go, gdy aktywność zostanie zniszczona.
preloadManager.release()
Najważniejsze informacje o kodzie
- Po zwolnieniu obiektu nie wolno wywoływać żadnych jego metod.
- Jeśli chcesz utworzyć kolejny menedżer wstępnego wczytywania, utwórz nowy obiekt
DefaultPreloadManager.Builderi użyj go do utworzenia obiektuDefaultPreloadManager. Nie próbuj ponownie używać starego kreatora.