sip服务器和sip客户端之间是否传递RTP语音流以及解决办法
2013-01-23 09:24
543 查看
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映射地址和端口。
比如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映射地址和端口。
相关文章推荐
- 关于plsql导入pde因为字符集设置问题报错,而研究oracle服务器字符集、客户端字符集过程中发现的问题看,以及亲测的解决办法
- XP客户端和域控之间安全通道损坏的解决办法
- 客户端传递到服务器端后数据显示为乱码的解决办法
- Windows 7以上客户端远程低版本服务器系统桌面卡顿的解决办法
- mysql占用服务器cpu过高的原因以及解决办法
- 一种跨域判断服务器是否宕机的JS解决办法
- “windows 2003域用户在客户端用域服务器IP和域名称访问IIS提示输入用户名密码”解决办法
- 关于大话西游2在安装后运行提示拷贝临时文件失败,请确认磁盘空间、客户端是否在运行和运行客户的权限的解决办法
- activity之间传递bitmap大小超过40M的解决办法
- AD域中客户端时间与服务器时间不同步的解决办法
- Mysql 客户端连不上服务器,以及mongoVue连不上mongo问题解决
- C#与SQL Server之间的数据类型对比及在VS2003中空值传递的解决办法
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决
- mysql占用服务器cpu过高的原因以及解决办法
- 用vsFTPd自架Linux网络安装服务器,以及Redhat局域网安装的解决办法
- 公钥和私钥的含义,以及java客户端和服务器之间进行安全加解密的简单实现
- XP客户端和域控之间安全通道损坏的解决办法
- 服务器被攻击的四种现象以及解决办法!
- 两台服务器上两个数据库结构不同的表之间数据复制解决办法!!!