我想将ExoPlayer2与播放列表一起使用,可以动态地改变音轨(在播放列表中添加或删除它们)并更改循环设置.
由于ConcatenatingMediaSource有静态数组(而不是列表),我正在实现一个DynamicmediaSource,比如连接一个但是用列表而不是数组和一个模式方法addSource来向列表添加一个以上的媒体源.
public voID addSource(MediaSource mediaSource) { this.mediaSources.add(mediaSource); duplicateFlags = buildDuplicateFlags(this.mediaSources); if(!mediaSources.isEmpty()) prepareSource(mediaSources.size() -1); else prepareSource(0);}
当我调用addSource时
MediaSource ms = buildMediaSource(mynewuri,null); mediaSource.addSource(ms);
轨道被添加到数组但似乎缺少某些东西,因为我总是在createPeriod方法中获得ArrayOutOfBoundsException.
在createPeriod中的方法
mediaSources.get(sourceIndex)...
正在尝试访问index = mediaSources.size().
你能帮助我吗?
最佳答案我最终成功了.在从数组到列表的转换过程中,这是我的错.
我不得不使用SparseArrays作为时间表和清单,一切都开始起作用了.
在DynamicmediaSource中,只需设置以下类型:
private final List
您必须使用稀疏数组将正确的值设置为方法中的时间轴和清单
private voID handleSourceInfoRefreshed(int sourceFirstIndex,Timeline sourceTimeline,Object sourceManifest) { // Set the timeline and manifest. timelines.put(sourceFirstIndex,sourceTimeline); manifests.put(sourceFirstIndex,sourceManifest); // Also set the timeline and manifest for any duplicate entrIEs of the same source. for (int i = sourceFirstIndex + 1; i < mediaSources.size(); i++) { if (mediaSources.get(i).equals(mediaSources.get(sourceFirstIndex))) { timelines.put(i,sourceTimeline); manifests.put(i,sourceManifest); } } for(int i= 0; i
以下是DynamicmediaSource类的完整代码:
public final class DynamicmediaSource implements MediaSource {private static final String TAG = "DynamicSource";private final List
总结 以上是内存溢出为你收集整理的android – Exoplayer 2的动态播放列表全部内容,希望文章能够帮你解决android – Exoplayer 2的动态播放列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)