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

部署在AWS的Kurento WebRTC视频无法播放问题排查求助

Troubleshooting Kurento Media Server Video Playback Issue on AWS

我之前也碰到过类似跨EC2部署Kurento的流媒体问题,结合你的场景,咱们一步步拆解可能漏掉的配置点,逐个排查:


1. 先确认Kurento与Node.js实例的内网连通性

虽然信令层(Node.js和客户端)通信正常,但媒体流的核心是Node.js和Kurento媒体服务器之间的内网交互——这步很容易被忽略。

  • 在Node.js所在的EC2上,用命令测试TCP连通性:
    nc -zv <kurento-ec2-private-ip> 8888
    
    或者telnet <kurento-private-ip> 8888,如果连不上,说明内网通信被阻断(哪怕安全组开了端口,也要检查子网ACL是否放行)。
  • 检查Kurento的配置文件/etc/kurento/kurento.conf.json,确认websocket.server.address设为0.0.0.0或者EC2的内网IP,而不是默认的localhost——不然Kurento只会监听本地,Node.js根本连不上媒体服务。

2. 验证SDP中的ICE候选地址是否正确

客户端能收到sdpAnswer不代表媒体流地址有效,要手动检查SDP内容:

  • 在浏览器控制台打印出sdpAnswer,重点看:
    • c=字段:是否包含Kurento的公网IP或者TURN服务器的公网IP?如果只有内网IP,公网的观看者根本拿不到媒体流。
    • a=candidate条目:有没有包含TURN服务器的候选地址?如果只有STUN的内网候选,跨网传输肯定失败。
  • 要是SDP里全是内网地址,说明Kurento没正确识别自己的公网IP,需要在/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini里手动配置externalAddress为Kurento EC2的公网IP。

3. 检查Kurento媒体端口范围与AWS安全组的匹配性

媒体流主要走UDP,这步是高频坑:

  • Kurento默认用50000-65535范围的UDP/TCP端口传输媒体,你说“所有端口开放”,要确认安全组里真的放行这个完整范围的UDP流量(包括入站和出站)——CloudFormation模板有时候会漏掉UDP规则,或者只开了TCP。
  • 同步检查Kurento配置文件/etc/kurento/kurento.conf.json里的mediaServer.net.udp.portRange,确保和安全组的端口范围完全一致,不然Kurento随机选的端口不在安全组里,媒体流直接被阻断。

4. 深度验证TURN服务器的实际媒体转发能力

Trickle ICE通过只是基础,要测试TURN能不能真的转发媒体:

  • 在本地或者Node.js EC2上用turnutils_uclient工具测试:
    turnutils_uclient -v <turn-public-ip> -u <turn-username> -w <turn-password>
    
    如果返回“Permission denied”或者连接超时,说明TURN的用户名/密码配置错误,或者安全组没放行TURN的端口(默认3478/UDP、443/TCP)。
  • 检查Kurento的TURN配置/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini,确认turnServerUri格式正确:
    turnServerUri=turn:<turn-public-ip>:3478?transport=udp
    turnServerUsername=<your-username>
    turnServerPassword=<your-password>
    

5. 确认Node.js连接Kurento的地址是否合理

  • 一定要让Node.js用Kurento EC2的内网IP连接,而不是公网IP——AWS内网通信更稳定,也避免公网NAT导致的媒体流延迟或阻断。比如Node.js里的连接代码要改成:
    const kurento = kurentoClient.connect('ws://<kurento-private-ip>:8888/kurento');
    
  • 如果Node.js用公网IP连Kurento,哪怕能建立WebSocket连接,媒体流的传输路径也会绕公网,容易出问题。

6. 查日志找具体报错

日志是排查这类问题的核心:

  • Kurento的日志在/var/log/kurento/kurento-media-server.log,搜索ERROR或WARN关键词,比如有没有Failed to create ICE candidate、Connection refused或者媒体流超时的报错。
  • Node.js应用的日志也要留意,有没有Kurento连接断开、媒体管道创建失败的信息,比如KurentoClient: Connection closed unexpectedly。

7. CloudFlare SSL的额外排查

如果用了CloudFlare代理,要注意两个点:

  • 在CloudFlare的“网络”设置里,确认开启了WebSocket支持——默认CloudFlare只放行443端口的WebSocket,要是Kurento用8888端口,需要在CloudFlare的“规则”里添加允许WebSocket的自定义规则。
  • 检查CloudFlare的SSL模式,建议设为“严格”,同时确保后端(Node.js和Kurento)的证书能和CloudFlare兼容,避免SSL握手失败导致WebSocket连接中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:01:05