我正在爲Android實現一個實時 - 多用戶語音傳輸應用程序。 我已經讀過,作爲一個標準 - RTP數據包被封裝到SIP然後發送到目的地。這樣做的好處是什麼?SIP與直接TCP套接字
我的想法是使用服務器,只是爲了接收來自節點和打開套接字的控制消息。所有這些節點將在1組中。我發出這些節點中的每一個的IP地址,以便單個發送者可以將其數據包直接組播到目的地。
這裏有致命的缺陷嗎? (iam不關心功耗) SIP如何做得更好?還是呢?
感謝
我正在爲Android實現一個實時 - 多用戶語音傳輸應用程序。 我已經讀過,作爲一個標準 - RTP數據包被封裝到SIP然後發送到目的地。這樣做的好處是什麼?SIP與直接TCP套接字
我的想法是使用服務器,只是爲了接收來自節點和打開套接字的控制消息。所有這些節點將在1組中。我發出這些節點中的每一個的IP地址,以便單個發送者可以將其數據包直接組播到目的地。
這裏有致命的缺陷嗎? (iam不關心功耗) SIP如何做得更好?還是呢?
感謝
SIP或會話發起協議是專門設計來解決你正在試圖解決這個問題的協議。一般來說,你應該重複使用(而不是重新發明輪子)的原因是因爲其他人已經研究過相同的問題,並且可能提出了一個更好的解決方案,作爲一個集體小組,而不是作爲一個個體。當然,這並非總是如此,但總的來說,它是成立的!
如果您想了解SIP,您可以學習RFC 3261 specification,或者如果您想快速瀏覽一下Wikipedia entry。
話雖這麼說,如果你不需要完整,仔細測試協議的開銷,你可以滾你自己的,但要確保,當你做這個決定你知道你在什麼前述並有這是一個很好的理由。
SIP是一種通常在TCP上運行的信令協議(儘管不是必需的),如果仔細觀察,您會發現它在很多方面與HTTP非常相似。就像HTTP一樣,它可以傳輸大量的有效載荷,並且可以通過文本標題來傳輸,就像HTTP可以用來傳輸HTML,XML,純文本或任意二進制有效載荷一樣。
在最簡單的系統中,您可以使用基於UDP的RTP上的語音數據包。
但是,您無法關閉音頻,並且必須事先知道IP地址,端口號,編解碼器的類型及其特性。
在過於簡單的視圖中,SIP是一種方式: 1.從URL中找到另一個端點的IP地址。 (可能需要STUN,TURN,ICE等) 2.同意使用哪個編解碼器及其選項
SIP還有很多不同之處,您可能需要根據自己寫的內容調查SIP的會議功能。
你可以編寫自己的信令協議,如果這是一個學校項目,這將工作得很好。
但是,如果你正在做一個商業項目,請記住,電話還有更多的東西比眼睛還要多。最初的SIP規範經過了大量修改,現在是一組仍在修改和添加的RFC。我建議你利用這項工作而不是重新發明別人所犯的錯誤。
那麼sip有什麼意義?我只想要一個套接字連接,從我的節點到服務器。一旦我收到地址,我可以開始我的直接rtp數據包傳輸。即使有一個節點出現故障,我也不在乎......我只是要用幾個節點insode 1接入點進行測試..所以,不要以爲性能會有很大差異......是吧? –
套接字很好,但你需要考慮NAT穿越問題 - 特別是對於RTP的東西。爲此,使用像SIP這樣的東西意味着它將更容易管理,因爲解決方案已經存在(STUN,TURN,ICE),您可以從第三方獲得這些解決方案。同樣的邏輯適用於其他功能,如多點支持,安全性等。 –
SIP的要點是它是一個已經建立的協議,用於完成您正在嘗試做的事情。即使您最初只需要一小部分SIP功能,您仍然可以從實施部分SIP支持作爲您的信令協議中受益。 –