Flutter使用Cast插件更新Chromecast曲目元数据遇问题求助
解决Chromecast不重启流更新电台曲目信息的问题
核心问题分析
你之前的尝试存在两个关键错误:
- 使用了错误的消息类型:
EDIT_TRACKS_INFO是用来切换/编辑音轨(如字幕、多语言音频轨道)的,并非用于更新曲目元数据。 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
相关产品推荐
相关产品推荐

