java - 如何在 Exo-player v2.x 中添加 Adaptive Track Selector?

标签 java android exoplayer mpeg-dash exoplayer2.x

我正在我的应用程序中设置 Exo Player,我已经在我的播放器中实现了 DASH 自适应流式传输,我想添加功能来播放用户选择的特定质量的轨道。

我的 Exo 播放器版本是 2.9.3,我尝试按照这些 Stackoverflow Post 来实现, Medium Post , 但它有点困惑,部分代码已被弃用,说实话我是初学者。

这是我初始化播放器的代码:-

private void initializePlayer() {
     if (player == null) {
        bandwidthMeter = new DefaultBandwidthMeter();
        TrackSelection.Factory factory = new PlayerTrackSelector(bandwidthMeter);
        trackSelector = new DefaultTrackSelector(factory);
        player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
        player.addVideoListener(this);
        playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
        player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
        player.addListener(this);
        playerView.setPlayer(player);
    }
    MediaSource mediaSource = buildMediaSource(Uri.parse("http://192.168.43.238:3000/storage/video-dash/9e351142a4eb1664643bf93ba13959e8.mpd"));
    player.prepare(mediaSource, true, false);
    player.setPlayWhenReady(playWhenReady);
    player.seekTo(currentWindow, playbackPosition);
}

还有 TrackSelector 类:-

public class PlayerTrackSelector implements TrackSelection.Factory {
    private BandwidthMeter bandwidthMeter;

  public PlayerTrackSelector(BandwidthMeter bandwidthMeter) {
    this.bandwidthMeter = bandwidthMeter;
  }

@Override
public TrackSelection createTrackSelection(TrackGroup group, BandwidthMeter bandwidthMeter, int... tracks) {

    return new AdaptiveTrackSelection(group,tracks,bandwidthMeter,
            AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
            AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
            AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
            AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
            AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
            AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
            Clock.DEFAULT);
  }
}

我希望获得可用质量类型的列表,让用户选择其中一种,然后使用所选类型播放其余内容,这个问题可能很宽泛,但请稍微指导一下。

最佳答案

试试下面的代码。当您需要显示列表时调用以下代码。 rendererIndex -> 你可以手动尝试。 TRACK_TYPE_AUDIO = 1,TRACK_TYPE_VIDEO = 2。

更新:

MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
                    if (mappedTrackInfo != null) {
                        int rendererIndex = 2;
                        int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
                        boolean allowAdaptiveSelections =
                                rendererType == C.TRACK_TYPE_VIDEO
                                        || (rendererType == C.TRACK_TYPE_AUDIO
                                        && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
                                        == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
                        Pair<AlertDialog, TrackSelectionView> dialogPair =
                                TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
                        dialogPair.second.setShowDisableOption(true);
                        dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
                        dialogPair.first.show();
                    }

关于java - 如何在 Exo-player v2.x 中添加 Adaptive Track Selector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997516/

相关文章:

java - LibGdx - 平铺游戏碰撞检测

java - Jsoup解析html页面中的特定图像

android - 防止在 ExoPlayer 中更改最大比特率时重新缓冲

ffmpeg - 具有不同音频和视频质量的 HLS

android - 在 Exo 播放器中播放 Youtube DASH 网址

java - 在 Java 中打印发票的最佳方式是什么

java - Android 图片库 onselected 上出现 NullPointer 异常

java - 为什么 Thread 类中的 setName 分配给字符数组?为什么不是字符串?

android如何通过代码设置手机闹钟

Android:当 View 改变方向时切换高度和宽度