Studia przypadków

Instagram i Facebook zapewniają natychmiastowe odtwarzanie i zwiększają zaangażowanie użytkowników dzięki Media3 PreloadManager

Czas czytania: 4 minuty
Mayuri Khinvasara Khabya
Inżynier ds. relacji z deweloperami

W dynamicznym świecie mediów społecznościowych uwaga użytkowników jest szybko zdobywana i tracona. Aplikacje Meta (Facebook i Instagram) należą do największych platform społecznościowych na świecie i obsługują miliardy użytkowników na całym świecie. Dla firmy Meta płynne odtwarzanie filmów to nie tylko funkcja, ale podstawa wrażeń użytkowników. Krótkie filmy, zwłaszcza te publikowane na Facebooku i Instagramie, stały się głównym źródłem zaangażowania. Umożliwiają one kreatywną ekspresję i szybkie konsumowanie treści, łącząc i dostarczając rozrywki ludziom na całym świecie. 

W tym poście na blogu opisujemy, jak Meta przekształciła odtwarzanie filmów dla miliardów użytkowników, zapewniając prawdziwe natychmiastowe odtwarzanie.

Opóźnienie w krótkich filmach

Krótkie filmy prowadzą do bardzo szybkich interakcji, ponieważ użytkownicy szybko przewijają swoje kanały. Płynne przechodzenie między filmami w stale zmieniającym się kanale stwarza wyjątkowe trudności w przypadku natychmiastowego odtwarzania. Dlatego potrzebujemy rozwiązań, które wykraczają poza tradycyjne buforowanie na dysku i standardowe reaktywne strategie odtwarzania.

Dalsze kroki w przypadku Menedżera wstępnego wczytywania Media3

Aby dostosować się do zmian w nawykach konsumpcji treści, które wynikają ze wzrostu popularności filmów Short i ograniczeń tradycyjnej architektury odtwarzania długich treści, w Jetpack Media3 wprowadziliśmy PreloadManager. Ten komponent umożliwia programistom wyjście poza buforowanie na dysku, oferując szczegółową kontrolę i dostosowywanie, aby multimedia były gotowe w pamięci, zanim użytkownik kliknie przycisk odtwarzania. Więcej informacji technicznych o odtwarzaniu multimediów za pomocą PreloadManager znajdziesz w tej serii postów na blogu.

Jak Meta osiągnęła prawdziwe błyskawiczne odtwarzanie

Istniejące komplikacje

Wcześniej Meta używała do wyświetlania filmów połączenia rozgrzewki (przygotowania odtwarzaczy) i pobierania z wyprzedzeniem (buforowania treści na dysku). Chociaż te metody pomogły zwiększyć wydajność sieci, wiązały się z poważnymi wyzwaniami. Rozgrzewka wymagała kolejnego tworzenia wielu instancji odtwarzacza, co zużywało dużo pamięci i ograniczało wstępne wczytywanie tylko do kilku filmów. Tak duże zapotrzebowanie na zasoby oznaczało, że można zastosować bardziej skalowalne i niezawodne rozwiązanie, które zapewni natychmiastowe odtwarzanie oczekiwane w nowoczesnych, szybko przewijanych kanałach społecznościowych.

Integracja menedżera wstępnego wczytywania Media3

Aby uzyskać prawdziwie natychmiastowe odtwarzanie, zespół Meta Media Foundation Client zintegrował Jetpack Media3 PreloadManager z Facebookiem i Instagramem. Wybrali DefaultPreloadManager, aby ujednolicić systemy wstępnego wczytywania i odtwarzania. Ta integracja wymagała refaktoryzacji dotychczasowej architektury Meta, aby umożliwić efektywne udostępnianie zasobów między instancjami PreloadManager i ExoPlayer. Ta zmiana strategiczna zapewniła kluczową przewagę architektoniczną: możliwość równoległego wykonywania zadań wstępnego wczytywania i zarządzania wieloma filmami za pomocą jednej instancji odtwarzacza. Dzięki temu znacznie zwiększyliśmy możliwości wstępnego wczytywania, eliminując jednocześnie złożoność pamięci, która była problemem w przypadku poprzedniego podejścia.

colinKho.png

Optymalizacja i dostrajanie wydajności

Zespół przeprowadził następnie obszerne testy i iteracje, aby zoptymalizować wydajność w różnorodnym globalnym ekosystemie urządzeń Meta. Początkowe agresywne wstępne wczytywanie czasami powodowało problemy, w tym zwiększone wykorzystanie pamięci i spowolnienie przewijania. Aby rozwiązać ten problem, zespół dopracował implementację, przeprowadzając dokładne pomiary pamięci, uwzględniając fragmentację urządzeń i dostosowując system do konkretnych wzorców interfejsu.

Dostosowywanie implementacji do konkretnych wzorców interfejsu

Meta zastosowała różne strategie wstępnego wczytywania i dostosowała zachowanie do konkretnych wzorców interfejsu użytkownika każdej aplikacji:

  • Aktualności na Facebooku: interfejs użytkownika priorytetowo traktuje film, który jest aktualnie widoczny. Menedżer wstępnie wczytuje tylko bieżący film, aby rozpoczął się w momencie, gdy użytkownik wstrzyma przewijanie. Takie podejście „tylko bieżące” minimalizuje ilość danych i zajętość pamięci w środowisku, w którym użytkownicy mogą widzieć wiele statycznych postów między filmami. Obecnie system jest zaprojektowany tak, aby wstępnie wczytywać tylko widoczny film, ale można go dostosować, aby wstępnie wczytywał też przyszłe filmy. 
  • Rolki na Instagramie: to środowisko, w którym użytkownicy przewijają filmy w pionie. W tym interfejsie zespół wdrożył strategię „sąsiadującego wstępnego wczytywania”. Menedżer wstępnego wczytywania przechowuje w pamięci filmy bezpośrednio po bieżącej rolce. Dzięki temu dwukierunkowemu podejściu przejście jest natychmiastowe i płynne niezależnie od tego, czy użytkownik przesunie palcem w górę czy w dół. Dzięki temu znacznie poprawiła się jakość usług, w tym czas rozpoczęcia odtwarzania i czas do wyświetlenia pierwszej klatki.

Skalowanie w różnorodnym ekosystemie urządzeń

Skalowanie wydajnego stosu wideo na miliardach urządzeń wymaga czegoś więcej niż tylko agresywnego wstępnego wczytywania. Wymaga inteligencji. Meta początkowo miała problemy z obciążeniem pamięci i opóźnieniami przewijania, zwłaszcza na urządzeniach ze średniej i niższej półki. Aby rozwiązać ten problem, stworzyli system wykrywania obciążenia urządzenia oparty na implementacji Media3. Aplikacje monitorują teraz sygnały wejścia/wyjścia i procesora w czasie rzeczywistym. Jeśli urządzenie jest mocno obciążone, wstępne wczytywanie jest wstrzymywane, aby nadać priorytet szybkości reakcji interfejsu.

Ta optymalizacja uwzględniająca urządzenie zapewnia, że korzyści z natychmiastowego odtwarzania nie są osiągane kosztem stabilności systemu, dzięki czemu nawet użytkownicy starszych urządzeń mogą korzystać z płynniejszego i nieprzerwanego przesyłania strumieniowego.

mirabelHu.png

Sukcesy architektoniczne i kondycja kodu

Oprócz danych widocznych dla użytkowników przejście na Media3 PreloadManager przyniosło długoterminowe korzyści architektoniczne. Proces integracji i dostrajania wymagał wielu iteracji, aby zrównoważyć wydajność, ale powstała baza kodu jest łatwiejsza w utrzymaniu. Zespół stwierdził, że interfejs API PreloadManager jest dobrze zintegrowany z istniejącym ekosystemem Media3, co pozwala na lepsze udostępnianie zasobów. Wdrożenie PreloadManagera w Media3 było dla firmy Meta strategiczną inwestycją w przyszłość konsumpcji treści wideo. 

Dzięki zastosowaniu wstępnego wczytywania i dodaniu inteligentnych bramek na urządzeniach udało im się zwiększyć łączny czas oglądania w aplikacjach i poprawić ogólne zaangażowanie globalnej społeczności. 

Wpływ na Instagrama i Facebooka

Proaktywna architektura przyniosła natychmiastowe i wymierne korzyści na obu platformach. 

  • Facebook odnotował szybsze uruchamianie odtwarzania, mniejszą liczbę przerw w odtwarzaniu i spadek liczby nieudanych sesji (np. ponowne buforowanie, opóźnione uruchamianie, niższa jakość itp.), co ogólnie przełożyło się na dłuższy czas oglądania. 
  • Na Instagramie odnotowaliśmy szybsze rozpoczęcie odtwarzania i wzrost całkowitego czasu oglądania. Wyeliminowanie opóźnienia dołączenia (odstępu między działaniem użytkownika a wyświetleniem pierwszej klatki) bezpośrednio zwiększyło wskaźniki zaangażowania. Mniejsza liczba przerw spowodowanych mniejszym buforowaniem oznaczała, że użytkownicy oglądali więcej treści, co było widoczne w statystykach zaangażowania.
beforeAfterPreload.gif

Najważniejsze wnioski dotyczące inżynierii na dużą skalę

Wraz z ewolucją sposobów korzystania z mediów będzie rosło zapotrzebowanie na natychmiastowe doświadczenia. Wdrożenie proaktywnego zarządzania pamięcią i optymalizacja pod kątem skalowania oraz różnorodności urządzeń zapewniają, że aplikacja będzie w stanie skutecznie spełnić te oczekiwania.

  • Określanie priorytetu inteligentnego wstępnego wczytywania

Zadbaj o niezawodność, minimalizując zacięcia i czas wczytywania dzięki wstępnemu wczytywaniu. Zamiast prostego buforowania na dysku, wstępne wczytywanie na poziomie pamięci zapewnia, że treści są gotowe w momencie, gdy użytkownik wchodzi z nimi w interakcję.

  • Dopasowywanie implementacji do wzorców interfejsu

Dostosuj działanie wstępnego wczytywania do interfejsu aplikacji. Na przykład w przypadku mieszanych plików danych, takich jak Facebook, używaj ustawienia „tylko bieżące”, aby oszczędzać pamięć, a w przypadku środowisk pionowych, takich jak Reels na Instagramie, stosuj strategię „wstępne wczytywanie sąsiednich”.

preloadingStrategy.png
  • Korzystanie z Media3 w celu zapewnienia długoterminowej kondycji kodu

Integracja z interfejsami Media3 API zamiast z niestandardowym rozwiązaniem do buforowania umożliwia lepsze udostępnianie zasobów między odtwarzaczem a klasą PreloadManager, co pozwala zarządzać wieloma filmami za pomocą jednej instancji odtwarzacza. Dzięki temu baza kodu jest odporna na zmiany w przyszłości i łatwiejsza w utrzymaniu i optymalizacji przez zespoły inżynieryjne, a także umożliwia korzystanie z najnowszych aktualizacji funkcji.

  • Wdrażanie optymalizacji uwzględniających urządzenia

Zwiększ zasięg rynkowy, testując aplikację na różnych urządzeniach, w tym na modelach ze średniej i niższej półki. Korzystaj z sygnałów w czasie rzeczywistym, takich jak procesor, pamięć i wejście/wyjście, aby dynamicznie dostosowywać funkcje i wykorzystanie zasobów.

Więcej informacji

Aby rozpocząć i dowiedzieć się więcej, wejdź na stronę 

Teraz znasz już tajniki błyskawicznego odtwarzania. Wypróbuj je!

Autor:

Czytaj dalej