Я пытаюсь создать видео + аудио чат в реальном времени и хочу использовать клиент-серверный подход, а не одноранговый (в образовательных целях). Теперь я могу транслировать только видео, используя код ниже. Я хочу использовать тот же подход для отправки аудио на мой сервер с использованием сокетов, а затем отправлять их на все подключенные сокеты. Может быть, библиотека 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);
});
});