有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用的是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 安卓? 但是seek函数对我不起作用

谢谢, 谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    尝试使用单一媒体源并传递您要播放的音频/视频的URL。如果你想寻找,也要传递事件时间

    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);
        }
    }