错误videostreamsocket.io + socket.iostream(超过最大调用堆栈大小)

我试图通过socket.io和socket.io-stream帮助创build一个摄像头videostream通过我的node.js服务器。

我想在/ camera中捕捉video,用video打开一个stream槽socket.io(在socket.io-stream的帮助下),并在索引url上接收它。

当我连接到服务器槽/相机,并因此启动stream,服务器崩溃的错误“RangeError:最大调用堆栈大小超过”。

错误似乎来自“/node_modules/socket.io/node_modules/has-binary/index.js:48:23”。

在示例中,我省去了大部分的任意代码,因为服务器/连接在传输数据snippits时工作正常。

这是我目前的设置:

服务器:

io.on('connection', function(socket) { ioStream(socket).on('videoStream', function(stream, data) { socket.broadcast.emit('videoStream', stream); }); }); 

相机

 window.glob_socket = io(); var video = document.getElementById('camera'); navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; if (navigator.getUserMedia) { navigator.getUserMedia({ audio: false, video: { width: 320, height: 240 } }, function(videoStream) { // Local preview video.src = window.URL.createObjectURL(videoStream); video.onloadedmetadata = function(e) { video.play(); }; // Stream var stream = ss.createStream(); ss(glob_socket).emit('videoStream', stream, videoStream); fs.createReadStream(videoStream).pipe(stream); }, function(err) { console.log("The following error occurred: " + err.name); }); } else { console.log("getUserMedia not supported"); } 

指数

 var video = document.getElementById('camera'); ss(glob_socket).on('videoStream', function(stream) { video.src = window.URL.createObjectURL(stream); video.onloadedmetadata = function(e) { video.play(); }; }); 

我无法testing服务器/索引上的代码,因为相机启动stream时服务器崩溃。

任何人有一个想法这里有什么问题?

不幸的是,你不能这样做。 socket.io-stream库只处理静态文件,而不处理实时videostream。

要分享videostream,你应该使用WebRTC。 有几个图书馆可以帮助你开始:

值得注意的是,WebRTC不会通过你的服务器传输video(在大多数情况下)。 它做的更多 – 它将videostream从一个对端直接传输到另一个,这对您的服务器的带宽是有好处的。 但是当对等体位于对称NAT之后时可能会出现问题。 在这种情况下,videostream应该通过TURN服务器传输。

有关WebRTC的更多信息,请点击这里 。