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

WebRTC无法连接本地Node.js服务器,远程流不显示问题排查

问题排查与解决方案

核心问题分析

你遇到的问题根源是HTTPS前端页面加载HTTP协议的Socket.IO服务导致的混合内容拦截,同时Socket.IO服务器未配置跨域支持、未适配SSL环境,最终引发远程流无法加载。


具体修复步骤

1. 解决混合内容拦截

当前前端部署在HTTPS的IIS上,但site.js中硬编码了HTTP的Socket.IO地址,浏览器会自动拦截HTTPS页面中的HTTP请求。修改site.js中的Socket.IO连接代码,改用相对路径自动适配当前协议:

// 替换原硬编码地址,使用相对路径适配HTTP/HTTPS
const socket = io({transports: ['websocket']});

2. 为Node.js服务器配置SSL

将Socket.IO服务器升级为HTTPS,使用你的SSL证书(可复用IIS的证书文件),修改Node.js服务器代码:

const express = require('express');
const socketio = require('socket.io');
const https = require('https');
const fs = require('fs');
const path = require('path'); // 补充缺失的path模块

// 加载SSL证书(替换为你的证书实际路径)
const sslOptions = {
  key: fs.readFileSync('C:/Certificates/private.key'),
  cert: fs.readFileSync('C:/Certificates/certificate.crt')
};

const app = express();
// 改用HTTPS服务器
const server = https.createServer(sslOptions, app);

app.use(express.static('public'));

// 配置Socket.IO跨域支持,允许前端域名/IP访问
const io = socketio(server, {
  cors: {
    origin: "*", // 生产环境建议指定具体域名,如"https://your-iis-domain.com"
    methods: ["GET", "POST"]
  }
});

// 剩余Socket.IO逻辑保持不变...

// 修复首页路由的路径问题(原代码未引入path模块)
app.get('/', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'public', 'index.html'));
});

server.listen(process.env.PORT || 3000, () => 
  console.log('HTTPS Server Listen On: *:', process.env.PORT || 3000)
);

3. 优化ICE服务器配置

仅使用STUN服务器无法穿透对称NAT环境,建议添加TURN服务器(可自行搭建coturn),增强网络兼容性:

var pcConfig = {
  'iceServers': [
    {
      'urls': 'stun:stun.l.google.com:19302'
    },
    {
      'urls': 'turn:your-turn-server-ip:3478',
      'username': 'turn-username',
      'credential': 'turn-password'
    }
  ]
};

验证流程

  1. 重启配置好SSL的Node.js服务器
  2. 通过IIS的HTTPS地址(如https://192.168.1.217)访问前端
  3. 打开浏览器控制台,确认Socket.IO连接成功无报错
  4. 测试多设备间的远程流传输

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:44:54