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