sip服務器和sip客戶端之間是否傳遞RTP語音流以及解決辦法


sip服務器和sip客戶端之間是否傳遞RTP語音流?
比如sip客戶端c1和c2都注冊到同一個sip服務器(c1,c2,sip服務器處於同一個局域網中)
或者在其它不同的場景下(比如c1和c2分別處於不同的nat后, sip服務器位於公網上)

當c1呼叫c2成功后,c1和c2之間開始互發RTP語音流,這樣,雙方就可以互相聽見對方的聲音了

那么sip服務器和sip客戶端之間是否傳遞RTP語音流?即服務器是否轉發c1和c2之間通信
的語音數據?


------解決方案--------------------------------------------------------
一般來說簡單的兩個人之間的通話不需要。

一開始可能需要一個STUN服務器來穿透NAT。穿透之后,兩端之間可以直接發送語音數據。
如果很難穿透的NAT,那可能中間需要一個有公網IP的 relay服務器 來轉發語音。

如果是一些特殊類型的通話,比如多方會話,可能會用一個中央的媒體服務器,那通話語音就會通過媒體服務器轉發。。。當然也有其他實現方式



------解決方案--------------------------------------------------------
發表於:2009-03-09 12:28:292樓 得分:0  

我前幾天做了一個實驗,在同一個局域網內:linux server端用Yate2服務器, windows客戶端用了兩個軟電話  
兩個軟電話注冊到Yate2服務器上進行通話實驗,並且進行了抓包  

抓包發現兩個客戶端之間的通話RTP數據流通過了服務器進行轉發,這個是怎么回事呢?  

按照sip協議的 Contact字段,按說兩個客戶端已經分別知道了對方的ip:port,那為什么兩者之間的通話語音流  
還要通過服務器轉發呢?? 


--------------------------

Contact字段是客戶端的ip:port(5060),用於接收sip消息,該字段可能被sip server修改為客戶端外面的nat的映射地址和端口。

語音流比如RTP的接收地址端口,由sip里面的SDP確定,如果需要通過rtp proxy轉發,那么sip server就會修改sdp里面的connection ip和audio port或video port 
------解決方案--------------------------------------------------------
[Quote=引用:]

兄弟,我可是在同一個局域網里測驗的啊,為啥客戶端都把RTP流發往服務器端,再由服務器端轉發呢??  

---------------------------------------
RTP要不要中轉,就看sip server是如何處理了。

1.如果sip server修改了sip里的SDP的地址和端口,那就要中轉。你看你的cfg配置文件里是不是使用了use_media_proxy().

2.sip server不修改SDP,就不中轉。此時SDP里面是客戶端的內網的IP和端口(一般默認是7078),如果客戶端通過stun方式,那SDP里面的IP就是客戶端的外網的NAT映射地址和端口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM