@@ -23,11 +23,13 @@ import androidx.media3.common.C
23
23
import androidx.media3.common.MediaItem
24
24
import androidx.media3.common.util.Log
25
25
import androidx.media3.common.util.UnstableApi
26
+ import androidx.media3.demo.shortform.DemoUtil
26
27
import androidx.media3.demo.shortform.MediaItemDatabase
27
28
import androidx.media3.demo.shortform.PlayerPool
28
29
import androidx.media3.demo.shortform.R
29
30
import androidx.media3.exoplayer.DefaultLoadControl
30
31
import androidx.media3.exoplayer.source.preload.DefaultPreloadManager
32
+ import androidx.media3.exoplayer.source.preload.PreloadManagerListener
31
33
import androidx.media3.exoplayer.source.preload.TargetPreloadStatusControl
32
34
import androidx.recyclerview.widget.RecyclerView
33
35
import kotlin.math.abs
@@ -49,7 +51,7 @@ class ViewPagerMediaAdapter(
49
51
private const val LOAD_CONTROL_MIN_BUFFER_MS = 5_000
50
52
private const val LOAD_CONTROL_MAX_BUFFER_MS = 20_000
51
53
private const val LOAD_CONTROL_BUFFER_FOR_PLAYBACK_MS = 500
52
- private const val MANAGED_ITEM_COUNT = 10
54
+ private const val MANAGED_ITEM_COUNT = 20
53
55
private const val ITEM_ADD_REMOVE_COUNT = 4
54
56
}
55
57
@@ -68,9 +70,11 @@ class ViewPagerMediaAdapter(
68
70
val preloadManagerBuilder =
69
71
DefaultPreloadManager .Builder (context.applicationContext, targetPreloadStatusControl)
70
72
.setLoadControl(loadControl)
73
+ .setCache(DemoUtil .getDownloadCache(context.applicationContext))
71
74
playerPool = PlayerPool (numberOfPlayers, preloadManagerBuilder)
72
75
holderMap = mutableMapOf ()
73
76
preloadManager = preloadManagerBuilder.build()
77
+ preloadManager.addListener(DefaultPreloadManagerListener ())
74
78
for (i in 0 until MANAGED_ITEM_COUNT ) {
75
79
addMediaItem(index = i, isAddingToRightEnd = true )
76
80
}
@@ -175,12 +179,18 @@ class ViewPagerMediaAdapter(
175
179
TargetPreloadStatusControl <Int , DefaultPreloadManager .PreloadStatus > {
176
180
177
181
override fun getTargetPreloadStatus (rankingData : Int ): DefaultPreloadManager .PreloadStatus {
178
- if (abs(rankingData - currentPlayingIndex) == 2 ) {
179
- return DefaultPreloadManager .PreloadStatus .specifiedRangeLoaded(/* durationMs= */ 500L )
180
- } else if (abs(rankingData - currentPlayingIndex) == 1 ) {
182
+ if (abs(rankingData - currentPlayingIndex) == 1 ) {
183
+ return DefaultPreloadManager .PreloadStatus .specifiedRangeLoaded(/* durationMs= */ 1000L )
184
+ } else if (abs(rankingData - currentPlayingIndex) <= 3 ) {
181
185
return DefaultPreloadManager .PreloadStatus .specifiedRangeLoaded(/* durationMs= */ 1000L )
182
186
}
183
- return DefaultPreloadManager .PreloadStatus .PRELOAD_STATUS_NOT_PRELOADED
187
+ return DefaultPreloadManager .PreloadStatus .specifiedRangeCached(5000L )
188
+ }
189
+ }
190
+
191
+ inner class DefaultPreloadManagerListener : PreloadManagerListener {
192
+ override fun onCompleted (mediaItem : MediaItem ) {
193
+ Log .w(TAG , " onCompleted: " + mediaItem.mediaId)
184
194
}
185
195
}
186
196
}
0 commit comments