우수사례

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

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

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

이 블로그 게시물에서는 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 릴스: 사용자가 세로로 스와이프하는 순수 동영상 환경입니다. 이 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와 같은 실시간 신호를 사용하여 기능과 리소스 사용량을 동적으로 조정합니다.

자세히 알아보기

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

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

작성자:

계속 읽기