我使用nodejs創建了一個小應用程序,用於將multipart/x-mixed-replace數據傳輸到瀏覽器。對於使用node.js創建的mjpeg流,如何以其他格式對其進行編碼然後進行流式處理?
此數據是使用圖像數據創建的,但圖像數據可能隨時間而改變,因此在瀏覽器中它看起來像一個視頻。圖像數據是從網絡攝像頭創建的,因此在瀏覽器中它看起來像直播。
但是表現不是很好。
我嘗試了一些其他方法: - 第一:使用socket.io將圖像推送到瀏覽器,在這裏我使用圖像中的base64數據(推送此數據)並在瀏覽器中重新創建圖像(jpeg ):效果很好,但只有一個或兩個客戶。 _第二:使用從瀏覽器到nodejs服務器的輪詢..這不喜歡我。
所以這是代碼:我用快遞,使HTTP服務器(我的NodeJS服務器的代碼的某些部分):
app.get('/videoStream',function(req,response){
response.writeHead(200,{
'Content-Type': 'multipart/x-mixed-replace;boundary="' + boundary + '"',
'Connection': 'keep-alive',
'Expires': 'Fri, 01 Jan 1990 00:00:00 GMT',
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
'Pragma': 'no-cache'
});
response.write('--'+boundary+'\n');
events.addListener('imagen_recibida',function(){
fs.readFile(__dirname + '/image.jpeg',function(err,data){
if(err) return send404(response);
response.write('Content-Type: image/jpeg\n Content-Length: '+data.length+'\n\n');
response.write(data);
response.write('\n--'+boundary+'\n');
});
});
當事件「imagen_recibida」興起,它讀取圖像磁盤並將數據寫入瀏覽器。
所以這兩個問題:
有沒有什麼辦法來改善這方面的表現? (將圖像寫入磁盤,然後讀取發送到瀏覽器看起來不是一個很好的把戲)
是否有一種方法可以將其編碼爲另一種格式以提高性能?
非常感謝。
PD:圖像被寫入磁盤,然後讀取發送給瀏覽器,因爲我通過RPC調用從另一個函數的另一個進程接收圖像數據。
readstream/writestream聽起來像贏家,你能詳細說明一下嗎?我很想好好了解我自己。 – jcolebrand 2011-06-16 15:09:49
查看util.pump()的示例如何使用流的實現:https://github.com/joyent/node/blob/master/lib/util.js#L359 – BCG 2011-06-16 15:14:56
感謝@bgould這個想法。 。任何知識點abuot圖像ffmpeg?我想用這個來編碼視頻流顯示到視頻標籤..或者只是你評論..謝謝! – matiasfh 2011-06-16 15:41:14