You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exoplayer配置DefaultTrackSelector限制最低分辨率仍失效如何解决?

ExoPlayer强制256x144最低分辨率播放失效问题解决

问题背景

需要让ExoPlayer固定以最低分辨率(256x144)播放视频,初始对DefaultTrackSelector做了两项配置:

  • 调用setMaxVideoSize(width, height)将最大分辨率限制为目标参数
  • 调用setForceHighestSupportedBitrate(true)强制选择尺寸约束范围内支持的最高比特率
    配置完成后播放器仍会播放超出限制的分辨率视频,需要定位修复。

初始配置代码

DefaultTrackSelector trackSelector = new DefaultTrackSelector(requireContext());
trackSelector.setParameters(trackSelector
        .buildUponParameters()
        .setMaxVideoSize(256, 144)
        .setForceHighestSupportedBitrate(true));
player = new SimpleExoPlayer.Builder(requireContext())
        .setTrackSelector(trackSelector)
        .build();
player.setMediaItem(MediaItem.fromUri(videoUri));
player.setPlayWhenReady(true);
player.prepare();
playerView.setPlayer(player);

运行日志(分辨率异常)

3314-13314/com.example D/EventLogger: downstreamFormat [eventTime=0.60, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, fps=30.0]
2021-06-26 16:52:44.683 13314-13314/com.example D/EventLogger: videoInputFormat [eventTime=0.61, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, fps=30.0]
2021-06-26 16:52:45.208 13314-13314/com.example D/EventLogger: downstreamFormat [eventTime=1.22, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.42C01E, res=480x270, fps=29.999668]
2021-06-26 16:52:45.278 13314-13314/com.example D/EventLogger: videoInputFormat [eventTime=1.27, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.42C01E, res=480x270, fps=29.999668]
2021-06-26 16:52:45.317 13314-13314/com.example D/EventLogger: downstreamFormat [eventTime=1.42, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.4D401F, res=720x720, fps=29.999668]
2021-06-26 16:52:45.590 13314-13314/com.example D/EventLogger: videoInputFormat [eventTime=1.69, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.4D401F, res=720x720, fps=29.999668]
2021-06-26 16:52:54.257 13314-13314/com.example D/EventLogger: downstreamFormat [eventTime=0.21, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.64001F, res=960x540, fps=29.999342]
2021-06-26 16:52:54.666 13314-13314/com.example D/EventLogger: videoInputFormat [eventTime=0.62, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.64001F, res=960x540, fps=29.999342]
2021-06-26 16:52:56.331 13314-13314/com.example D/EventLogger: downstreamFormat [eventTime=0.60, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.64001F, res=608x1080, fps=30.0]
2021-06-26 16:52:56.413 13314-13314/com.example D/EventLogger: videoInputFormat [eventTime=0.69, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.64001F, res=608x1080, fps=30.0]

失效原因

  1. setMaxVideoSize的约束逻辑是仅当视频源存在等于或小于设定尺寸的轨道时,才会选中符合要求的轨道;如果当前视频流(HLS/DASH等)没有256x144档位的轨道,ExoPlayer会自动向上适配最小的可播放轨道,这是日志中出现更高分辨率的核心原因。
  2. 初始配置未关闭自适应分辨率切换逻辑,网络波动时ExoPlayer会自动切换到更高分辨率的轨道。

修复方案

  1. 首先确认视频流是否包含256x144分辨率的转码档位,没有的话需要先在服务端补全对应分辨率的输出。
  2. 新增关闭自适应切换的配置,锁定分辨率档位,可选补充比特率限制进一步约束。

修复后完整代码

DefaultTrackSelector trackSelector = new DefaultTrackSelector(requireContext());
trackSelector.setParameters(trackSelector
        .buildUponParameters()
        .setMaxVideoSize(256, 144)
        // 关闭视频分辨率自适应切换
        .setAllowVideoResolutionAdaptiveness(false)
        .setAllowVideoMixedMimeTypeAdaptiveness(false)
        .setForceHighestSupportedBitrate(true)
        // 可选配置:如果已知256x144对应的最高比特率,加这行进一步约束,单位为bps
        // .setMaxVideoBitrate(500000)
);
player = new SimpleExoPlayer.Builder(requireContext())
        .setTrackSelector(trackSelector)
        .build();
player.setMediaItem(MediaItem.fromUri(videoUri));
player.setPlayWhenReady(true);
player.prepare();
playerView.setPlayer(player);

内容的提问来源于stack exchange,提问作者Tushar Lathiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:24:03