2015-08-14 73 views
2

我有一個實時視頻聊天應用程序,我使用支持STUN/TURN和UPD/TCP傳輸的TURN服務器。檢查WebRTC連接 - 可靠的方法

有時用戶可以連接到那麼多的端口和協議的WebRTC連接只是不能發生網絡(通常這些都是企業網絡)。我想在用戶嘗試連接對方之前檢查WebRTC連接是否可能(實際上,執行技術檢查)。

我該怎麼辦?想法,我有我的頭:

  1. 嘗試通過的WebRTC下載數據的託管塊(音頻文件,例如) - 這可能和這會是足夠的,以確保入站和出站連接是打開?
  2. 使用TURN服務器作爲主機做出的連接,看看它是否失敗(不知道如果我能做到這一點或沒有)
  3. 使用Flash來嘗試下載/上傳數據塊通過特定的端口和協議。甚至可能使用Cirrus。但是,我不確定這個測試從WebRTC的準確性來看是否準確。
  4. 有沒有其他想法?

附加要求:檢查技術必須支持Chrome,Opera和Firefox。最好也是通過Temasys插件的IE/Safari。

第1版 - 收集ICE考生是一個好主意,但它不是100%可靠的。一旦我在我的應用程序中檢查了日誌,它實際上收集了中繼ICE候選者,但視頻/音頻傳輸失敗。在Apprtc上測試也得到了相同的結果。

回答

2

典型的WebRTC方法是使用STUN和TURN服務器創建對等連接,調用createOffer和setLocalDescription並觀察收集到的候選人。見例如http://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

如果你srflx候選人,您的STUN服務器的作品(即UDP不會被阻止)。更有趣的是你是否獲得接力人選。如果你這樣做,使用TURN作爲後備將起作用。如果使用TURN/TCP,質量可能會受損。如果你沒有得到接力候選人......打電話是不太可能的。

+0

您確定此方法可靠嗎?請參閱此問題的第1版。 – igorpavlov

+0

告訴本地客戶是否能夠聯繫是可靠的。無法確定遠程客戶端是否可以提前做同樣的事情。 –

+0

這個和其他答案很好的結合在一起,實際上創建了兩個與icetransports設置爲中繼的對等連接,並且實際上通過TURN服務器創建一個數據通道返回到「自己」,然後通過它抽取一些消息。檢查您是否可以獲得中繼候選人以及建立中繼數據通道。 – xdumaine

2

檢查的最佳方法是首先連接一個數據通道。你的用戶不會注意到。如果可行,那麼音頻和視頻幾乎可以保證工作。作爲獎勵,當用戶準備就緒時,您可以使用數據通道進行信號超快速連接。

+0

我已經提到過,我必須提前作爲技術檢查的一部分進行檢查。不幸的是無法連接到真實用戶。 – igorpavlov

+0

@igorpavlov爲什麼不呢?它不需要許可或用戶交互。你願意下載一大堆數據。這有什麼不同?請澄清這項「技術檢查」的要求。 – jib