将Docker容器部署到Azure容器Web应用后RTMP推流失败求助
解决Azure Web App for Containers部署RTMP流媒体服务器推流失败问题
核心原因
Azure Web App for Containers默认仅代理HTTP/HTTPS协议(80/443端口),RTMP基于TCP协议,无法通过默认配置直接对外暴露,导致推流连接失败。
具体解决方案
1. 启用Web App自定义TCP端口(需高级计划支持)
- 登录Azure门户,进入目标Web App,依次点击 设置 > 配置 > 常规设置
- 在传入端口中添加
1935端口,保存配置 - 同时设置
WEBSITES_PORT环境变量为你的HTTP服务端口(比如3000或8000,Web App依赖HTTP端口做健康检查) - 注意:免费/共享层计划不支持自定义TCP端口,必须升级到S1及以上的高级计划
2. 修正OBS推流地址
推流地址必须使用Web App公网域名+自定义TCP端口,格式如下:
rtmp://{你的应用名称}.azurewebsites.net:1935/live/{你的流密钥}
禁止使用容器内部地址(如rtmp://localhost:1935),必须用公网可访问的域名。
3. 测试端口连通性
- 本地执行命令测试1935端口是否可访问:
telnet 你的应用名称.azurewebsites.net 1935 - 如果连接失败,检查Azure网络防火墙是否允许1935端口的入站TCP流量,或本地网络是否有端口限制
4. 简化node-media-server配置
去掉未使用的集群配置,避免路由错误:
const rtmpConfig = { port: 1935, chunk_size: 60000, gop_cache: true, ping: 10, ping_timeout: 60, // 注释掉以下集群配置(无实际边缘服务器时无需启用) // cluster: { // master: "rtmp://media-server:1935/live", // urls: ["rtmp://media-edge-server:1940/live"], // }, };
确保HTTP服务的端口与WEBSITES_PORT一致:
const PORT = process.env.WEBSITES_PORT || 3000;
5. 验证容器内监听状态
查看Azure容器日志,确认node-media-server已成功监听1935端口:
[NodeMediaServer] RTMP server listening on port 1935
如果日志显示监听正常但外部无法访问,优先检查Web App的自定义端口是否正确配置。
内容的提问来源于stack exchange,提问作者Austin Howard
相关产品推荐
相关产品推荐

