미리 로드 관리자 개념

미리 로드 관리자를 사용하면 사용자가 한 항목에서 다른 항목으로 전환할 때 대기 시간이 줄어들어 콘텐츠를 더 빠르게 제공하여 사용자 환경을 개선할 수 있습니다. 또한 항목별로 미리 로드 기간과 순위를 맞춤설정할 수 있습니다.

소셜 미디어의 일반적인 상황은 앱이 사용자에게 미디어 선택사항의 목록이나 캐러셀을 표시하는 것입니다. 예를 들어 앱에서 Shorts 동영상 캐러셀을 표시할 수 있습니다. 동영상이 끝나면 앱이 다음 동영상으로 전환됩니다. 사용자가 시청 중인 동영상을 좋아하지 않으면 다음 동영상이나 이전 동영상으로 스와이프할 수 있습니다.

동영상 콘텐츠를 미리 로드하지 않으면 사용자 환경이 저하될 수 있습니다. 사용자가 일부 미디어를 완료한 후 다음 미디어가 로드될 때까지 기다려야 합니다.

반면 콘텐츠를 너무 적극적으로 미리 로드하면 사용자가 실제로 재생하지 않을 수도 있는 콘텐츠를 로드하여 전력과 네트워크 대역폭이 낭비됩니다.

DefaultPreloadManager는 앱이 이러한 우려사항의 균형을 유지하는 데 도움이 됩니다. 미리 로드 관리자는 앱과 함께 각 미디어 항목의 중요도를 결정하고 적절한 양을 미리 로드합니다.

분업

DefaultPreloadManager를 사용하는 경우 일부 작업은 코드에서 실행하고 일부는 미리 로드 관리자에서 실행합니다.

앱은 다음을 실행해야 합니다.

  • 프리로드 관리자를 만드는 데 사용하는 것과 동일한 DefaultPreloadManager.Builder 객체를 사용하여 앱의 ExoPlayer 객체를 만듭니다. DefaultPreloadManager.Builder.buildExoPlayer()을 호출하여 ExoPlayer을 만듭니다.
  • 추적해야 하는 각 미디어 항목에 관해 미리 로드 관리자에게 알립니다. 캐러셀의 모든 콘텐츠가 아닐 수도 있습니다. 대신 재생할 첫 몇 개의 항목에 관해 알려주면 됩니다. 사용자가 캐러셀을 탐색할 때 미리 로드 관리자의 풀에서 미디어 항목을 추가하고 삭제할 수 있습니다.
  • 캐러셀의 콘텐츠가 변경되거나 사용자가 재생 중인 항목을 변경하면 미리 로드 관리자에서 우선순위를 무효화합니다. 이렇게 하면 미리 로드 관리자가 각 미디어 항목의 우선순위를 다시 결정하고 필요한 경우 콘텐츠를 로드합니다. 미디어 항목을 처음 추가한 후와 사용자가 한 항목에서 다른 항목으로 이동할 때, 캐러셀에 항목을 추가하거나 삭제할 때도 미리 로드 관리자를 무효화합니다.
  • 미리 로드 관리자의 쿼리에 응답하여 각 항목에 대해 얼마나 많은 콘텐츠를 미리 로드해야 하는지 관리자에게 알립니다.
  • 사용자가 항목 재생을 시작하면 미리 로드 관리자에서 미디어 가져오기 미리 로드 관리자는 앱에 해당 콘텐츠의 MediaSource를 제공합니다.

  • 사용이 끝나면 미리 로드 관리자를 해제하여 리소스를 해제합니다.

미리 로드 관리자는 다음을 실행합니다.

  • 앱에서 추가한 모든 미디어 항목을 추적합니다.
  • 우선순위가 무효화될 때마다 앱에서 구현한 TargetPreloadStatusControl를 호출하여 앱을 쿼리합니다. 이를 호출하여 로드할 각 미디어 항목의 을 알아냅니다.
  • 앱을 쿼리한 후 각 미디어 항목의 적절한 양을 미리 로드합니다. 미리 로드 관리자는 항목을 로드할 순서를 결정합니다. 사용자가 재생 중인 항목과 가장 유사한 항목에 우선순위를 부여합니다.
  • 앱이 콘텐츠를 요청하면 미리 로드 관리자는 이미 로드된 콘텐츠와 함께 MediaSource를 제공합니다.

미리 로드 관리자 워크플로

이 섹션에서는 미리 로드 관리자를 사용하는 앱의 일반적인 워크플로를 설명합니다. 이 예에서는 앱에 짧은 동영상 캐러셀이 표시된다고 가정합니다. 선택한 동영상은 자동으로 재생되지만 사용자는 캐러셀을 어느 방향으로든 스크롤할 수 있으며, 이렇게 하면 재생 중인 동영상이 중지되고 스크롤한 동영상이 시작됩니다.

이러한 모든 단계는 다음 페이지에서 자세히 설명합니다.

  1. 앱이 타겟 미리 로드 상태 제어를 만듭니다. 미리 로드 관리자는 이 컨트롤을 쿼리하여 각 미디어 항목을 얼마나 로드해야 하는지 알아냅니다.
  2. 앱이 DefaultPreloadManager.Builder를 만들고 타겟 미리 로드 상태 컨트롤을 전달합니다. 그러면 앱이 빌더를 사용하여 미리 로드 관리자를 만듭니다.
  3. 앱이 미디어 항목을 미리 로드 관리자에 추가합니다. 앱은 각 항목에 index를 제공하여 캐러셀에서 항목의 위치를 지정합니다.
  4. 모든 미디어가 추가되면 앱이 invalidate()를 호출하여 미리 로드 관리자에게 각 항목의 우선순위를 설정한 후 미리 로드하도록 지시합니다.
  5. 각 미디어 항목에 대해 미리 로드 관리자는 타겟 미리 로드 컨트롤을 호출하여 항목을 얼마나 로드해야 하는지 쿼리합니다. 타겟 미리 로드 컨트롤은 특정 기간의 콘텐츠를 로드하거나, 항목의 메타데이터만 가져오거나, 이 시점에는 해당 항목을 가져오지 않도록 할 수 있습니다. 프리로드 관리자가 이 정보를 가져오면 미디어 콘텐츠 로드를 시작합니다.
  6. 사용자가 콘텐츠 재생을 시작하면 앱에서 미리 로드 관리자를 호출하여 해당 미디어 항목의 MediaSource를 요청합니다. 앱은 setCurrentPlayingIndex()를 호출하여 재생 중인 미디어 항목을 미리 로드 관리자에게 알립니다.
  7. 사용자가 다른 미디어 항목으로 이동하면 앱은 프리로드 관리자에게 해당 항목을 요청하고 현재 재생 중인 색인도 업데이트합니다. 그런 다음 invalidate()을 다시 호출하여 미리 로드 관리자에게 현재 재생 중인 항목에 따라 우선순위를 업데이트하도록 지시합니다.
  8. 앱이 캐러셀에 미디어 항목을 추가하거나 삭제하면 미리 로드 관리자에도 해당 항목을 추가하거나 삭제하고, 이 작업이 완료되면 invalidate()를 호출합니다.
  9. 미리 로드 관리자의 우선순위가 무효화될 때마다 각 항목을 얼마나 로드해야 하는지 알아보기 위해 타겟 미리 로드 컨트롤을 다시 호출합니다.
  10. 앱이 캐러셀을 닫으면 리소스를 확보하기 위해 미리 로드 관리자를 해제합니다.