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

Error video-stream socket.io + socket.io-stream (Maximum call stack size exceeded)

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

我想在 /camera 中捕获视频,用视频打开一个流槽 socket.io(在 socket.io-stream 的帮助下),并在索引 [=71 上接收它=].

当我通过 /camera 连接到服务器并因此启动流时,服务器崩溃并出现错误 "RangeError: Maximum call stack size exceeded"。

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

在示例中,我省略了大部分任意代码,因为 server/connection 可以很好地传输数据片段。

这是我当前的设置:

服务器:

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();
  };
});

我无法在 server/index 上测试代码,因为当相机启动流时服务器崩溃。

有人知道这里出了什么问题吗?

很遗憾,您不能那样做。 socket.io-stream 库只处理静态文件,不处理实时视频流。

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

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

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