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

JsSIP调用session.answer后浏览器无法显示视频流问题排查

问题排查与修复方案

针对你遇到的JsSIP视频流无法播放问题,结合代码片段,以下是关键问题和修复建议:

1. 废弃API的使用问题

window.URL.createObjectURL()已被标准废弃,现代浏览器推荐直接使用srcObject属性绑定媒体流。旧方法可能引发兼容性问题,导致视频流无法正常加载。

2. 视频元素缺少必要属性

视频播放需依赖autoplay和playsinline(适配移动端)属性确保自动播放,否则即使流绑定正确,视频也可能处于暂停状态。需在HTML的<video>标签中添加这些属性:

<video id="remoteView" autoplay playsinline></video>
<video id="selfView" autoplay playsinline muted></video> <!-- 本地流建议静音避免回声 -->

3. Track事件处理逻辑优化

简化track事件绑定逻辑,确保流正确赋值并处理播放异常:

修改后的代码示例:

userAgent.on('newRTCSession', function(data) {
  console.log('### newRTCSession', data);
  session = data.session;

  // 统一处理track事件,区分本地/远程流
  session.on('track', function(e) {
    console.log('### session track', e);
    const stream = e.streams[0];
    if (!stream) return;

    if (data.originator === 'remote') {
      remoteView.srcObject = stream;
      // 显式调用play,兼容浏览器自动播放限制
      remoteView.play().catch(err => console.error('远程视频播放失败:', err));
    } else {
      selfView.srcObject = stream;
      selfView.play().catch(err => console.error('本地视频播放失败:', err));
    }
  });

  if (data.originator === 'remote') {
    showIncomingCall();
  }
});

4. 额外检查点

  • 可在session.on('confirmed', () => { ... })中添加流绑定逻辑,确保呼叫完全建立后再处理媒体;
  • 检查浏览器控制台是否存在CSP(内容安全策略)或媒体权限错误,确认摄像头/麦克风权限已正常获取;
  • 本地流添加muted属性,避免回声干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:42:17