Case Studies

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

Czas czytania: 4 minuty
r.
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 Meta płynne odtwarzanie filmów to nie tylko funkcja, ale też podstawa wrażeń użytkowników. Krótkie filmy, zwłaszcza w Aktualnościach na Facebooku i Rolkach na Instagramie, stały się głównym czynnikiem zwiększającym zaangażowanie. Umożliwiają one kreatywne wyrażanie się i szybkie konsumowanie treści, łącząc i bawiąc ludzi na całym świecie. 

Z tego posta na blogu dowiesz się, jak Meta zmieniła odtwarzanie filmów dla miliardów użytkowników, wprowadzając prawdziwie natychmiastowe odtwarzanie.

Opóźnienie w przypadku krótkich filmów

Krótkie filmy prowadzą do bardzo szybkich interakcji, ponieważ użytkownicy szybko przewijają swoje kanały. Zapewnienie płynnego przejścia 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 z Media3 PreloadManager

Aby rozwiązać problemy związane ze zmianami w nawykach konsumpcyjnych wynikającymi z rosnącej popularności krótkich treści oraz ograniczeniami tradycyjnej architektury odtwarzania długich treści, Jetpack Media3 wprowadził PreloadManager. Ten komponent umożliwia deweloperom 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. Przeczytaj tę serię postów na blogu, aby dowiedzieć się więcej o technicznych aspektach odtwarzania multimediów za pomocą PreloadManager.

Jak Meta osiągnęła prawdziwie natychmiastowe odtwarzanie

Istniejące złożoności

Wcześniej Meta używała do dostarczania filmów kombinacji rozgrzewania (aby przygotować odtwarzacze) i pobierania z wyprzedzeniem (aby buforować treści na dysku). Chociaż te metody pomogły zwiększyć wydajność sieci, wprowadziły też poważne wyzwania. Rozgrzewanie wymagało sekwencyjnego tworzenia instancji wielu odtwarzaczy, co zużywało dużo pamięci i ograniczało pobieranie z wyprzedzeniem do zaledwie kilku filmów. To duże zapotrzebowanie na zasoby oznaczało, że można zastosować bardziej skalowalne i niezawodne rozwiązanie, aby zapewnić natychmiastowe odtwarzanie oczekiwane w nowoczesnych, szybko przewijanych kanałach społecznościowych.

Integracja Media3 PreloadManager

Aby osiągnąć prawdziwie natychmiastowe odtwarzanie, zespół Media Foundation Client w Meta zintegrował Jetpack Media3 PreloadManager z Facebookiem i Instagramem. Aby ujednolicić systemy pobierania z wyprzedzeniem i odtwarzania, wybrał DefaultPreloadManager. Ta integracja wymagała refaktoryzacji istniejącej architektury Meta, aby umożliwić efektywne udostępnianie zasobów między instancjami PreloadManager i ExoPlayer. Ta strategiczna zmiana zapewniła kluczową przewagę architektoniczną: możliwość równoległego wykonywania zadań wstępnego ładowania i zarządzania wieloma filmami za pomocą jednej instancji odtwarzacza. Dzięki temu znacznie zwiększyła się pojemność pobierania z wyprzedzeniem, a jednocześnie wyeliminowano złożoność związaną z dużym zużyciem pamięci, która występowała w poprzednim podejściu.

colinKho.png

Optymalizacja i dostrajanie wydajności

Następnie zespół przeprowadził obszerne testy i iteracje, aby zoptymalizować wydajność w zróżnicowanym ekosystemie urządzeń Meta na całym świecie. Początkowe agresywne wstępne ładowanie czasami powodowało problemy, w tym zwiększone wykorzystanie pamięci i spowolnienie przewijania. Aby rozwiązać ten problem, zespół dostroił implementację, stosując dokładne pomiary pamięci, uwzględniając fragmentację urządzeń i dostosowując system do konkretnych wzorców interfejsu.

Dostrajanie implementacji do konkretnych wzorców interfejsu

Meta zastosowała różne strategie pobierania z wyprzedzeniem i dostosowała zachowanie do konkretnych wzorców interfejsu każdej aplikacji:

  • Aktualności na Facebooku: interfejs priorytetowo traktuje film, który jest aktualnie wyświetlany. Menedżer pobiera z wyprzedzeniem tylko bieżący film, aby zapewnić jego odtworzenie w momencie, gdy użytkownik zatrzyma przewijanie. To podejście "tylko bieżący" minimalizuje ilość danych i zużycie pamięci w środowisku, w którym użytkownicy mogą widzieć wiele statycznych postów między filmami. Chociaż system jest obecnie zaprojektowany tak, aby pobierać z wyprzedzeniem tylko wyświetlany film, można go dostosować, aby pobierał też nadchodzące (przyszłe) filmy. 
  • Rolki na Instagramie: to środowisko, w którym użytkownicy przewijają filmy w pionie. W przypadku tego interfejsu zespół wdrożył strategię „pobierania z wyprzedzeniem sąsiednich filmów”. PreloadManager przechowuje w pamięci filmy bezpośrednio po bieżącej Rolce. To dwukierunkowe podejście zapewnia, że przejście pozostaje natychmiastowe i płynne niezależnie od tego, czy użytkownik przewija w górę czy w dół. Dzięki temu znacznie poprawiła się jakość obsługi (QoE), w tym czas rozpoczęcia odtwarzania i czas do wyświetlenia pierwszej klatki.

Skalowanie w zróżnicowanym ekosystemie urządzeń na całym świecie

Skalowanie stosu wideo o wysokiej wydajności na miliardach urządzeń wymaga czegoś więcej niż tylko agresywnego pobierania z wyprzedzeniem – wymaga inteligencji. Meta początkowo miała problemy z obciążeniem pamięci i opóźnieniem przewijania, zwłaszcza na urządzeniach z niższej i średniej półki. Aby rozwiązać ten problem, zespół zbudował 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, pobieranie z wyprzedzeniem jest wstrzymywane, aby nadać priorytet responsywności interfejsu.

Ta optymalizacja uwzględniająca urządzenie zapewnia, że korzyści z natychmiastowego odtwarzania nie są osiągane kosztem stabilności systemu, co pozwala nawet użytkownikom starszych urządzeń korzystać z płynniejszego i nieprzerwanego kanału.

mirabelHu.png

Korzyści architektoniczne i jakość kodu

Oprócz wskaźników widocznych dla użytkowników migracja do Media3 PreloadManager przyniosła długoterminowe korzyści architektoniczne. Chociaż proces integracji i dostrajania wymagał wielu iteracji, aby zrównoważyć wydajność, powstała baza kodu jest łatwiejsza w utrzymaniu. Zespół stwierdził, że interfejs API PreloadManager dobrze integruje się z istniejącym ekosystemem Media3, co umożliwia lepsze udostępnianie zasobów. Dla Meta wdrożenie Media3 PreloadManager było strategiczną inwestycją w przyszłość konsumpcji wideo. 

Dzięki wdrożeniu pobierania z wyprzedzeniem i dodaniu bramek inteligentnych pod względem urządzenia zespół zdołał zwiększyć łączny czas oglądania w swoich aplikacjach i poprawić ogólne zaangażowanie społeczności na całym świecie. 

Wpływ na Instagrama i Facebooka

Proaktywna architektura przyniosła natychmiastowe i mierzalne ulepszenia na obu platformach. 

  • Na Facebooku skrócił się czas rozpoczęcia odtwarzania, zmniejszyła się liczba wstrzymań odtwarzania i liczba nieudanych sesji (np. ponowne buforowanie, opóźniony czas rozpoczęcia, niższa jakość itp.), co ogólnie przełożyło się na dłuższy czas oglądania.
  • Na Instagramie skrócił się czas rozpoczęcia odtwarzania i zwiększył się łączny czas oglądania. Wyeliminowanie opóźnienia dołączenia (interwału od działania użytkownika do wyświetlenia pierwszej klatki) bezpośrednio zwiększyło wskaźniki zaangażowania. Mniejsza liczba przerw spowodowana zmniejszeniem buforowania oznaczała, że użytkownicy oglądali więcej treści, co było widoczne w wskaźnikach zaangażowania.
beforeAfterPreload.gif

Najważniejsze wnioski inżynieryjne na dużą skalę

Wraz ze zmianą nawyków konsumpcyjnych będzie rosło zapotrzebowanie na natychmiastowe wrażenia. Wdrożenie proaktywnego zarządzania pamięcią i optymalizacja pod kątem skali i różnorodności urządzeń zapewniają, że aplikacja będzie w stanie efektywnie spełniać te oczekiwania.

  • Priorytetowe traktowanie inteligentnego pobierania z wyprzedzeniem

Skup się na zapewnieniu niezawodności, minimalizując zacięcia i czasy wczytywania dzięki pobieraniu z wyprzedzeniem. Zamiast prostego buforowania na dysku, korzystanie z pobierania z wyprzedzeniem na poziomie pamięci zapewnia, że treści są gotowe w momencie, gdy użytkownik wchodzi z nimi w interakcję.

  • Dostosowanie implementacji do wzorców interfejsu

Dostosuj zachowanie pobierania z wyprzedzeniem do interfejsu aplikacji. Na przykład w przypadku kanałów mieszanych, takich jak Facebook, użyj podejścia „tylko bieżący”, aby oszczędzać pamięć, a w przypadku środowisk pionowych, takich jak Rolki na Instagramie, strategii „wstępnego wczytywania sąsiednich filmów”.

preloadingStrategy.png
  • Korzystanie z Media3 w celu zapewnienia długoterminowej jakości kodu

Integracja z interfejsami API Media3 zamiast niestandardowego rozwiązania do buforowania umożliwia lepsze udostępnianie zasobów między odtwarzaczem a PreloadManager, co pozwala zarządzać wieloma filmami za pomocą jednej instancji odtwarzacza. Dzięki temu uzyskujesz bazę kodu, która będzie działać w przyszłości i którą zespoły inżynierów mogą nie tylko utrzymywać i optymalizować, ale też korzystać z najnowszych aktualizacji funkcji.

  • Wdrożenie optymalizacji uwzględniających urządzenie

Poszerz swój zasięg rynkowy, testując aplikację na różnych urządzeniach, w tym na modelach z niższej i średniej półki. Używaj 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 

Teraz znasz już tajniki natychmiastowego odtwarzania. Wypróbuj je!

Autorzy:

Czytaj dalej