sip服务器和sip客户端之间是否传递RTP语音流?

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之间通信
的语音数据?
...全文
2241 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
秦剑 2012-03-08
好贴啊
  • 打赏
  • 举报
回复
Afxtruelover 2011-08-29
[Quote=引用 16 楼 renxianzuo 的回复:]
通过什么工具抓取rtp包
[/Quote]
wireshark
  • 打赏
  • 举报
回复
mhby1004 2011-05-22
为什么java下的软电话和linux下的软电话只能单向通信……求高手指点
  • 打赏
  • 举报
回复
mujianhua1982 2010-10-18
学习了!!!!
  • 打赏
  • 举报
回复
renxianzuo 2010-07-15
通过什么工具抓取rtp包
  • 打赏
  • 举报
回复
renxianzuo 2010-07-15
向各位请教一下:

怎么样让sip客户端之间传递RTP语音流经过sip服务器
  • 打赏
  • 举报
回复
Iwill8088 2010-06-23
应该是加了第三方的服务器mediaproxy或者rtpproxy,要使用rtp代理都要在ser配置文件中设置的,并且启用相应的module来配合mediaproxy或rtpproxy使用。所以use_media_proxy()应该是sip服务器里面某个module的函数。
  • 打赏
  • 举报
回复
weichen2005 2010-04-22
[Quote=引用 3 楼 pomoq 的回复:]
发表于:2009-03-09 12:28:292楼 得分:0

我前几天做了一个实验,在同一个局域网内:linux server端用Yate2服务器, windows客户端用了两个软电话
两个软电话注册到Yate2服务器上进行通话实验,并且进行了抓包

抓包发现两个客户端之间的通话RTP数据流通过了服务器进行转发,这个是怎么回事呢?

按照sip协议的 Con……
[/Quote]

to pomoq:

你说的 use_media_proxy() 是哪种sip服务器的配置项啊?

ser还是asterisk? 还是其它的sip服务器?
  • 打赏
  • 举报
回复
weichen2005 2010-04-22
多谢大家的解答,继续研究语音通信!

to ren911:
1.计费,即使语音流不通过sip服务器,sip服务器不是也可以通过sip信令控制
通话的过程吗? (比如花费用完之后,最多再通话5分钟就切断通话)

最近继续研究了最新版yate-2.2.0.1, 发现其中有关于forward_sdp的选项
(其目的好像是服务器端不修改客户端发出的invite中带的sdp, 直接转发给被呼
叫端, 使得rtp流不经过sip服务器), 有在研究的兄弟多支持支持!
  • 打赏
  • 举报
回复
ren911 2010-04-12
SIP本身支持端到端RTP传输,但是否要通过SIP服务器主要看SIP服务器的配置,一般来说,商用的SIP服务器配置RTP流是不会直接端到端而是通过服务器中转的。
主要用处:
1.计费,SIP服务器需要直接控制媒体流以便进行通话管理和控制。
2.可以将不同格式的媒体流进行对接,比如一个只支持G711,一个只支持G723,如果直接端到端两方将无法通话,但有些服务器可以将其相互转化。
  • 打赏
  • 举报
回复
probezy 2010-02-01
因为可能服务器端做了直接的relay转发.可能自带rtp proxy功能.
  • 打赏
  • 举报
回复
jinlking 2010-01-05
up一下
  • 打赏
  • 举报
回复
KevinSu 2009-12-14
学习关注一下啊
  • 打赏
  • 举报
回复
KevinSu 2009-12-14
学习关注一下啊
  • 打赏
  • 举报
回复
BlackBabyzmc 2009-04-11
关注学习
  • 打赏
  • 举报
回复
pomoq 2009-03-10
[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映射地址和端口。
  • 打赏
  • 举报
回复
pomoq 2009-03-09
发表于: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
  • 打赏
  • 举报
回复
weichen2005 2009-03-09
多谢千里孤行兄!

我前几天做了一个实验,在同一个局域网内:linux server端用Yate2服务器, windows客户端用了两个软电话
两个软电话注册到Yate2服务器上进行通话实验,并且进行了抓包

抓包发现两个客户端之间的通话RTP数据流通过了服务器进行转发,这个是怎么回事呢?

按照sip协议的 Contact字段,按说两个客户端已经分别知道了对方的ip:port,那为什么两者之间的通话语音流
还要通过服务器转发呢??

  • 打赏
  • 举报
回复
weichen2005 2009-03-09
[Quote=引用 3 楼 pomoq 的回复:]
发表于:2009-03-09 12:28:292楼 得分:0

我前几天做了一个实验,在同一个局域网内:linux server端用Yate2服务器, windows客户端用了两个软电话
两个软电话注册到Yate2服务器上进行通话实验,并且进行了抓包

抓包发现两个客户端之间的通话RTP数据流通过了服务器进行转发,这个是怎么回事呢?

按照sip协议的 Contact字段,按说两个客户端已经分别知道了对方的ip:port,那为什么两者之间的通话语音流
还…
[/Quote]

兄弟,我可是在同一个局域网里测验的啊,为啥客户端都把RTP流发往服务器端,再由服务器端转发呢??
  • 打赏
  • 举报
回复
yanghehong 2009-03-06
一般来说简单的两个人之间的通话不需要。

一开始可能需要一个STUN服务器来穿透NAT。穿透之后,两端之间可以直接发送语音数据。
如果很难穿透的NAT,那可能中间需要一个有公网IP的 relay服务器 来转发语音。

如果是一些特殊类型的通话,比如多方会话,可能会用一个中央的媒体服务器,那通话语音就会通过媒体服务器转发。。。当然也有其他实现方式



- 千里孤行





  • 打赏
  • 举报
回复
发帖
多媒体/流媒体开发
加入

2500

社区成员

专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
申请成为管理员
帖子事件
创建了帖子
2009-03-06 12:44
社区公告
暂无公告