Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在exo player中切换可用曲目格式(HLS)?_Android_Http Live Streaming_Exoplayer_Exoplayer2.x - Fatal编程技术网

Android 如何在exo player中切换可用曲目格式(HLS)?

Android 如何在exo player中切换可用曲目格式(HLS)?,android,http-live-streaming,exoplayer,exoplayer2.x,Android,Http Live Streaming,Exoplayer,Exoplayer2.x,player.getCurrentTrackGroups().get(0).formats 我看到这种方法,我可以获得可用格式的数组,但我不知道如何从中选择一种。后端支持不同格式具有不同分辨率的HLS。Exo player会根据网络速度自动选择格式,但我想像在youtube上那样手动选择格式。[从接受的答案中获取帮助][1] [took help from the accepted answer][1] DefaultTrackSelector trackSelector = new Defau

player.getCurrentTrackGroups().get(0).formats

我看到这种方法,我可以获得可用格式的数组,但我不知道如何从中选择一种。后端支持不同格式具有不同分辨率的HLS。Exo player会根据网络速度自动选择格式,但我想像在youtube上那样手动选择格式。

[从接受的答案中获取帮助][1]
[took help from the accepted answer][1]
DefaultTrackSelector trackSelector = new DefaultTrackSelector(this);
SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).setTrackSelector(trackSelector).build();

//insert above two lines in your initPlayer() method

//this method does the actual work     
private void applySelection(int trackIndex) {

    int videoRendererIndex = 0;

    MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();

    //This logic is to find the find the video renderer index
    for (int i = 0; i < mappedTrackInfo.length; i++) {
        TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
        if (trackGroups.length != 0) {
            switch (player.getRendererType(i)) {
                case C.TRACK_TYPE_VIDEO:
                    videoRendererIndex = i;
                    break;
            }
        }

    }
    trackGroups = mappedTrackInfo != null ? mappedTrackInfo.getTrackGroups(videoRendererIndex) : null;
    int groupIndex = 0;//which group has the the formats you want to use, in my case it was 0.
    //You can use the debugger or you can Log the whole trackGroup to see its details.
    DefaultTrackSelector.SelectionOverride override = new DefaultTrackSelector.SelectionOverride(groupIndex, trackIndex);

    parametersBuilder = new DefaultTrackSelector.ParametersBuilder(this);
    if (trackGroups != null) {
        parametersBuilder.setSelectionOverride(videoRendererIndex, trackGroups, override);
        trackSelector.setParameters(parametersBuilder);
    }
}

//incase you want to switch to auto quality select, insert these lines you code
trackSelector.clearSelectionOverride(0,trackGroups);
DefaultTrackSelector trackSelector=新的DefaultTrackSelector(此); SimpleExoPlayer=新建SimpleExoPlayer.Builder(this).setTrackSelector(trackSelector.build(); //在initPlayer()方法中插入上面两行 //这种方法做实际工作 私有void applySelection(int-trackIndex){ int videorenderindex=0; MappingTrackSelector.MappedTrackInfo MappedTrackInfo=trackSelector.getCurrentMappedTrackInfo(); //此逻辑用于查找视频渲染器索引 对于(int i=0;i