Flux Vidéo en direct sur un Node.js Serveur
J'ai fait des recherches beaucoup cela, mais je suis frustré car j'ai l'impression que la solution devrait être simple si je sais que l'habitude de l'être. Idéalement, j'avais juste envie d'utiliser un nœud d'hôte du serveur, webrtc getusermedia pour obtenir le flux en direct sur le client local et d'utiliser quelque chose comme support.io pour envoyer le flux de données au serveur et le serveur de diffusion du flux pour le client distant, comme si c'était une simple messagerie chat app.
Il suffit de penser à propos de ce peu plus, il me semble que l'approche de cette simple serait impossible en raison d'une vidéo en direct nécessite continu de grandes quantités de données, ce qui n'équivaut pas à l'envoi d'un simple message ou encore de fichiers après un événement (envoyer enfoncé).
Peut-être que je me trompe mais, peut un flux vidéo en direct de l'app suivre la même structure d'un nœud/socket.io application messenger? Souhaitez-vous envoyer les médias objet renvoyé de getUserMedia, la goutte, des données binaires d'une façon (j'ai essayé toutes ces mais peut-être pas correctement).
L'objectif idéal serait une application qui utilise peu de supplémentaire peluches que nécessaire, aussi peu mnp installe, comme petit plus des bibliothèques javascript, ou peu s'inquiéter de l'encodage/décodage ou quel que soit l'enfer de GLACE ou d'ÉTOURDISSEMENT. Est-il de toute façon c'est possible ou suis-je trop demander?
Client Idéal
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);
});
Serveur Idéal
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");
});
});
C'est le cassé application en action : https://nodejs-videochat.herokuapp.com/
C'est cassé le code sur github: https://github.com/joshydotpoo/nodejs-videochat
à partir de ce que je suis à voir sur le github lien que vous avez posté, c'est pour la capture d'une image unique à partir d'une vidéo et en tournant dans une vidéo? aussi, même, qui utilise un fichier cpp, mais peut-être que c'est juste pour qu'il fonctionne avec les autochtones de caméras et pas seulement en utilisant webrtc trucs...je suis vraiment essayer de garder cela simple
OriginalL'auteur joshy.poo | 2017-03-15
Vous devez vous connecter pour publier un commentaire.
Essayer d'être clair et précis.
Tout d'abord, vous n'êtes pas en utilisant WebRTC ici. getUserMedia() est une partie de navigator WebAPI qui vous aide à obtenir des flux de données multimédia à partir de l'appareil photo.
Utilisant WebRTC signifie que vous êtes en utilisant de la GLACE et de STUN/TURN serveurs pour le but de la signalisation. Vous allez utiliser votre hôte serveur(Nœud) pour la spécification de la GLACE de configuration, d'identifier chaque utilisateur et de fournir un moyen d'appeler les uns les autres.
Si vous souhaitez les diffuser par le biais de votre hôte, vous devriez probablement en streaming en morceaux et mettre en place votre propre infrastructure de signalisation. Vous pouvez utiliser le volet de l'API socket io de flux de données en morceaux(paquets). Voir ici Flux API(socket.io)
Aussi, vous pouvez consulter l'exemple vivant de WebRTC + Socket.io ici: Socket.io | WebRTC Chat Vidéo
Vous pouvez trouver plus d'informations ici: l'envoi d'un flux de données multimédia au serveur Hôte
question de suivi, en la diffusant en morceaux entendez-vous l'envoi de segments d'une vidéo en direct à un moment, presque comme l'enregistrement d'une partie d'une vidéo et de les envoyer et de les afficher que tandis que l'autre "partie" est "enregistré". désolé im juste essayer de comprendre les bases
Oui, il peut être utilisé pour la signalisation et vous pouvez faire simple texte sur le chat app très facilement à l'aide de ce. Vous pouvez voir ici lien
Oui je sais j'en ai fait une moi-même et c'est très joli si je dis moi-même, 😉 , mais ce que je voulais dire, c'est puis-je contourner avoir à utiliser de la GLACE configurations (et autres) en utilisant un socket.io que mon serveur signalisation à la place. et quelles sont les données que j'ai fait envoyer (objet de flux de données, blob, ect)?
J'ai révisé ma réponse. Oui, chunk moyen d'un paquet de données, Flux API fournit pipe mécanisme pour effectuer le même. Je n'ai pas utilisé de socket.io pour le streaming vidéo, ne peut donc pas vous aider avec la mise en œuvre!
OriginalL'auteur Gaurav Chaudhary