错误视频流socket.io + socket.io-stream(超出最大调用堆栈大小)

时间:2016-02-05 10:52:08

标签: node.js socket.io video-streaming webrtc

我尝试在socket.io和socket.io-stream的帮助下通过我的node.js服务器创建网络摄像头视频流。

我想在/ camera中捕获视频,在视频中通过socket.io(在socket.io-stream的帮助下)打开一个流,然后在索引URL上接收它。

当我连接到服务器槽/摄像头,从而启动流时,服务器崩溃并出现错误" 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();
  };
});




我无法测试服务器/索引上的代码,因为当摄像头启动流时服务器崩溃。

任何人都知道这里有什么问题?

1 个答案:

答案 0 :(得分:2)

不幸的是,你无法做到这一点。 socket.io-stream库仅处理静态文件,但不处理实时视频流。

要分享视频流,您应该使用WebRTC。有几个库可以帮助您入门:

值得注意的是,WebRTC不会通过您的服务器传输视频(在大多数情况下)。它做得更多 - 它直接将视频流从一个对等端传输到另一个对等端,这对您的服务器带宽有利。但是当同伴落后symmetric NAT时可能会出现问题。在这种情况下,视频流应通过TURN服务器传输。

有关WebRTC的更多信息,您可以找到here