尝试创建ChromeCast队列时出现session_error问题求助
解决Cast设备QueueLoadRequest抛出session_error的问题
看起来你在尝试用队列加载带起始时间的媒体时遇到了session创建失败的问题,而直接用LoadRequest却能正常工作。这个坑我之前也踩过,通常是API版本混用或者QueueLoadRequest的必要配置缺失导致的,下面是具体的排查和修复方案:
可能的问题根源
- 混用了旧版
chrome.cast.mediaAPI和新版Cast Framework的API,导致实例不兼容,Cast设备无法识别请求 - QueueLoadRequest缺少
startIndex这个必填参数,设备不知道该从队列的哪个项目开始播放 - 旧版QueueItem的初始化方式和新版框架不匹配
修复后的完整代码
直接上修正后的代码,我已经把API统一成新版Cast Framework的规范,并且补全了必要配置:
const context = cast.framework.CastContext.getInstance(); const {SESSION_STATE_CHANGED} = cast.framework.CastContextEventType; // 发起会话请求 context.requestSession(); context.addEventListener(SESSION_STATE_CHANGED, (event) => { switch (event.sessionState) { case cast.framework.SessionState.SESSION_STARTED: const castSession = context.getCurrentSession(); if (!castSession) return; // 防御性检查,避免空指针 // 先确保你的createMediaInfo返回的是cast.framework.messages.MediaInfo实例 const mediaInfo = createMediaInfo(source); // 用新版的QueueItem类,不要用chrome.cast.media下的旧版 const queueItem = new cast.framework.messages.QueueItem(); queueItem.media = mediaInfo; queueItem.startTime = 50; // 起始时间单位是秒,这里设置为50秒 const itemsToAdd = [queueItem]; // 创建QueueLoadRequest并补全必填参数 const request = new cast.framework.messages.QueueLoadRequest(); request.items = itemsToAdd; request.startIndex = 0; // 必须指定从队列第0项开始播放,否则会报错 // 加载队列媒体 castSession.loadMedia(request) .then(() => console.log("队列加载成功,已从50秒开始播放")) .catch((error) => console.error("队列加载失败:", error)); break; case cast.framework.SessionState.SESSION_RESUMED: // 这里放你的UI更新逻辑,比如显示已恢复会话 break; case cast.framework.SessionState.SESSION_ENDED: // 这里放会话结束后的UI处理,比如隐藏投屏按钮 break; } });
关键修复点解释
- 统一API版本:全部使用
cast.framework.messages下的类(QueueItem、QueueLoadRequest),而不是旧版的chrome.cast.media。新版API和Cast Framework的上下文兼容性更好,不会出现实例不匹配导致的session无效错误。 - 补全startIndex参数:QueueLoadRequest必须指定
startIndex,这是设备识别播放起始位置的关键,缺失这个参数直接会导致会话创建失败。 - 调整QueueItem的赋值方式:新版QueueItem的媒体信息是通过
media属性赋值,而不是旧版的构造函数传入,这个细节很容易踩坑。
额外检查项
- 确认
createMediaInfo返回的是cast.framework.messages.MediaInfo,并且contentType是Cast设备支持的格式(比如video/mp4、application/x-mpegURL),格式不对也可能导致加载失败。 - 检查你的Cast设备固件是否为最新版本,旧固件可能存在队列API的兼容性问题。
内容的提问来源于stack exchange,提问作者Endless
相关产品推荐
相关产品推荐

