Ubuntu部署owt-server后使用owt-client-javascript无法发布本地流
本地流无法发布的异常根因与排查方案
根本原因
- 从ICE状态流转日志
checking → disconnected、remoteStream对象的stream: undefined、空候选日志可以判断,问题并非出在conference.publish()的接口逻辑本身,而是WebRTC底层媒体链路的ICE连通性握手完全失败,导致publish流程的信令等待全程挂起,没有触发Promise的resolve或reject回调。 - 抓取到的remoteStream实例中
_trackId: undefined、stream: undefined的属性状态也佐证:服务端虽然提前创建了会议公共混合流的占位资源对象,但因为ICE链路未打通,没有将真实媒体轨道绑定到该占位对象上,自然无法返回发布成功的回调。
分层排查解决路径
1. 核对OWT服务端ICE配置
- 检查Conference服务配置中,向客户端返回的ICE候选地址对应的公网IP配置:默认配置下服务端会返回主机绑定的内网私网IP,若客户端与服务端不在同一内网,将完全无法连通这些内网候选地址。
- 核对网关配置文件中的
publicIP字段,必须设置为OWT服务对外可访问的真实公网IP,不能使用本地环回地址或内网网卡地址。 - 检查集成的coturn TURN服务运行状态:若TURN服务未正确配置内外网映射,客户端仅能收集到本地局域网候选地址,公网场景下ICE连通性检查包无法送达,会直接从checking状态跳转到disconnected。
2. 检查端口放行规则
- 确认防火墙已放行OWT默认使用的UDP媒体端口段(默认配置为10000-60000),以及对应信令服务的访问端口;多数部署场景仅开放了HTTPS信令端口,未放行UDP媒体端口,会直接拦截ICE连通性探测包。
- 检查Ubuntu主机本地的ufw、iptables规则,确认未拦截UDP类型的连通性探测流量。
3. 排查浏览器端运行环境问题
- 确认OWT的Web页面通过HTTPS(或localhost)域名访问:若为HTTP方式访问,浏览器会限制WebRTC的UDP传输通道,仅保留TCP传输通道,多数网络环境下TCP的ICE连接会被拦截,直接触发ICE disconnected状态。
- 打开浏览器内置的
chrome://webrtc-internals页面,核查ICE候选收集结果:若收集到的候选地址全为本地局域网地址,不存在服务端返回的服务器反射地址、中继地址,可直接定位为STUN/TURN配置失效。
4. 校验业务流程的逻辑匹配
- 日志中出现的两次
Remote stream added事件,是服务端提前推送的会议公共混合流占位事件,并非本地流发布成功的触发回调,不能将该事件作为发布流程完成的判断依据。 - 可在
conference.publish()的调用逻辑中补充超时捕获逻辑:当前场景下ICE流程无超时返回导致Promise全程挂起,可设置15s超时判断,超时后主动打印当前ICE状态,快速定位流程卡点。
内容的提问来源于stack exchange,提问作者Faheem Shah
相关产品推荐
相关产品推荐

