0

my code is:

val mediaItem: MediaItem = MediaItem.Builder()
        .setUri(recitationUri)
        .setMediaId("$surah:${ayah}")
        .setClippingConfiguration(
            ClippingConfiguration.Builder()
                .setStartPositionMs(ayahTiming.start)
                .setEndPositionMs(ayahTiming.end)
                .build()
        ).build()


    val mediaSourceFactory = ProgressiveMediaSource.Factory(MediaCache.getInstance(this@PlaybackService).cacheFactory)
    val source = mediaSourceFactory.createMediaSource(mediaItem)

and MediaCache class is :

const val CACHE_DIR_NAME = "cached_audio"
const val MAX_CACHE_SIZE = 256 * 1024 * 1024L//256MB

class MediaCache private constructor(context: Context) {

val cacheFactory: CacheDataSource.Factory

init {
    cacheFactory = setupExoPlayerCache(context)
}

companion object {
    @Volatile
    private lateinit var instance: MediaCache

    fun getInstance(context: Context): MediaCache {
        synchronized(this) {
            if (!::instance.isInitialized) {
                instance = MediaCache(context)
            }
            return instance
        }
    }
}

@SuppressLint("UnsafeOptInUsageError")
private fun setupExoPlayerCache(context: Context): CacheDataSource.Factory {
    val cacheEvictor = LeastRecentlyUsedCacheEvictor(MAX_CACHE_SIZE)
    val databaseProvider = StandaloneDatabaseProvider(context)
    val cache = SimpleCache(
        File(context.cacheDir, CACHE_DIR_NAME),
        cacheEvictor, databaseProvider
    )
    val upstreamFactory = DefaultDataSource.Factory(context)
    return CacheDataSource.Factory().apply {
        setCache(cache)
        setUpstreamDataSourceFactory(upstreamFactory)
        setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
    }
}

}

I don't know why using this code ClippingConfiguration is not working :

val mediaSourceFactory = ProgressiveMediaSource.Factory(MediaCache.getInstance(this@PlaybackService).cacheFactory)
val source = mediaSourceFactory.createMediaSource(mediaItem)

but working if using simple media source:

val source = DefaultMediaSourceFactory(this).createMediaSource(mediaItem)
Hadi Ahmadi
  • 1,924
  • 2
  • 17
  • 38

1 Answers1

0

using DefaultMediaSourceFactory instead of ProgressiveMediaSource solves my problem.

val mediaSourceFactory = DefaultMediaSourceFactory(MediaCache.getInstance(this@PlaybackService).cacheFactory)
val source = mediaSourceFactory.createMediaSource(mediaItem)
Hadi Ahmadi
  • 1,924
  • 2
  • 17
  • 38