Na tej stronie opisujemy, jak zarządzać treściami wideo za pomocą menedżera wstępnego wczytywania. Dzięki menedżerowi wstępnego wczytywania możesz zapewnić użytkownikom lepsze wrażenia. Gdy użytkownik przełącza się z jednego elementu multimedialnego na inny, odtwarzanie rozpoczyna się szybciej, ponieważ menedżer wstępnie 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, gdy nie jest już potrzebny
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. Twoja aplikacja ma karuzelę filmów, dodaj je do menedżera wstępnego wczytywania. W zależności od przypadku użycia możesz dodać wszystkie filmy lub tylko te, które znajdują się w pobliżu aktualnie odtwarzanego filmu. Możesz też później dodać nowe elementy do menedżera wstępnego wczytywania.
Aby to zrobić, użyj metody dodawania zbiorczego, np. addMediaItems. Możesz też wywołać metodę add (lub
addMediaSource), aby dodawać elementy multimedialne pojedynczo. Jednak dodawanie elementów multimedialnych pojedynczo nie powoduje automatycznego wstępnego wczytywania. Gdy używasz metod pojedynczych
, po dodaniu elementów musisz wyraźnie wywołać metodę 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 wstępnie wypełnić menedżera wstępnego wczytywania w trybie zbiorczym po jego utworzeniu. Aby dodać elementy do istniejącego, wypełnionego menedżera wstępnego wczytywania, możesz wywołać metodę
addMediaItems. - 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. preloadManagerto elementDefaultPreloadManagerutworzony w sekcji Tworzenie elementuDefaultPreloadManager.rankingDatato wartość, której menedżer wstępnego wczytywania używa do określania priorytetu każdego elementu multimedialnego. W przypadku elementuDefaultPreloadManagerwartość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 aktualnie odtwarzanego elementu.
Pobieranie i odtwarzanie multimediów
Gdy użytkownik przechodzi 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 rozpocznie się szybciej niż w przypadku, gdybyś nie używał menedżera wstępnego wczytywania. Jeśli menedżer wstępnego wczytywania nie wczytał jeszcze treści z tego elementu, odtwarzanie będzie przebiegać normalnie.
Musisz też zaktualizować bieżący indeks odtwarzania w menedżerze wstępnego wczytywania, wywołując metodę 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 element Media3ExoPlayer, którego aplikacja używa do odtwarzania treści. Musisz utworzyć tego odtwarzacza, wywołując metodęDefaultPreloadManager.Builder.buildExoPlayer()w tym samym konstruktorze , którego używasz do tworzenia menedżera wstępnego wczytywania.- Gdy użytkownik przełącza się na nowy element multimedialny, aplikacja wywołuje metodę
getMediaSource(), aby pobrać źródło multimediów z menedżera wstępnego wczytywania. Musi to być elementmediaItemktóry został już dodany do menedżera wstępnego wczytywania. Nie ma znaczenia, czy menedżer wstępnego wczytywania nie rozpoczął jeszcze wczytywania treści. W takim przypadku zwraca on elementMediaSource, który nie zawiera wstępnie wczytanych danych. Może się tak zdarzyć np. wtedy, gdy użytkownik nagle przeskoczy daleko do przodu w karuzeli. - Gdy użytkownik odtworzy nowy element multimedialny, wywołaj metodę
setCurrentPlayingIndex, aby poinformować menedżera wstępnego wczytywania, gdzie w karuzeli znajduje się nowy element. Menedżer wstępnego wczytywania potrzebuje tych informacji, aby ustalić 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ż usunąć elementy, które nadal znajdują się w karuzeli, ale są daleko od bieżącej pozycji użytkownika. Możesz np. uznać, że jeśli element znajduje się w odległości większej niż 15 elementów od tego, co ogląda użytkownik, nie trzeba go wstępnie wczytywać. W takim przypadku usuń elementy, gdy znajdą się w takiej odległości. Jeśli użytkownik wróci do usuniętych elementów, zawsze możesz je ponownie dodać.
Jeśli masz listę elementów multimedialnych do usunięcia, możesz użyć
removeMediaItems. Możesz też wywołać metodę remove (lub removeMediaSource), aby usuwać elementy multimedialne
pojedynczo.
preloadManager.removeMediaItems(mediaItemsToRemove)
Najważniejsze informacje o kodzie
- Jeśli chcesz usunąć wszystkie elementy z menedżera wstępnego wczytywania, zamiast metody
remove()możesz wywołać metodęreset(). To podejście jest przydatne, jeśli musisz zmienić wszystkie elementy w karuzeli. W takim przypadku po usunięciu elementów musisz dodać nowe elementy do menedżera wstępnego wczytywania.
Zwalnianie menedżera wstępnego wczytywania, gdy nie jest już potrzebny
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
- Nie wolno wywoływać żadnych metod obiektu po jego zwolnieniu.
- Jeśli musisz utworzyć kolejnego menedżera wstępnego wczytywania, utwórz nowy
DefaultPreloadManager.Builderi użyj go do utworzenia elementuDefaultPreloadManager. Nie próbuj ponownie używać starego konstruktora.