1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 一、概念 实现边下边播(即 Progressive Download)主要依赖播放器的流式能力和合理的缓存策略设计。
二、实现方式(以 ExoPlayer 为例) 2.1 使用 ProgressiveMediaSource -支持 HTTP 流式传输,不需要文件完全下载完成就可播放。 val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(url))
2.2 启用缓存机制(SimpleCache) -ExoPlayer 提供 SimpleCache 类,实现磁盘缓存,缓存策略可配置。 val cache = SimpleCache(cacheDir, LeastRecentlyUsedCacheEvictor(MAX_SIZE)) val cacheDataSourceFactory = CacheDataSource.Factory() .setCache(cache) .setUpstreamDataSourceFactory(httpDataSourceFactory)
2.3 播放中自动写入缓存 播放过程中数据会自动写入 SimpleCache,下次可直接读取本地缓存。
三、缓存策略设计建议: -缓存目录设置:放在 app 私有目录,避免用户手动清理。 -缓存大小控制:使用 LRU 淘汰策略,避免磁盘空间占满。 -预加载策略: -视频列表页提前预加载封面几秒内容。 -进入详情页再加载剩余部分。 -断点续播:结合缓存文件和播放进度记录。
四、总结: 实现边下边播核心在于 流式播放 + 本地缓存。使用 ExoPlayer 的 SimpleCache + ProgressiveMediaSource 可轻松实现, 配合合理的预加载与缓存清理策略,兼顾播放流畅与磁盘占用。
|