이 페이지에서는 프리로드 관리자를 사용하여 동영상 콘텐츠를 관리하는 방법을 설명합니다. 프리로드 관리자를 사용하면 관리자가 이미 일부 콘텐츠를 로드했으므로 사용자가 한 미디어 항목에서 다른 미디어 항목으로 전환할 때 재생이 더 빠르게 시작되어 사용자에게 더 나은 환경을 제공할 수 있습니다.
이 페이지에서는 다음 주제에 대해 설명합니다.
프리로드 관리자에 미디어 항목 추가
프리로드 관리자에게 추적할 각 미디어 항목을 알려야 합니다. 예를 들어 앱에 동영상 캐러셀이 있는 경우 프리로드 관리자에 동영상을 추가합니다. 사용 사례에 따라 모든 동영상을 추가하거나 현재 재생 중인 동영상 근처의 모든 동영상만 추가할 수 있습니다. 나중에 프리로드 관리자에 새 항목을 추가할 수도 있습니다.
이렇게 하려면 addMediaItems와 같은 일괄 추가 메서드를 사용합니다. 또는 add (또는
addMediaSource)를 호출하여 미디어 항목을 개별적으로 추가할 수 있습니다. 하지만 미디어 항목을 개별적으로 추가해도 프리로드가 자동으로 트리거되지는 않습니다. 개별
메서드를 사용하는 경우 항목 추가가 완료되면 invalidate를 명시적으로 호출하여 프리로드 관리자에게 우선순위를 업데이트하고 프리로드를 시작하도록 알려야 합니다.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
코드 관련 주요사항
- 이 스니펫은 프리로드 관리자를 만든 후 일괄 모드에서 프리로드 관리자를 처음 채우는 방법을 보여줍니다. `addMediaItems`
addMediaItems를 호출하여 항목을 기존의 채워진 프리로드 관리자에 추가할 수 있습니다. - 이 스니펫에서
pullMediaItemsFromService()는 재생할 콘텐츠 목록을 가져오는 앱의 로직입니다. 코드는 이 메서드를 호출하여 최대 20개의 항목 목록을 가져옵니다. preloadManager는DefaultPreloadManager만들기에 생성된 Create aDefaultPreloadManager입니다.rankingData는 프리로드 관리자가 각 미디어 항목의 우선순위를 결정하는 데 사용하는 값입니다.DefaultPreloadManager의 경우rankingData는 캐러셀에서 항목의 위치를 나타내는 정수입니다. 프리로드 관리자는 각 항목이 현재 재생 중인 항목에서 얼마나 떨어져 있는지에 따라 우선순위를 결정합니다.
미디어 가져오기 및 재생
사용자가 새 미디어 항목으로 이동하면 프리로드 관리자에서 미디어 항목을 가져와야 합니다. 프리로드 관리자가 콘텐츠를 로드한 경우 프리로드 관리자를 사용하지 않았을 때보다 콘텐츠가 더 빠르게 재생됩니다. 프리로드 관리자가 아직 해당 항목의 콘텐츠를 로드하지 않은 경우 콘텐츠가 정상적으로 재생됩니다.
또한 setCurrentPlayingIndex를 호출하여 프리로드 관리자의 현재 재생 색인을 업데이트해야 합니다. 이렇게 하면 프리로드 관리자가 향후 프리로드 작업의 우선순위를 결정할 수 있습니다.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
코드 관련 주요사항
player는 앱에서 콘텐츠를 재생하는 데 사용하는 Media3ExoPlayer입니다. 프리로드 관리자를 만드는 데 사용한 동일한 빌더에서DefaultPreloadManager.Builder.buildExoPlayer()를 호출하여 플레이어를 만들어야 합니다.- 사용자가 새 미디어 항목으로 전환하면 앱은
getMediaSource()를 호출하여 프리로드 관리자에서 미디어 소스를 가져옵니다. 프리로드 관리자에 이미 추가한mediaItem이어야 합니다. 프리로드 관리자가 아직 콘텐츠 로드를 시작하지 않은 경우에도 괜찮습니다. 이 경우 프리로드된 데이터가 없는MediaSource를 반환합니다. 예를 들어 사용자가 캐러셀에서 갑자기 멀리 이동하는 경우 이러한 상황이 발생할 수 있습니다. - 사용자가 새 미디어 항목을 재생한 후
setCurrentPlayingIndex를 호출하여 프리로드 관리자에게 캐러셀에서 새 항목이 있는 위치를 알립니다. 프리로드 관리자는 다음 항목의 로드에 우선순위를 지정하기 위해 이 정보가 필요합니다.
프리로드 관리자에서 항목 삭제
프리로드 관리자를 효율적으로 유지하려면 프리로드 관리자가 더 이상 추적할 필요가 없는 항목을 삭제해야 합니다. 캐러셀에 아직 있지만 사용자의 현재 위치에서 멀리 떨어진 항목을 삭제할 수도 있습니다. 예를 들어 항목이 사용자가 시청 중인 항목에서 15개 이상 떨어져 있는 경우 프리로드할 필요가 없다고 결정할 수 있습니다. 이 경우 항목이 멀리 떨어져 있을 때 항목을 삭제합니다. 사용자가 삭제된 항목으로 다시 이동하면, 언제든지 다시 추가할 수 있습니다.
삭제할 미디어 항목 목록이 있는 경우
removeMediaItems를 사용할 수 있습니다. 또는
remove (또는 removeMediaSource)를 호출하여 미디어 항목을
개별적으로 삭제할 수 있습니다.
preloadManager.removeMediaItems(mediaItemsToRemove)
코드 관련 주요사항
- 프리로드 관리자에서 모든 항목을 삭제하려면
reset()대신remove()을 호출하면 됩니다. 이 접근 방식은 캐러셀의 모든 항목을 변경해야 하는 경우에 유용합니다. 이 경우 항목 을 삭제한 후 프리로드 관리자에 새 항목을 추가해야 합니다.
프리로드 관리자 사용이 끝나면 해제
프리로드 관리자가 더 이상 필요하지 않으면 리소스를 확보하기 위해 해제해야 합니다. 특히 활동이 소멸될 때 해제해야 합니다.
preloadManager.release()
코드 관련 주요사항
- 해제한 후에는 객체의 메서드를 호출 해서는 안 됩니다.
- 다른 프리로드 관리자를 만들어야 하는 경우 새
DefaultPreloadManager.Builder를 만들고 이를 사용하여DefaultPreloadManager를 만듭니다. 이전 빌더를 재사용하지 마세요.