gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:59 25 4
gpt4 key购买 nike

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

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

当我通过/camera 连接到服务器并启动流时,服务器崩溃并出现错误“RangeError:超出最大调用堆栈大小”。

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

在示例中,我省略了大部分任意代码,因为服务器/连接在传输数据片段方面运行良好。

这是我当前的设置:

服务器:

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

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

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

最佳答案

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

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

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

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

关于node.js - 错误视频流socket.io + socket.io-stream(超出最大调用堆栈大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222280/

25 4 0