2016-02-05 53 views
2

我试图通过socket.io和套接字帮助我的node.js服务器创建一个摄像头视频流。 IO-流。错误视频流socket.io + socket.io流(超过最大调用堆栈大小)

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

当我连接到服务器槽/摄像头,并因此启动流时,服务器崩溃并出现错误“RangeError:Maximum call stack size exceeded”。

错误似乎来自“/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(); 
 
    }; 
 
});

我无法测试的服务器/索引服务器崩溃的代码时,相机开始流。

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

回答

2

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

要分享视频流,你应该使用WebRTC。有一对夫妇库,可以帮助你开始:

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

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

+0

谢谢!认为这有点奇怪,没有视频流演示。 –

+0

@IbeVanmeenen如果你不介意我会问,你是如何解决它请分享你的经验与我几乎完全相同的问题? –

+0

@ASahra,不幸的是,我没有进一步与这个项目,所以我没有解决方案。但我确实会去WebRTC连接(也许http://socket.io/blog/socket-io-p2p/会工作)。 –

相关问题