2016-02-05 46 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/會工作)。 –

相關問題