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映射地址和端口。