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

尝试创建ChromeCast队列时出现session_error问题求助

解决Cast设备QueueLoadRequest抛出session_error的问题

看起来你在尝试用队列加载带起始时间的媒体时遇到了session创建失败的问题,而直接用LoadRequest却能正常工作。这个坑我之前也踩过,通常是API版本混用或者QueueLoadRequest的必要配置缺失导致的,下面是具体的排查和修复方案:

可能的问题根源

  • 混用了旧版chrome.cast.media API和新版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;
  }
});

关键修复点解释

  1. 统一API版本:全部使用cast.framework.messages下的类(QueueItem、QueueLoadRequest),而不是旧版的chrome.cast.media。新版API和Cast Framework的上下文兼容性更好,不会出现实例不匹配导致的session无效错误。
  2. 补全startIndex参数:QueueLoadRequest必须指定startIndex,这是设备识别播放起始位置的关键,缺失这个参数直接会导致会话创建失败。
  3. 调整QueueItem的赋值方式:新版QueueItem的媒体信息是通过media属性赋值,而不是旧版的构造函数传入,这个细节很容易踩坑。

额外检查项

  • 确认createMediaInfo返回的是cast.framework.messages.MediaInfo,并且contentType是Cast设备支持的格式(比如video/mp4、application/x-mpegURL),格式不对也可能导致加载失败。
  • 检查你的Cast设备固件是否为最新版本,旧固件可能存在队列API的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:51:39