2012-12-20 23 views
6

這是我詢問的another question的後續行動,但是提供了更精確的信息。使用SignalR作爲WebRTC的服務層

我有兩個基本相同的網頁,演示WebRTC,一個使用XSockets作爲後端信令層,一個使用SignalR作爲後端信令層。

兩個後端基本相同,只有在它們(顯然)有不同的方式將數據發送到客戶端時纔有所不同。同樣,兩個客戶端上的TypeScript/JavaScript WebRTC代碼是完全相同的,因爲我已經抽象出了信令層。

問題是,XSockets網站一直工作,而SignalR站點失敗(大多數情況下一致,但不完全)。通常在調用peerConnection.setLocalDescription()時失敗,但它也可能失敗默默;或者它可以(有時)甚至可以工作。

這裏你可以看到在操作兩個不同的網頁:

XSockets網站:http://xsockets.demo.alanta.com/

SignalR網站:http://signalr.demo.alanta.com/

兩個的源代碼是在https://bitbucket.org/smithkl42/xsockets.webrtc,與在該XSockets版本xsockets分支,以及signalr分支上的SignalR版本。

所以我的問題是:有沒有人知道爲什麼使用一個信號層而不是另一個會對WebRTC產生影響?例如,一個或另一個發送Unicode字符串而不是ANSI?或者我誤解了這個問題,真正的區別在別處嗎?

回答

2

想通了。事實證明,SignalR 1.0 RC1有一個錯誤,它將字符串中的任何「+」改爲空格。因此,在SDP線,看上去像這樣:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z

都拿到變成這樣:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z

但因爲不是每個SDP在它有一個「+」在臨界線,有時會起作用。一切解釋。

的錯誤已被報告給好鄉親在SignalR(見https://github.com/SignalR/SignalR/issues/1194)的工作,並在此期間,一個簡單的encodeURIComponent()decodeURIComponent()周圍有問題的琴絃固定它。

+0

Ken,您是否僅使用SignalR進行信號傳輸或傳輸視頻/音頻數據? –

+0

@ElanHasson - 僅用於信號發送。 WebRTC很複雜,並且不完全實現(基本上只有Firefox和Chrome,存在一些互操作性問題),但仍然是實時視頻/音頻數據的首選傳輸方式。我沒有嘗試過使用WebSockets來傳輸音頻/視頻,但是從我所知道的設計和典型實現中,我認爲你會遇到一些真正的問題。我認爲長時間輪詢,服務器端事件和其他類似的方法將是一個不起步的。 –

+1

我同意。現在我剛切換到Flex/Red5。 Red5可以對HTML5視頻元素可以使用的實時流進行轉碼,並在Flash查看器上進行回退。 在開發此解決方案時,我死於一點兒內部。 –