【问题标题】:emitting both webcam stream and chat to specific room using socket.io nodejs使用 socket.io nodejs 将网络摄像头流和聊天发送到特定房间
【发布时间】:2020-07-17 10:42:10
【问题描述】:

我已经成功地使用 node.js 和 socket.io 同时实现了流式网络摄像头和聊天,我有一个为发起流的人提供的 emit.html 页面,以及一个为客户端或接收者提供的可视化.html 页面,但是我在将网络摄像头流附加到管理员创建的唯一房间时遇到了挑战,请问我怎样才能将网络摄像头仅发送到特定房间。 这是我下面的服务器代码

const express = require("express");
const app = new express();
const http = require("http").Server(app);
const io = require("socket.io")(http);
const formatMessage = require("./utils/messages");
const {
   userJoin,
   getCurrentUser,
   userLeave,
   getRoomUsers,
 } = require("./utils/users");

 const port = process.env.PORT || 3000;

 app.use(express.static(__dirname + "/public"));

 const botName = "Admin";

 app.get("/", function (req, res) {
 res.redirect("index.html");
});

io.on("connection", function (socket) {
socket.on("stream", function (image) {
socket.broadcast.emit("stream", image);
});

//Join Room
socket.on("joinRoom", ({ username, room }) => {
const user = userJoin(socket.id, username, room);

socket.join(user.room);

// Welcome current user
socket.emit("message", formatMessage(botName, "Welcome to Class!"));

// Broadcast when a user connects
socket.broadcast
  .to(user.room)
  .emit(
    "message",
    formatMessage(botName, `${user.username} has joined the class`)
  );

  // Send users and room info
  io.to(user.room).emit("roomUsers", {
    room: user.room,
    users: getRoomUsers(user.room),
  });
});

// Listen for chatMessage
socket.on("chatMessage", (msg) => {
  const user = getCurrentUser(socket.id);

  io.to(user.room).emit("message", formatMessage(user.username, msg));
});

// Runs when client disconnects
socket.on("disconnect", () => {
const user = userLeave(socket.id);

if (user) {
  io.to(user.room).emit(
    "message",
    formatMessage(botName, `${user.username} has left the class`)
  );

  // Send users and room info
  io.to(user.room).emit("roomUsers", {
    room: user.room,
    users: getRoomUsers(user.room),
  });
 }
});
});
http.listen(port, () => console.log(`Server running on port ${port}`));

请查看完整项目的 git 存储库,我不介意进行任何调整以使其更好。 https://github.com/timotech/screen-cast 谢谢

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    我能够通过将流套接字添加到 joinRoom 套接字来解决问题 这是代码的调整:

    socket.on("joinRoom", ({ username, room }) => {
    const user = userJoin(socket.id, username, room);
    
    socket.join(user.room);
    
    //Display webcam to user
    socket.on("stream", function (image) {
      socket.broadcast.to(user.room).emit("stream", image);
    });
    …
    

    现在一切都按预期进行。但我现在面临的唯一挑战是我将它托管在 Heroku 上,但它没有按预期工作。

    这是 Heroku 主机的链接。 教师:https://screencastst.herokuapp.com/ 学生访问:https://screencastst.herokuapp.com/students.html

    教师是唯一可以使用摄像头的人,这就是为什么教师有不同的链接,学生只能看到正在上课的教师,这也是链接不同的原因 但是聊天不起作用,这就是我现在面临的挑战。但在本地主机上完美运行 谢谢

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 2011-09-28
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多