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

Media3 ExoPlayer getMediaMetadata()无法获取正确歌曲元数据

在线电台ExoPlayer获取歌曲标题解决方案

在线电台的歌曲元数据大多通过**ICY协议(Shoutcast/Icecast)**动态推送,和本地媒体文件的静态元数据逻辑不同,你之前依赖onMediaMetadataChanged获取的是媒体文件的静态元数据,而实时歌曲信息需要通过专门的ICY元数据监听来获取。以下是具体解决步骤:

1. 配置支持ICY元数据的数据源工厂

替换原有的播放器初始化代码,显式开启ExoPlayer对ICY元数据的解析:

// 创建支持ICY元数据的Http数据源工厂
HttpDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory()
        .setAllowCrossProtocolRedirects(true)
        // 监听电台基本信息(可选)
        .setIcyHeadersListener(icyHeaders -> {
            String stationName = icyHeaders.getName();
            String genre = icyHeaders.getGenre();
        })
        // 监听实时更新的歌曲元数据
        .setIcyMetadataListener((metadata, durationMs) -> {
            String streamTitle = metadata.getStreamTitle();
            if (streamTitle != null && !streamTitle.isEmpty()) {
                // 多数电台的streamTitle格式为 "艺术家 - 歌曲名",可按需拆分
                String[] titleParts = streamTitle.split(" - ", 2);
                if (titleParts.length == 2) {
                    String artist = titleParts[0];
                    String songTitle = titleParts[1];
                    viewSong.setText(songTitle);
                    // 可额外处理艺术家信息
                } else {
                    viewSong.setText(streamTitle);
                }
            }
        });

// 初始化播放器时绑定自定义数据源工厂
player = new ExoPlayer.Builder(this)
        .setMediaSourceFactory(new ProgressiveMediaSource.Factory(dataSourceFactory))
        .build();

MediaItem mediaItem = MediaItem.fromUri(link);
player.setMediaItem(mediaItem);
player.prepare();
player.play();

2. 关键逻辑说明

  • 放弃依赖Player.Listener的onMediaMetadataChanged回调:该回调仅针对静态媒体文件的元数据,无法获取电台实时推送的歌曲信息。
  • 启用setIcyMetadataListener:直接监听ICY协议推送的实时元数据,这也是VLC能正常获取歌曲信息的核心逻辑。
  • 适配不同元数据格式:部分电台的streamTitle格式可能不统一,可根据实际返回值调整拆分逻辑,或直接显示完整标题。

3. 额外检查点

  • 确认电台链接支持ICY元数据:部分低版本电台可能未开启该功能,可换用已知支持的测试链接验证。
  • 确保依赖版本正确:使用最新版ExoPlayer(建议2.18+),旧版本可能存在ICY解析兼容性问题。

内容的提问来源于stack exchange,提问作者Z Ivanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:52:31