видео + аудио чат в реальном времени с использованием сокета io in node js - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь создать видео + аудио чат в реальном времени и хочу использовать клиент-серверный подход, а не одноранговый (в образовательных целях). Теперь я могу транслировать только видео, используя код ниже. Я хочу использовать тот же подход для отправки аудио на мой сервер с использованием сокетов, а затем отправлять их на все подключенные сокеты. Может быть, библиотека socket.io-stream может помочь, если да, то как я могу легко внедрить ее в мой код ниже? Или есть лучшее решение? Спасибо.

Дэвид

// client code 

let socket = io.connect(window.location.origin);

const video = document.querySelector('video');
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = document.querySelector('img');
const audiodata = document.querySelector("audio");


navigator.mediaDevices.getUserMedia({ video : true, audio : true })
.then(function(stream) {
    video.srcObject = stream;
    setInterval(function() {
        canvas.width = video.videoWidth;
        canvas.height = video.videoHeight;
        ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
        const imageData = canvas.toDataURL("image/jpeg", 0.4);
        socket.emit('sendImage', { image : imageData });
    }, 100);
}).catch(error => console.error(error));

socket.on("getImage", function(data){
    img.src = data.image;
})

// server code

let express = require("express");
let socket = require("socket.io");

const port = process.env.PORT || 3000
let app = express();

// static files
app.use(express.static("public"));

let server = app.listen(port, function() {
    console.debug(`listenning on port ${port}`);
})

// socket setup

let io = socket(server);

io.on("connection", function(socket){
    console.debug(`made socket connection with id ${socket.id}`);

    socket.on("sendImage", function(data){
        socket.broadcast.emit("getImage", data);
    });
});
...