미리 로드 관리자를 사용하면 사용자가 한 항목에서 다른 항목으로 전환할 때 대기 시간을 줄여 콘텐츠를 더 빠르게 제공하여 사용자에게 더 나은 환경을 제공할 수 있습니다. 또한 항목별로 미리 로드 기간과 순위를 맞춤설정할 수 있습니다.
소셜 미디어의 일반적인 상황은 앱이 사용자에게 미디어 선택 목록 또는 캐러셀을 표시하는 것입니다. 예를 들어 앱은 짧은 동영상 캐러셀을 표시할 수 있습니다. 동영상 하나가 끝나면 앱이 다음 동영상으로 전환됩니다. 사용자가 시청 중인 동영상이 마음에 들지 않으면 스와이프하여 다음 동영상 또는 이전 동영상으로 이동할 수 있습니다.
동영상 콘텐츠를 미리 로드하지 않으면 사용자 환경이 불편해질 수 있습니다. 사용자가 일부 미디어를 완료한 후 다음 미디어가 로드될 때까지 기다려야 합니다.
반면에 콘텐츠를 너무 적극적으로 미리 로드하면 사용자가 실제로 재생하지 않을 수 있는 콘텐츠를 로드하는 데 전력과 네트워크 대역폭이 낭비됩니다.
DefaultPreloadManager 는 앱이 이러한 문제를 해결하는 데 도움이 됩니다. 미리 로드 관리자는 앱과 함께 작동하여 각 미디어 항목의 중요도를 결정하고 적절한 양을 미리 로드합니다.
역할 분담
DefaultPreloadManager를 사용하는 경우 일부 작업은 코드에서 실행되고 일부 작업은 미리 로드 관리자에서 실행됩니다.
앱은 다음 작업을 실행해야 합니다.
- 미리 로드 관리자를 만드는 데 사용하는 것과 동일한
DefaultPreloadManager.Builder객체를 사용하여 앱의ExoPlayer객체를 만듭니다.DefaultPreloadManager.Builder.buildExoPlayer()를 호출하여ExoPlayer를 만듭니다. - 추적해야 하는 각 미디어 항목에 관해 미리 로드 관리자에게 알립니다. 이는 캐러셀의 모든 콘텐츠가 아닐 수 있습니다. 대신 재생할 처음 몇 개의 항목에 관해 알릴 수 있습니다. 사용자가 캐러셀을 탐색할 때 미리 로드 관리자의 풀에서 미디어 항목을 추가하고 삭제할 수 있습니다.
- 미리 로드 관리자의 쿼리에 응답하여 각 항목에 미리 로드할 콘텐츠의 양을 관리자에게 알립니다.
사용자가 항목 재생을 시작하면 미리 로드 관리자에서 미디어를 가져옵니다. 미리 로드 관리자는 앱에 해당 콘텐츠의
MediaSource를 제공합니다.현재 재생 중인 항목의 색인을 미리 로드 관리자에게 알립니다. 이 정보는 미리 로드 관리자가 각 미디어 항목이 재생 중인 항목에 얼마나 가까운지 확인하고 그에 따라 미리 로드 우선순위를 동적으로 지정하는 데 사용됩니다. 사용자가 새 항목으로 이동하면 미리 로드 관리자로 색인을 업데이트합니다.
미리 로드 관리자는 다음 작업을 실행합니다.
- 앱에서 추가한 모든 미디어 항목을 추적합니다.
- 우선순위가 업데이트될 때마다 앱에서 구현한
TargetPreloadStatusControl을 호출하여 앱을 쿼리합니다. 각 미디어 항목을 얼마나 로드할지 확인하기 위해 이를 호출합니다. - 앱을 쿼리한 후 각 미디어 항목의 적절한 양을 미리 로드합니다. 미리 로드 관리자는 항목을 로드할 순서를 결정합니다. 사용자가 재생 중인 항목에 가장 가까운 항목의 우선순위를 지정합니다.
- 앱이 콘텐츠를 요청하면 미리 로드 관리자는 이미 로드된 콘텐츠가 포함된
MediaSource를 제공합니다.
미리 로드 관리자 워크플로
이 섹션에서는 미리 로드 관리자를 사용하는 앱의 일반적인 워크플로를 설명합니다. 이 예에서는 앱이 짧은 동영상 캐러셀을 표시한다고 가정합니다. 선택한 동영상은 자동으로 재생되지만 사용자는 캐러셀을 양방향으로 스크롤할 수 있습니다. 이렇게 하면 재생 중이던 동영상이 중지되고 스크롤한 동영상이 시작됩니다.
이러한 모든 단계는 다음 페이지에서 자세히 설명합니다.
- 앱이 대상 미리 로드 상태 제어 를 만듭니다. 미리 로드 관리자는 이 제어를 쿼리하여 각 미디어 항목을 얼마나 로드할지 확인합니다.
- 앱이
DefaultPreloadManager.Builder를 만들고 대상 미리 로드 상태 제어를 전달합니다. 그런 다음 앱은 빌더를 사용하여 미리 로드 관리자를 만듭니다. - 앱이 미리 로드 관리자에 미디어 항목을 추가합니다. 앱은 각 항목에 색인 을 제공하여 캐러셀에서 항목의 위치를 지정합니다.
- 각 미디어 항목에 대해 미리 로드 관리자는 대상 미리 로드 제어를 호출하여 항목을 얼마나 로드해야 하는지 쿼리합니다. 대상 미리 로드 제어는 특정 기간의 콘텐츠를 로드하거나, 항목의 메타데이터만 가져오거나, 현재 해당 항목을 가져오지 않도록 할 수 있습니다. 미리 로드 관리자가 이 정보를 가져온 후 미디어 콘텐츠 로드를 시작합니다.
- 사용자가 콘텐츠 재생을 시작하면 앱은 미리 로드 관리자를 호출하여
해당 미디어 항목의
MediaSource를 요청합니다. 또한 앱은setCurrentPlayingIndex()를 호출하여 미리 로드 관리자에게 재생 중인 미디어 항목을 알려 미디어 항목의 우선순위가 업데이트되도록 합니다. - 미리 로드 관리자의 우선순위가 업데이트될 때마다 대상 미리 로드 제어를 다시 호출하여 각 항목을 얼마나 로드할지 확인합니다.
- 앱이 캐러셀을 닫으면 미리 로드 관리자를 해제하여 리소스를 확보합니다.