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

posted on 2013-01-23 09:24  easonoutlook  阅读(10444)  评论(1编辑  收藏  举报