playlist - 在 Android 中为 ExoPlayer 使用 ConcatenatingMediaSource
问题描述
我正在阅读有关ConcatenatingMediaSource
为我ExoPlayer
的 Android 制作播放列表的官方文档。在此链接中,他们提供了以下示例:
MediaSource firstSource =
new ProgressiveMediaSource.Factory(...).createMediaSource(firstVideoUri);
MediaSource secondSource =
new ProgressiveMediaSource.Factory(...).createMediaSource(secondVideoUri);
// Plays the first video, then the second video.
ConcatenatingMediaSource concatenatedSource =
new ConcatenatingMediaSource(firstSource, secondSource);
在该示例中,它们有两个 URI,因此MediaSource
将创建两个对象,然后将它们相互连接。
我明白了,但现在我的问题是:假设有 1000 个 URI(每个 URI 代表我的播放列表的一个曲目),那么我需要创建 1000 个MediaSource
对象吗?如果我有超过 1000 个,让我们有 10000 个或更多呢?我可以猜测这不会节省内存,对吧?
那么,处理这种情况(超过 2 个MediaSource
对象)的正确方法是什么?
解决方案
你可以像这样使用它,假设歌曲列表包含 1000 或更多,它会处理它,结果,你会得到 concatenatingMediaSource
val concatenatingMediaSource = ConcatenatingMediaSource()
songs.forEach { song ->
val mediaItem:MediaItem = MediaItem.fromUri(song.getString(METADATA_KEY_MEDIA_URI).toUri())
val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem)
concatenatingMediaSource.addMediaSource(mediaSource)
}
推荐阅读
- javascript - 如何在 javascript 画布中为不同的事物重用相同的密钥?
- python - 如何制作显示不同类型值比率的数据框?
- amazon-web-services - AWS CLI S3 命令不适用于文件夹中的空格
- mysql - 为什么我的百分比不算 100% mysql
- c++ - C++ long int 转换混淆
- r - 通过所有因素所有水平的所有组合进行 t 检验
- django - Celery 在使用 app.control.purge() 时运行任务会发生什么?
- fluent-nhibernate - 从 DetachedCriteria 中选择子查询
- ios - 如果文件的速度大于 60,为什么 AKAppleSequencer 播放 MIDI 文件的速度更快?
- java - 无法将 avro 写为字节数组然后将其读回