2012-10-24 66 views
57

這更多的是一個概念性問題,而不是直接的「如何做到這一點」。通過RTMP的NodeJS和RED 5媒體服務器

在HTML5和nodeJS/binaryJS中,通常可以實現類似Flash的解決方案來流式傳輸音頻(獨立於從哪裏獲取流數據,例如webRTC或其他)。如果是這樣,你會怎麼做呢?

對於stackoverflow found here及其2010年以來只有一個查詢。此後,NodeJS和HTML5一直在發展和成熟。

人們通常做: 使用多媒體流(即視頻或音頻)到服務器,肯定是有什麼,在當前點節拍閃光的時間,直到的getUserMedia()的全面到來 - 這坦白地說可能take a while直到99%的瀏覽器用戶都可以使用它。

一般的做法是流數據到該服務器是通過使用客戶端的Flash或Flex應用程序,然後將其連接到一個RTMP協議供電媒體服務器等RED5FMSWowza。例如,客戶端應用程序發送通過RTMP麥克風輸入可能看起來像(簡化版本)

import flash.net.NetStream; 

private var myMic:Microphone; 
private var nc:NetConnection; 
private var ns:NetStream 

nc = new NetConnection();  
ns = new NetStream(nc); 
nc.connect(rtmp://localhost/serverApp); 
myMic = Microphone.getMicrophone(); 
ns.attachAudio(myMic); 

連同一個服務器應用程序之一是easibly能夠數據流給服務器。

我想這樣做: 有一個應用程序服務器上,捕捉進入RTMP流nodeJS(可能實現socketIObinaryJS)運行。類似於

//require 
var rtmp = require('node-rtmp'), 
var fs = require('fs'); 

//rtmp server address 
var rtmpServer = 'rtmp://localhost'; 

//create a binary server listening that receives stream data 
var RTMPServer = rtmp.RTMPServer(); 
var server = RTMPServer ({port: 1935}); 

server.on('connection', function(client){ 
//check if user is allowed to do so 
rtmp.newStream(client.stream); 
}); 

可能使用socketIO來區分用戶通過eventEmitters進行交互可能會更好。

可能有哪些優勢:一般來說,製作這種方法似乎有點花費,但對我來說可能有優勢,我也希望你對此發表評論。

  • 通過運行例如用戶交互的簡單驗證。 express和socketIO
  • 混合實現(經由RTMP)和getUserMedia()(通過加入binaryJS和Mozilla AudioAPI二進制傳輸機制)
  • 如果getUserMedia()得到完全支持,閃存實現可以容易地丟棄
  • 閃存的
  • 超過一般
  • 更容易實現到服務器的RTMP隨訪和用戶交互更控制框架

UPDATE: 我有好好的談d給Malcontenti-Wilson先生,他負責編寫的only node-rtmp package,但在8個月前停刊,因爲寫得不好,而且他遇到了障礙。任何使用過這個或能夠檢查代碼的人?

更新2: Malcontenti威爾遜先生只是給我發郵件,讓我注意node-mtrude(一種奇怪的名字),這是做什麼樣的,我們可能會想。有沒有人使用這種包裝?

+0

非常好的問題。對的,這是可能的。在那裏有幾個RTMP Node.js項目。我沒有親自使用過,所以我不能提供一個好的建議。 – Brad

+0

我建議您爲rtmpDump(http://rtmpdump.mplayerhq.hu)庫編寫C擴展綁定,如此處所述https://www.cloudkick.com/blog/2010/aug/23/writing- nodejs-native-extensions/ –

+2

我真的不知道關於node.js的任何信息,但[bigbluebutton](https://code.google.com/p/bigbluebutton/)在flash中實現了這樣的功能,並且它們正在工作在html 5解決方案上。檢查代碼可能是值得的。 – ldrumm

回答

2

是的,這是可能的,但你有一些問題。

1)Red5的記錄非常糟糕,並且有很多bug。

2)RTMPE/RTMPS

3)性能/可擴展性

4)1至3事情可以克服的,但也不是沒有去了解媒體分發和所有的這是非常密切相關的問題。當你完成時,你將成爲800人之一,他們真正瞭解它。你必須走一條解決意外問題的漫長道路。

+6

#1上的+1 - Red5完全沒有文檔/過時,並且針對它開放的問題持續數月,但他們不斷髮布無法解決未解決問題的版本。 – regretoverflow

+0

在記錄確定,越野車?嘗試更新的版本或支付商業服務器。不提供解決方案的抱怨對任何人都沒有幫助。 –

+1

Red5是越野車,沒有證件,至少在2年前。但我想沒有什麼變化,因爲它的發展太慢了。我想你需要檢查commersial解決方案,其中一個非常便宜,一個月50美元左右,具有良好的可擴展性(用erlang編寫,而不是java)。 –

1

現在有一個名爲vertx的平臺可用,其中可以進行多got發育。因此,red5 jar可以包含在你的服務器端,並且可以運行一個rtmp流媒體服務器。在客戶端,您可以使用video.js或JW播放器來播放流,並且已經實現了閃回策略。客戶端發佈,我不確定是否有任何基於JavaScript的RTMP實現可用。

1

WCS是Flash,WebRTC,SIP,Websockets和Wowza兼容協議的混合實現:RTSP,RTMP。

流轉換方案: enter image description here