使用ExoPlayer 2.8播放列表中的特定文件

时间:2018-10-03 04:40:48

标签: java android exoplayer exoplayer2.x

我正在使用Exoplayer 2.8.0,我在simpleList中填充了一系列音频流,使用通知按钮,下一步,预览和停止可以正常工作,但是如果要播放列表中的特定歌曲,它总是从列表中的第一首歌曲开始,无论我单击列表中的哪首歌曲,都始终从第一首开始。

这是我制作播放列表的方式:

// Create the Playlist from Array
    mediaSources = new MediaSource[radioList_2.size()];
    for (int i = 0; i < radioList_2.size(); i++) {
        mediaSources[i] = new ExtractorMediaSource( Uri.parse(radioList_2.get(i)),
                dataSourceFactory, extractorsFactory, null, null);

    }

    concatenatingMediaSource=new ConcatenatingMediaSource(mediaSources);
    concatenatingMediaSource.addMediaSource(concatenatingMediaSource);
    player.prepare(new ConcatenatingMediaSource(false,mediaSources));
    sTartNotification();

这是我单击列表中的项目时使用的代码:

  MediaSource mediaSource = new ExtractorMediaSource(Uri.parse(strUrl),
            dataSourceFactory,
            extractorsFactory,
            mainHandler,
            null);

//    player.prepare(mediaSource);       
//playerNotificationManager.setPlayer(null);


    concatenatingMediaSource.addMediaSource(mediaSource);
    player.prepare(new ConcatenatingMediaSource(true,mediaSource));

    sTartNotification();
    player.setPlayWhenReady(true);

    //concatenatingMediaSource=new ConcatenatingMediaSource(mediaSource);
    // concatenatingMediaSource.addMediaSource(0,mediaSource);

我也尝试过注释行,它开始播放,但随后导航按钮停止工作,就像播放列表不再退出一样。

我已阅读:How to play a particular video from ExoPlayer playlist android? 但是搜寻功能对我不起作用。

谢谢, 帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

尝试使用单个MediaSource并传递要播放的音频/视频的URL。如果您想搜索,请同时传递eventTime。

public void preparePlayer(String url, long lastEventTime) {
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "XYZ"));
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    MediaSource mediaSource;
    if (url.endsWith(".m3u8")) {
        mediaSource = new HlsMediaSource(Uri.parse(url), dataSourceFactory, null, null);
    } else {
        mediaSource = new ExtractorMediaSource(Uri.parse(url), dataSourceFactory, extractorsFactory, null, null);
    }

    // Prepare the player with the source.
    simpleExolayer.prepare(mediaSource);
    if (lastEventTime > 0) {
        simpleExolayer.seekTo(lastEventTime * 1000);
    }
}