为 MediaPlayer 提供一个扩展,实现边放边缓存的功能。
- add gradle dependencies
implementation "tech.summerly:streamcache:$latest_version"
- 初始化一些变量
override fun onCreate(){
//to init cache folder
CacheGlobalSetting.CACHE_PATH = externalCacheDir.path
CacheGlobalSetting.CACHE_SIZE = 800_000_000
}
- create a custom
MediaDataSource
private class MediaDataSourceDelegate(dataSource: DataSource)
: MediaDataSource(), DataSource by dataSource
- done
val dataSource = CachedDataSource(Uri.parse(url)) mediaPlayer.setDataSource(MediaDataSourceDelegate(dataSource))
val dataSource = CachedDataSource(uri = Uri.parse(url),
cacheNameGenerator = md5NameGenerator,
httpHeaderInjector = emptyHeaderInjector,
cacheStrategy = LruCacheStrategy)
- CacheNameGenerator 为指定的 url 生成一个独特的名字
- HeaderInjector 访问 url 所附带的 http 头
- CacheStrategy 成功缓存后的策略
例如 : ijkMediaPlayer
//create a custom MediaDataSource
private class MediaDataSourceDelegate(dataSource: DataSource)
: IMediaDataSource, DataSource by dataSource
//the simple to use
val dataSource = CachedDataSource(Uri.parse(url))
mediaPlayer.setDataSource(MediaDataSourceDelegate(dataSource))
Apache License Version 2.0