Я много разбираюсь в этом, но разочарован, поскольку я чувствую, что решение должно быть простым, хотя я знаю, что не буду. В идеале я просто хочу использовать узел для размещения сервера, webrtc getusermedia, чтобы получить прямой эфир на локальном клиенте и использовать что-то вроде socket.io для отправки потока на сервер, а затем сервер будет транслировать поток на удаленный клиент; как если бы это было простое приложение чата для обмена сообщениями.
Просто подумав об этом, еще немного кажется, что это простое было бы невозможно, потому что живое видео требует непрерывных больших объемов данных, которые не будут отправлены на одно сообщение или даже файл после события (кнопка отправки нажата),
Может быть, я ошибаюсь, может ли приложение видеопотока жить по той же структуре приложения node/socket.io messenger? Вы отправили бы медиа-объект, возвращенный из getUserMedia, blob, некоторые двоичные данные каким-то образом (я пробовал все это, но, возможно, не правильно).
Идеальной целью было бы приложение, которое при необходимости использовало бы как можно меньше лишнего пуха, так как небольшие установки для npm, как небольшие дополнительные библиотеки javascript, или немного беспокоиться о кодировании/декодировании или о том, что чертовски ICE или STUN. Есть ли способ, которым это возможно, или я слишком много прошу?
Идеальный клиент
var socket = io();
var local = document.getElementById("local_video");
var remote = document.getElementById("remote_video");
// display local video
navigator.mediaDevices.getUserMedia({video: true, audio: true}).then(function(stream) {
local.src = window.URL.createObjectURL(stream);
socket.emit("stream", stream);
}).catch(function(err){console.log(err);});
// displays remote video
socket.on("stream", function(stream){
remote.src = window.URL.createObjectURL(stream);
});
Идеальный сервер
var app = require("express")();
var http = require("http").Server(app);
var fs = require("fs");
var io = require("socket.io")(http);
app.get('/', onRequest);
http.listen(process.env.PORT || 3000, function() {
console.log('server started');
})
//404 response
function send404(response) {
response.writeHead(404, {"Content-Type" : "text/plain"});
response.write("Error 404: Page not found");
response.end();
}
function onRequest(request, response) {
if(request.method == 'GET' && request.url == '/') {
response.writeHead(200, {"Content-Type" : "text/html"});
fs.createReadStream("./index.html").pipe(response);
} else {
send404(response);
}
}
io.on('connection', function(socket) {
console.log("a user connected");
socket.on('stream', function(stream) {
socket.broadcast.emit("stream", stream);
});
socket.on('disconnect', function () {
console.log("user disconnected");
});
});
Это нарушенное приложение в действии: https://nodejs-videochat.herokuapp.com/
Это сломанный код на github: https://github.com/joshydotpoo/nodejs-videochat