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

Flutter使用Cast插件更新Chromecast曲目元数据遇问题求助

解决Chromecast不重启流更新电台曲目信息的问题

核心问题分析

你之前的尝试存在两个关键错误:

  1. 使用了错误的消息类型:EDIT_TRACKS_INFO是用来切换/编辑音轨(如字幕、多语言音频轨道)的,并非用于更新曲目元数据。
  2. mediaSessionId无效:报错INVALID_MEDIA_SESSION_ID说明你使用的会话ID已经过期或未正确获取当前活跃的会话ID。

正确解决方案

步骤1:获取并维护有效的mediaSessionId

首次加载电台流后,必须从CastSession的实时回调中获取当前活跃的会话ID,不能依赖缓存值:

_session!.addListener(() {
  if (_session!.mediaStatus != null) {
    // 实时更新当前有效的mediaSessionId
    _mediaSessionId = _session!.mediaStatus!['mediaSessionId'];
  }
});

步骤2:通过LOAD请求更新元数据(不中断流)

对于网络电台这类直播流,Chromecast允许通过重复发送LOAD请求更新元数据,且不会中断当前播放。构造以下消息发送:

final updateMessage = {
  'type': 'LOAD',
  'mediaSessionId': _mediaSessionId, // 确保是当前有效的会话ID
  'media': {
    'contentId': '你的电台流URL', // 和初始播放的URL完全一致
    'streamType': 'LIVE', // 必须设置为LIVE,避免流中断
    'contentType': 'audio/mpeg', // 匹配你的电台音频格式
    'metadata': {
      'type': 'MUSIC_TRACK',
      'metadataType': 3, // MUSIC_TRACK对应的固定类型值
      'title': '新曲目名称',
      'artist': '艺术家名称',
      'albumName': '专辑名称',
      'images': [
        {'url': '曲目封面图片URL'}
      ]
    }
  },
  'autoplay': true,
  'currentTime': _session!.mediaStatus!['currentTime'] // 保持当前播放进度
};

_session!.sendMessage(CastSession.kNamespaceMedia, updateMessage);

额外提示

  • 所有Cast插件的消息格式都遵循Google Cast官方的媒体命名空间规范,你可以参考官方文档确认参数细节。
  • 若仍出现问题,可先通过发送GET_STATUS请求获取当前媒体会话的完整状态,确认mediaSessionId和其他参数的有效性:
final statusRequest = {
  'type': 'GET_STATUS',
  'mediaSessionId': _mediaSessionId
};
_session!.sendMessage(CastSession.kNamespaceMedia, statusRequest);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:10:15