우수사례

Instagram과 Facebook은 Media3 PreloadManager로 즉시 재생을 제공하고 사용자 참여를 높입니다

전문 길이: 4분
Mayuri Khinvasara Khabya
개발자 관계팀 엔지니어

소셜 미디어의 역동적인 세계에서 사용자의 관심은 빠르게 얻거나 잃을 수 있습니다. Meta 앱 (Facebook 및 Instagram)은 세계 최대의 소셜 플랫폼 중 하나이며 전 세계 수십억 명의 사용자에게 서비스를 제공합니다. Meta의 경우 동영상을 원활하게 제공하는 것은 단순한 기능이 아니라 사용자 경험의 핵심입니다. 짧은 형식 동영상, 특히 Facebook 뉴스피드와 Instagram Reels는 참여의 주요 동인이 되었습니다. 이러한 동영상은 창의적인 표현과 빠른 콘텐츠 소비를 지원하며 전 세계 사람들을 연결하고 즐거움을 선사합니다. 

이 블로그 게시물에서는 Meta가 진정한 즉시 재생을 제공하여 수십억 명의 사용자를 위한 동영상 재생을 혁신한 여정을 안내합니다.

짧은 형식 동영상의 지연 시간 격차

짧은 형식 동영상은 사용자가 피드를 빠르게 스크롤하므로 매우 빠른 속도의 상호작용을 유도합니다. 끊임없이 변화하는 피드에서 동영상 간의 원활한 전환을 제공하면 즉시 재생에 고유한 장애물이 발생합니다. 따라서 기존 디스크 캐싱 및 표준 반응형 재생 전략을 뛰어넘는 솔루션이 필요합니다.

Media3 PreloadManager를 통한 발전

짧은 형식 콘텐츠의 증가로 인한 소비 습관의 변화와 기존 긴 형식 재생 아키텍처의 제한사항을 해결하기 위해 Jetpack Media3는 PreloadManager를 도입했습니다. 이 구성요소를 사용하면 개발자가 디스크 캐싱을 넘어 사용자가 재생을 누르기 전에 메모리에 미디어를 준비할 수 있도록 세부적인 제어 및 맞춤설정을 제공할 수 있습니다. PreloadManager를 사용한 미디어 재생에 관한 기술적 세부정보를 이해하려면 이 블로그 시리즈를 읽어보세요.

Meta가 진정한 즉시 재생을 달성한 방법

기존 복잡성

이전에는 Meta가 동영상 전송을 위해 준비 (플레이어 준비)와 프리페치 (디스크에 콘텐츠 캐싱)를 조합하여 사용했습니다. 이러한 방법은 네트워크 효율성을 개선하는 데 도움이 되었지만 상당한 문제를 야기했습니다. 준비를 위해서는 여러 플레이어 인스턴스를 순차적으로 인스턴스화해야 했으므로 상당한 메모리가 소비되었고 미리 로드는 몇 개의 동영상으로만 제한되었습니다. 이러한 높은 리소스 요구사항은 최신 고속 스크롤 소셜 피드에서 예상되는 즉시 재생을 제공하기 위해 확장 가능한 강력한 솔루션을 적용할 수 있음을 의미했습니다.

Media3 PreloadManager 통합

진정한 즉시 재생을 달성하기 위해 Meta의 Media Foundation Client팀은 Jetpack Media3 PreloadManager를 Facebook과 Instagram에 통합했습니다. 이들은 미리 로드 및 재생 시스템을 통합하기 위해 DefaultPreloadManager를 선택했습니다. 이 통합을 위해서는 PreloadManager와 ExoPlayer 인스턴스 간의 효율적인 리소스 공유를 지원하도록 Meta의 기존 아키텍처를 리팩터링해야 했습니다. 이러한 전략적 전환은 미리 로드 작업을 병렬화하고 단일 플레이어 인스턴스를 사용하여 여러 동영상을 관리하는 기능을 제공하는 주요 아키텍처 이점을 제공했습니다. 이를 통해 미리 로드 용량이 크게 증가하는 동시에 이전 접근 방식의 높은 메모리 복잡성이 제거되었습니다.

colinKho.png

최적화 및 성능 조정

그런 다음 팀은 Meta의 다양한 글로벌 기기 생태계에서 성능을 최적화하기 위해 광범위한 테스트와 반복을 수행했습니다. 초기 공격적인 미리 로드는 메모리 사용량 증가 및 스크롤 성능 저하를 비롯한 문제를 일으키기도 했습니다. 이 문제를 해결하기 위해 신중한 메모리 측정, 기기 단편화 고려, 시스템을 특정 UI 패턴에 맞게 조정하여 구현을 미세 조정했습니다.

특정 UI 패턴에 맞게 구현 미세 조정

Meta는 다양한 미리 로드 전략을 적용하고 각 앱의 특정 UI 패턴에 맞게 동작을 조정했습니다.

  • Facebook 뉴스피드: UI는 현재 표시되는 동영상에 우선순위를 부여합니다. 관리자는 사용자가 스크롤을 일시중지하는 순간 시작되도록 현재 동영상만 미리 로드합니다. 이 "현재만" 초점은 사용자가 동영상 사이에 많은 정적 게시물을 볼 수 있는 환경에서 데이터 및 메모리 공간을 최소화합니다. 시스템은 현재 표시되는 동영상만 미리 로드하도록 설계되었지만 향후 동영상도 미리 로드하도록 조정할 수 있습니다. 
  • Instagram Reels: 사용자가 세로로 스와이프하는 순수 동영상 환경입니다. 이 UI를 위해 팀은 "인접 미리 로드" 전략을 구현했습니다. PreloadManager는 현재 Reels 바로 뒤에 있는 동영상을 메모리에 준비된 상태로 유지합니다. 이 양방향 접근 방식을 사용하면 사용자가 위로 스와이프하든 아래로 스와이프하든 전환이 즉시 원활하게 유지됩니다. 그 결과 사용자에게 재생 시작 및 첫 번째 프레임까지의 시간을 개선하는 등 환경 품질 (QoE)이 크게 개선되었습니다.

다양한 글로벌 기기 생태계를 위한 확장

수십억 대의 기기에서 고성능 동영상 스택을 확장하려면 공격적인 미리 로드 이상의 인텔리전스가 필요합니다. Meta는 특히 중저가 하드웨어에서 메모리 압력과 스크롤 지연으로 인해 초기 문제에 직면했습니다. 이 문제를 해결하기 위해 Media3 구현을 중심으로 기기 스트레스 감지 시스템을 구축했습니다. 이제 앱은 I/O 및 CPU 신호를 실시간으로 모니터링합니다. 기기에 과부하가 걸리면 UI 응답성에 우선순위를 부여하기 위해 미리 로드가 일시중지됩니다.

이 기기 인식 최적화를 통해 즉시 재생의 이점이 시스템 안정성을 희생하지 않도록 보장하므로 이전 하드웨어의 사용자도 더 원활하고 중단 없는 피드를 경험할 수 있습니다.

mirabelHu.png

아키텍처 개선 및 코드 상태

사용자 대상 측정항목 외에도 Media3 PreloadManager로의 마이그레이션은 장기적인 아키텍처 이점을 제공했습니다. 통합 및 조정 프로세스에는 성능의 균형을 맞추기 위해 여러 번의 반복이 필요했지만 결과 코드베이스는 더 유지관리하기 쉽습니다. 팀은 PreloadManager API가 기존 Media3 생태계와 깔끔하게 통합되어 리소스 공유를 개선할 수 있음을 확인했습니다. Meta의 경우 Media3 PreloadManager의 채택은 동영상 소비의 미래에 대한 전략적 투자였습니다. 

미리 로드를 채택하고 기기 인텔리전트 게이트를 추가함으로써 앱의 총 시청 시간을 늘리고 글로벌 커뮤니티의 전반적인 참여도를 높일 수 있었습니다. 

Instagram과 Facebook에 미치는 영향

사전 예방적 아키텍처는 두 플랫폼 모두에서 즉각적이고 측정 가능한 개선사항을 제공했습니다. 

  • Facebook은 재생 시작 속도가 빨라지고, 재생 중단률이 감소하고, 불량 세션 (예: 재버퍼링, 시작 시간 지연,품질 저하 등)이 감소 하여 전반적으로 시청 시간이 늘어났습니다. 
  • Instagram은 재생 시작 속도가 빨라지고 총 시청 시간이 늘어났습니다. 조인 지연 시간 (사용자의 작업부터 첫 번째 프레임 표시까지의 간격)을 없애면 참여 측정항목이 직접적으로 증가했습니다. 버퍼링 감소로 인한 중단 감소 는 사용자가 더 많은 콘텐츠를 시청했음을 의미하며 이는 참여 측정항목을 통해 확인할 수 있었습니다.
beforeAfterPreload.gif

대규모 엔지니어링 학습

미디어 소비 습관이 진화함에 따라 즉각적인 경험에 대한 수요는 계속 증가할 것입니다. 사전 예방적 메모리 관리를 구현하고 규모와 기기 다양성에 맞게 최적화하면 애플리케이션이 이러한 기대치를 효율적으로 충족할 수 있습니다.

  • 인텔리전트 미리 로드에 우선순위 부여

미리 로드를 통해 끊김과 로드 시간을 최소화하여 안정적인 환경을 제공하는 데 집중하세요. 단순한 디스크 캐싱이 아니라 메모리 수준 미리 로드를 활용하면 사용자가 콘텐츠와 상호작용하는 순간 콘텐츠가 준비됩니다.

  • 구현을 UI 패턴에 맞게 조정

앱의 UI에 따라 미리 로드 동작을 맞춤설정합니다. 예를 들어 Facebook과 같은 혼합 피드에는 '현재만' 초점을 사용하여 메모리를 절약하고 Instagram Reels와 같은 세로 환경에는 '인접 미리 로드' 전략을 사용합니다.

preloadingStrategy.png
  • 장기적인 코드 상태를 위해 Media3 활용

맞춤 캐싱 솔루션이 아닌 Media3 API와 통합하면 플레이어와 PreloadManager 간의 리소스 공유가 개선되어 단일 플레이어 인스턴스로 여러 동영상을 관리할 수 있습니다. 이를 통해 엔지니어링팀이 시간이 지남에 따라 유지관리하고 최적화할 뿐만 아니라 최신 기능 업데이트의 이점을 누릴 수 있는 미래 지향적인 코드베이스가 생성됩니다.

  • 기기 인식 최적화 구현

중저가 모델을 비롯한 다양한 기기에서 테스트하여 시장 도달범위를 넓히세요. CPU, 메모리, I/O와 같은 실시간 신호를 사용하여 기능과 리소스 사용량을 동적으로 조정합니다.

자세히 알아보기

시작하고 자세히 알아보려면 

이제 즉시 재생의 비밀을 알았습니다. 사용해 보세요.

작성자:

계속 읽기