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

ICE交换后WebRTC连接失败,视频无法显示求助

排查WebRTC连接失败步骤

1. SDP交换完整性与正确性检查

  • 确认ROS传输的SDP无截断:检查ROS消息 payload 容量是否足够,避免丢失a=ice-ufrag、a=ice-pwd等关键字段
  • 验证媒体编码匹配:对比两端SDP的m=video段,确保aiortc服务端生成的编码(如VP8、H.264)被Web客户端支持
  • 检查c=字段:局域网环境下SDP应使用本地IP(如192.168.x.x),而非0.0.0.0或公网IP,保证地址可解析

2. ICE候选处理逻辑验证

  • 确认ICE候选收发时机:需在SDP交换完成后实时发送所有本地候选,避免遗漏导致连通失败
  • 筛选有效候选:局域网内优先使用host类型候选(本地IP+端口),禁用不必要的STUN/TURN配置
  • 验证候选添加逻辑:
    • 服务端需确保收到ROS消息后调用pc.addIceCandidate(candidate)
    • Web客户端需通过pc.addIceCandidate(new RTCIceCandidate(candidate))正确添加候选

3. ROS消息可靠性排查

  • 检查消息完整性:在两端添加日志,记录SDP/ICE消息的收发时间与内容哈希,对比是否一致
  • 验证序列化格式:SDP以纯字符串传输,ICE候选需用JSON格式,确保两端解析无格式错误(如引号转义、字段大小写不匹配)
  • 确认ROS节点状态:用rosnode list和rostopic echo命令验证话题通信正常,无节点失联

4. 代码关键逻辑审查

服务端(aiortc)常见问题

  • 简化PeerConnection配置:局域网无需STUN,直接创建实例
    pc = RTCPeerConnection()  # 不传入iceServers参数,默认使用本地候选
    
  • 确保视频流添加时机:在创建offer/answer前将视频轨道加入PeerConnection,保证SDP包含媒体流信息
  • 监听ICE状态:添加日志跟踪iceconnectionstatechange事件,确认状态流转(如new→checking→connected)

Web客户端常见问题

  • 确认媒体权限:确保getUserMedia调用成功,已获取摄像头权限并将视频轨道加入PeerConnection
  • 添加状态监听代码:
    pc.oniceconnectionstatechange = () => {
      console.log('ICE连接状态:', pc.iceConnectionState);
    };
    pc.ontrack = (event) => {
      console.log('收到视频轨道:', event.track);
      document.getElementById('video').srcObject = event.streams[0];
    };
    

5. 网络连通性测试

  • 直接测试端口连通:用telnet <对方IP> <端口>或nc -zv <对方IP> <端口>验证ICE候选中的端口可访问
  • 确认局域网配置:确保两端在同一子网,无VLAN隔离,能互相ping通

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:52:44