RTC 或浏览器连接失败
WHIP/WHEP 返回成功只表示信令交换完成,媒体仍需通过 ICE 建立。按安全上下文、会话、SDP、ICE、媒体与清理六层检查。
flowchart LR
A[HTTPS 与权限] --> B[房间与成员]
B --> C[WHIP/WHEP SDP]
C --> D[ICE / TURN]
D --> E[真实媒体]
E --> F[离开与资源释放]
1. 浏览器安全上下文
- 页面使用有效 HTTPS,域名与证书匹配。
- 浏览器已授予摄像头/麦克风权限。
- 没有混合内容或被企业策略阻止的设备访问。
- 查看 Console、Network 和
webrtc-internals。
2. 房间与成员
- Room 存在且未达到容量。
- Participant 身份、角色和心跳有效。
- 发布/订阅目标正确。
- 页面刷新后没有残留同一 participant 的旧会话。
3. WHIP/WHEP 与 SDP
请求/响应 Content-Type 应为 application/sdp。确认 Offer/Answer 中:
- 音视频 m-line 未被意外拒绝;
- codec 双方有交集;
- direction 符合发布或订阅;
- fingerprint 与 DTLS 正常;
- candidate 没有被代理或序列化破坏;
- Location/ETag 和会话 ID 被保存。
4. ICE 与网络
观察 ICE gathering、checking、connected/failed 状态和选中的 candidate pair:
- 局域网成功、公网失败:检查 external IP、NAT 映射与 STUN。
- 对称 NAT 失败:部署并验证 TURN relay。
- UDP 禁用失败:提供 TCP/TLS TURN。
- 多网卡:删除或降低不可达 candidate 的优先级。
- TURN 认证失败:检查临时凭据有效期、时钟和 realm。
HTTPS 反向代理不能转发所有 ICE 媒体端口。
5. 有连接但无媒体
- 发布轨道是否实际发送,浏览器是否静音。
- codec、分辨率、码率和方向是否协商。
- MediaServer 是否建立对应 MediaSession 与流。
- 订阅拓扑是否指向正确 publisher。
- 有画面无声音时检查音频权限、m-line 和 codec。
6. 重连与释放
页面关闭、成员离开或超时后应释放媒体会话。重连前查询旧 session,按服务端实际标识释放,再创建新会话。持续增长的 ReleaseFailed/Unreleasable 必须告警。
提交故障证据
提供浏览器及版本、网络类型、房间/成员/会话 ID、Offer/Answer 脱敏摘要、ICE 状态、选中 candidate 类型、MediaServer 日志和故障时间。不要提交 TURN 长期秘密或完整登录凭据。
恢复判据
在局域网和目标公网环境分别完成发布、订阅、断网重连和离开清理;连续多次刷新不产生重复成员或泄漏会话。