2011-11-01 117 views
2

我正在爲Android實現一個實時 - 多用戶語音傳輸應用程序。 我已經讀過,作爲一個標準 - RTP數據包被封裝到SIP然後發送到目的地。這樣做的好處是什麼?SIP與直接TCP套接字

我的想法是使用服務器,只是爲了接收來自節點和打開套接字的控制消息。所有這些節點將在1組中。我發出這些節點中的每一個的IP地址,以便單個發送者可以將其數據包直接組播到目的地。

這裏有致命的缺陷嗎? (iam不關心功耗) SIP如何做得更好?還是呢?

感謝

回答

2

SIP或會話發起協議是專門設計來解決你正在試圖解決這個問題的協議。一般來說,你應該重複使用(而不是重新發明輪子)的原因是因爲其他人已經研究過相同的問題,並且可能提出了一個更好的解決方案,作爲一個集體小組,而不是作爲一個個體。當然,這並非總是如此,但總的來說,它是成立的!

如果您想了解SIP,您可以學習RFC 3261 specification,或者如果您想快速瀏覽一下Wikipedia entry

話雖這麼說,如果你不需要完整,仔細測試協議的開銷,你可以滾你自己的,但要確保,當你做這個決定你知道你在什麼前述並有這是一個很好的理由。

SIP是一種通常在TCP上運行的信令協議(儘管不是必需的),如果仔細觀察,您會發現它在很多方面與HTTP非常相似。就像HTTP一樣,它可以傳輸大量的有效載荷,並且可以通過文本標題來傳輸,就像HTTP可以用來傳輸HTML,XML,純文本或任意二進制有效載荷一樣。

+0

那麼sip有什麼意義?我只想要一個套接字連接,從我的節點到服務器。一旦我收到地址,我可以開始我的直接rtp數據包傳輸。即使有一個節點出現故障,我也不在乎......我只是要用幾個節點insode 1接入點進行測試..所以,不要以爲性能會有很大差異......是吧? –

+0

套接字很好,但你需要考慮NAT穿越問題 - 特別是對於RTP的東西。爲此,使用像SIP這樣的東西意味着它將更容易管理,因爲解決方案已經存在(STUN,TURN,ICE),您可以從第三方獲得這些解決方案。同樣的邏輯適用於其他功能,如多點支持,安全性等。 –

+0

SIP的要點是它是一個已經建立的協議,用於完成您正在嘗試做的事情。即使您最初只需要一小部分SIP功能,您仍然可以從實施部分SIP支持作爲您的信令協議中受益。 –

3
  • RTP未被「封裝到SIP分組」中。 SIP是一種信令協議。 RTP是一種媒體流協議。 SIP用於協商和建立(並拆除)媒體流。
  • TCP是媒體(RTP)數據包的可怕選擇;如果你提出這個建議,從你的寫作中就不清楚了。
  • 多播不太可能適用於許多網絡路徑/收件人。
  • 路由器播放傳入數據的快樂地獄;您將需要的不僅僅是SIP來處理開放網絡上的用戶。請參閱STUN,TURN,ICE,UPnP等。
0

在最簡單的系統中,您可以使用基於UDP的RTP上的語音數據包。

但是,您無法關閉音頻,並且必須事先知道IP地址,端口號,編解碼器的類型及其特性。

在過於簡單的視圖中,SIP是一種方式: 1.從URL中找到另一個端點的IP地址。 (可能需要STUN,TURN,ICE等) 2.同意使用哪個編解碼器及其選項

SIP還有很多不同之處,您可能需要根據自己寫的內容調查SIP的會議功能。

你可以編寫自己的信令協議,如果這是一個學校項目,這將工作得很好。

但是,如果你正在做一個商業項目,請記住,電話還有更多的東西比眼睛還要多。最初的SIP規範經過了大量修改,現在是一組仍在修改和添加的RFC。我建議你利用這項工作而不是重新發明別人所犯的錯誤。