簡體   English   中英

node.js 上的視頻聊天應用程序與 webRTC(socket.io)在本地主機上工作正常,但在網絡上出現錯誤

[英]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

git 回購樣本: https://github.com/innovatoraakash/nepflix

前段時間我也遇到過同樣的問題。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM