Android TV应用中ExoPlayer设置高分辨率视频无效的问题求助
ExoPlayer 提升视频分辨率无效的解决方法
你的代码问题出在两个关键设置上:
- 同时把
setMinVideoSize和setMaxVideoSize都设为1920x1080,意味着只有流里恰好存在这个分辨率的轨道时,播放器才会选中它,如果流里没有,就会 fallback 到更低分辨率的轨道。 - 设置
minVideoBitrate为Integer.MAX_VALUE,这会过滤掉所有码率低于这个值的轨道——而实际视频码率不可能达到这个数值,等于直接排除了所有可用轨道,播放器只能选默认的低质量轨道。
修正方案
根据你的需求(提升到1080p),分两种场景调整代码:
场景1:优先选择最高不超过1080p的轨道(推荐)
如果想让播放器自动选最高质量且不超过1080p的轨道,去掉极端的码率和最小尺寸限制:
player.setTrackSelectionParameters( player.getTrackSelectionParameters() .buildUpon() .setPreferredAudioLanguages(languages) .setPreferredTextLanguage("ar") // 限制最高分辨率为1080p .setMaxVideoSize(1920, 1080) // 明确指定优先选最高质量轨道(ExoPlayer默认也会优先选,但显式设置更稳妥) .setVideoSelectionMode(C.TRACK_SELECTION_MODE_HIGHEST_QUALITY) .build());
场景2:强制选择1080p轨道(前提是流里存在该轨道)
如果确认视频流里有1920x1080的轨道,只想选这个分辨率,保留尺寸限制但去掉极端码率设置:
player.setTrackSelectionParameters( player.getTrackSelectionParameters() .buildUpon() .setPreferredAudioLanguages(languages) .setPreferredTextLanguage("ar") // 只允许1920x1080的轨道 .setMinVideoSize(1920, 1080) .setMaxVideoSize(1920, 1080) .build());
额外检查点
- 先确认视频流中确实存在1920x1080的轨道:可以通过
player.getCurrentTracks()获取TrackInfo,查看所有可用视频轨道的参数。 - 检查Android TV上的播放视图(TextureView/SurfaceView)尺寸:确保布局中视图设置为
match_parent或合适的尺寸,避免缩放导致视觉上分辨率偏低。 - 升级ExoPlayer到最新稳定版:旧版本可能存在轨道选择参数的处理bug。
内容的提问来源于stack exchange,提问作者Malo
相关产品推荐
相关产品推荐

