[英]video chat application on node.js with webRTC( socket.io) works fine on localhost but gives error on network
我正在使用 WebRTC(socket.io)在 node.js 上制作視頻聊天應用程序。 此應用程序在 localhost 上運行良好,但在使用我的 IP 地址在我的網絡上運行時出錯。 另外,我在 Heroku 上嘗試過,但錯誤仍然相同
只有我的服務器頂部看起來像
const express = require("express");
const socket = require("socket.io");
const app = express();
//Starts the server
let server = app.listen(process.env.PORT||4000, function () {
console.log("Server is running");
});
app.use(express.static(__dirname+"/public"));
//Upgrades the server to accept websockets.
let io = socket(server);
//Triggered when a client is connected.
io.on("connection", function (socket) {
console.log("User Connected :" + socket.id);
客戶端的頂部是
let socket = io.connect("//192.168.1.73:4000");
let divVideoChatLobby = document.getElementById("video-chat-lobby");
let divVideoChat = document.getElementById("video-chat-room");
let joinButton = document.getElementById("join");
let userVideo = document.getElementById("user-video");
let peerVideo = document.getElementById("peer-video");
let roomInput = document.getElementById("roomName");
let roomName;
let creator = false;
let rtcPeerConnection;
let userStream;
// Contains the stun server URL we will be using.
let iceServers = {
iceServers: [
{ urls: "stun:stun.services.mozilla.com"},
{ urls: "stun:stun.l.google.com:19302"},
],
};
在 192.168.1.73:4000 上運行的服務器上運行時出錯是
chat.js:37 Uncaught TypeError: Cannot read property 'getUserMedia' of undefined
at f.<anonymous> (chat.js:37)
at f.r.emit (socket.io-3.0.1.min.js:6)
at f.value (socket.io-3.0.1.min.js:6)
at f.value (socket.io-3.0.1.min.js:6)
at f.value (socket.io-3.0.1.min.js:6)
at b.<anonymous> (socket.io-3.0.1.min.js:6)
at b.r.emit (socket.io-3.0.1.min.js:6)
at b.value (socket.io-3.0.1.min.js:6)
at n.<anonymous> (socket.io-3.0.1.min.js:6)
at n.r.emit (socket.io-3.0.1.min.js:6)
(anonymous) @ chat.js:37
r.emit @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
(anonymous) @ socket.io-3.0.1.min.js:6
r.emit @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
(anonymous) @ socket.io-3.0.1.min.js:6
r.emit @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
(anonymous) @ socket.io-3.0.1.min.js:6
r.emit @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
(anonymous) @ socket.io-3.0.1.min.js:6
r.emit @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
value @ socket.io-3.0.1.min.js:6
ws.onmessage @ socket.io-3.0.1.min.js:6
在 Heroku 錯誤看起來像
在 Chrome 上獲取https://projectnepflix.herokuapp.com:4000/socket.io/?EIO=4&transport=polling&t=NVEwhoG net::ERR_CONNECTION_TIMED_OUT
前段時間我也遇到過同樣的問題。
getUserMedia 文檔中的此注釋描述了您在服務器上出現問題的原因:
注意:如果當前文檔沒有安全加載,navigator.mediaDevices 將是未定義的,並且您不能使用 getUserMedia()。 有關此問題以及與使用 getUserMedia() 相關的其他安全問題的更多信息,請參閱安全性
這意味着,您已經使用 HTTPS 運行了您的應用程序(除非您是本地主機),否則navigator.mediaDevices
將如上所述未定義,因此當您嘗試調用navigator.mediaDevices.getUserMedia
時它會崩潰。
很難通過我的網絡公開我的 IP HTTPS 所以我改變了
let socket = io.connect("//192.168.1.73:4000");
符合
var socket = io.connect(window.location.href);
這就是 Heroku 中出現錯誤的原因,我在 Heroku 上進行了精細測試,因為它在 https 上運行,因此 navigator.mediaDevices.getUserMedi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.