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

如何读取ExoPlayer当前实际使用的有效分辨率?

ExoPlayer 获取当前实际播放分辨率的方法

ExoPlayer提供了多种方式来获取当前实际使用的视频分辨率,以下是几种常用的实现方案:

  • 监听轨道切换事件获取分辨率
    通过给Player添加Player.Listener,重写onTracksChanged方法来监听轨道变化。当带宽变化导致分辨率降档时,该方法会被触发,你可以从Tracks信息中提取当前选中视频轨道的分辨率:

    player.addListener(new Player.Listener() {
        @Override
        public void onTracksChanged(Tracks tracks) {
            super.onTracksChanged(tracks);
            for (Tracks.Group group : tracks.getGroups()) {
                if (group.getType() == C.TRACK_TYPE_VIDEO && group.isSelected()) {
                    int selectedTrackIndex = group.getSelectedIndex();
                    Format currentFormat = group.getTrackFormat(selectedTrackIndex);
                    // 当前播放的分辨率:currentFormat.width x currentFormat.height
                    break;
                }
            }
        }
    });
    
  • 直接查询当前播放轨道的Format
    随时调用player.getCurrentTracks()获取当前轨道状态,遍历找到视频轨道后提取分辨率:

    Tracks currentTracks = player.getCurrentTracks();
    for (Tracks.Group group : currentTracks.getGroups()) {
        if (group.getType() == C.TRACK_TYPE_VIDEO && group.isSelected()) {
            Format videoFormat = group.getTrackFormat(group.getSelectedIndex());
            String resolution = videoFormat.width + "x" + videoFormat.height;
            // 使用分辨率信息
            break;
        }
    }
    
  • 通过AnalyticsListener监听格式变化
    添加AnalyticsListener并实现onVideoFormatChanged方法,每次视频格式(包括分辨率)更新时会收到回调,直接从Format对象中获取宽高:

    player.addAnalyticsListener(new AnalyticsListener() {
        @Override
        public void onVideoFormatChanged(EventTime eventTime, Format format) {
            super.onVideoFormatChanged(eventTime, format);
            int currentWidth = format.width;
            int currentHeight = format.height;
            // 处理分辨率变更逻辑
        }
    });
    

补充说明

如果需要获取实际显示在屏幕上的分辨率(而非视频原始分辨率,比如存在缩放适配的情况),可以调用player.getVideoSize():

VideoSize displaySize = player.getVideoSize();
int displayWidth = displaySize.width;
int displayHeight = displaySize.height;

内容的提问来源于stack exchange,提问作者Ralf Wickum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:18:16