sip服务器和sip客户端之间是否传递RTP语音流? [问题点数:60分,结帖人weichen2005]
![]() |
楼主
发表于: 2009-03-06 12:44:22
比如sip客户端c1和c2都注册到同一个sip服务器(c1,c2,sip服务器处于同一个局域网中)
或者在其它不同的场景下(比如c1和c2分别处于不同的nat后, sip服务器位于公网上) 当c1呼叫c2成功后,c1和c2之间开始互发RTP语音流,这样,双方就可以互相听见对方的声音了 那么sip服务器和sip客户端之间是否传递RTP语音流?即服务器是否转发c1和c2之间通信 的语音数据? |
![]() |
#1 得分:20
回复于: 2009-03-06 14:14:46
一般来说简单的两个人之间的通话不需要。
一开始可能需要一个STUN服务器来穿透NAT。穿透之后,两端之间可以直接发送语音数据。 如果很难穿透的NAT,那可能中间需要一个有公网IP的 relay服务器 来转发语音。 如果是一些特殊类型的通话,比如多方会话,可能会用一个中央的媒体服务器,那通话语音就会通过媒体服务器转发。。。当然也有其他实现方式 - 千里孤行 |
|
![]() |
#2 得分:0
回复于: 2009-03-09 12:28:29
多谢千里孤行兄!
我前几天做了一个实验,在同一个局域网内:linux server端用Yate2服务器, windows客户端用了两个软电话 两个软电话注册到Yate2服务器上进行通话实验,并且进行了抓包 抓包发现两个客户端之间的通话RTP数据流通过了服务器进行转发,这个是怎么回事呢? 按照sip协议的 Contact字段,按说两个客户端已经分别知道了对方的ip:port,那为什么两者之间的通话语音流 还要通过服务器转发呢?? |
|
#3 得分:20
回复于: 2009-03-09 12:42:45
发表于: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 | |
![]() |
#4 得分:0
回复于: 2009-03-09 18:45:32
兄弟,我可是在同一个局域网里测验的啊,为啥客户端都把RTP流发往服务器端,再由服务器端转发呢?? |
#5 得分:15
回复于: 2009-03-10 17:40:07
[Quote=引用 4 楼 weichen2005 的回复:]
兄弟,我可是在同一个局域网里测验的啊,为啥客户端都把RTP流发往服务器端,再由服务器端转发呢?? --------------------------------------- RTP要不要中转,就看sip server是如何处理了。 1.如果sip server修改了sip里的SDP的地址和端口,那就要中转。你看你的cfg配置文件里是不是使用了use_media_proxy(). 2.sip server不修改SDP,就不中转。此时SDP里面是客户端的内网的IP和端口(一般默认是7078),如果客户端通过stun方式,那SDP里面的IP就是客户端的外网的NAT映射地址和端口。 | |
![]() |
#6 得分:5
回复于: 2009-04-11 22:08:27
关注学习
|
#7 得分:0
回复于: 2009-12-14 17:43:34
学习关注一下啊
| |
#8 得分:0
回复于: 2009-12-14 17:44:08
学习关注一下啊
| |
#9 得分:0
回复于: 2010-01-05 17:25:05
up一下
| |
#10 得分:0
回复于: 2010-02-01 16:41:53
因为可能服务器端做了直接的relay转发.可能自带rtp proxy功能.
| |
#11 得分:0
回复于: 2010-04-12 15:18:00
SIP本身支持端到端RTP传输,但是否要通过SIP服务器主要看SIP服务器的配置,一般来说,商用的SIP服务器配置RTP流是不会直接端到端而是通过服务器中转的。
主要用处: 1.计费,SIP服务器需要直接控制媒体流以便进行通话管理和控制。 2.可以将不同格式的媒体流进行对接,比如一个只支持G711,一个只支持G723,如果直接端到端两方将无法通话,但有些服务器可以将其相互转化。 | |
![]() |
#12 得分:0
回复于: 2010-04-22 10:46:19
多谢大家的解答,继续研究语音通信!
to ren911: 1.计费,即使语音流不通过sip服务器,sip服务器不是也可以通过sip信令控制 通话的过程吗? (比如花费用完之后,最多再通话5分钟就切断通话) 最近继续研究了最新版yate-2.2.0.1, 发现其中有关于forward_sdp的选项 (其目的好像是服务器端不修改客户端发出的invite中带的sdp, 直接转发给被呼 叫端, 使得rtp流不经过sip服务器), 有在研究的兄弟多支持支持! |
![]() |
#13 得分:0
回复于: 2010-04-22 10:49:55
to pomoq: 你说的 use_media_proxy() 是哪种sip服务器的配置项啊? ser还是asterisk? 还是其它的sip服务器? |
#14 得分:0
回复于: 2010-06-23 17:04:58
应该是加了第三方的服务器mediaproxy或者rtpproxy,要使用rtp代理都要在ser配置文件中设置的,并且启用相应的module来配合mediaproxy或rtpproxy使用。所以use_media_proxy()应该是sip服务器里面某个module的函数。
| |
![]() |
#15 得分:0
回复于: 2010-07-15 21:47:27
向各位请教一下:
怎么样让sip客户端之间传递RTP语音流经过sip服务器 |
![]() |
#16 得分:0
回复于: 2010-07-15 21:48:43
通过什么工具抓取rtp包
|
![]() |
#17 得分:0
回复于: 2010-10-18 10:37:21
学习了!!!!
|
#18 得分:0
回复于: 2011-05-22 10:56:15
为什么java下的软电话和linux下的软电话只能单向通信……求高手指点
| |
![]() |
#19 得分:0
回复于: 2011-08-29 15:57:51
wireshark
|
#20 得分:0
回复于: 2012-03-08 20:25:21
好贴啊
| |