1

我成功地使用 Kurento 的RtpEndpoint类型连接到多个 Asterisk SIP 服务器以及直接连接到多个型号的 SIP 电话,但是与 Avaya SIP 服务器的连接不起作用,我试图找出原因。症状是已建立连接但没有媒体。

对于 RTP 端点,Kurento 生成以下 SDP(我将其包含公共 IP 地址并删除视频部分),然后将其包含在 SIP 中INVITE

v=0
o=- 3807878922 3807878922 IN IP4 192.0.2.95
s=Kurento Media Server
c=IN IP4 192.0.2.95
t=0 0
m=audio 18848 RTP/AVPF 96 0 97
a=setup:actpass
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=rtpmap:96 opus/48000/2
a=rtpmap:97 AMR/8000
a=rtcp:18849
a=sendrecv
a=mid:audio0
a=ssrc:2835743000 cname:user3268188862@host-ad591d54

与 Asterisk 服务器的工作连接将以下 SDP 返回给 Kurento:

v=0
o=root 55778749 55778749 IN IP4 198.51.100.252
s=Asterisk PBX 13.28.1
c=IN IP4 198.51.100.252
t=0 0
m=audio 11704 RTP/AVPF 0
a=rtpmap:0 PCMU/8000
a=maxptime:150
a=sendrecv

在 Kurento 日志中,我看到它说它正在转码此连接。

与 Avaya 服务器的非工作连接将以下 SDP 返回给 Kurento:

v=0
o=- 1598890119 2 IN IP4 203.0.113.100
s=-
c=IN IP4 0.0.0.0
b=AS:64
t=0 0
m=audio 0 RTP/AVP 96 0 97
a=inactive
a=rtpmap:96 opus/48000/2
a=rtpmap:97 AMR/8000
a=ptime:20

如您所见,Avaya 服务器响应它不能使用任何可用的编解码器,因此不会发送或接收媒体 ( a=inactive)。

根据我发现的一些 Avaya 文档,Avaya SBCE 至少支持以下编解码器的转码:

  • OPUS 12kbps 窄带
  • OPUS 16kbps 窄带
  • OPUS 18kbps 宽带
  • G.722
  • G.711法律
  • G.711法律
  • G.726
  • G.729AB

Kurento 支持使用 PCMU(又名 G.711ulaw),如工作 Asterisk 示例中所示,但 Avaya 似乎拒绝它。(注意:我以前认为它不包含在 SDP 中,但它确实存在0m=audio行中。)我试图让它强制使用 PCMU using rtpEndpoint.setAudioFormat(AudioCaps(AudioCodec.PCMU, 8000)),但这没有帮助。

我的第二个想法是使用rtpEndpoint.setAudioFormat(AudioCaps(AudioCodec.OPUS, 18000)). 当我尝试这个时,它不仅不能在 Avaya 手机上工作,而且由于 Asterisk 使用 PCMU,它也停止了与 Asterisk 的工作。我想过修改 SDP 以将其更改为opus/18000,但这是不允许的,因为RFC 7587明确指出:


媒体子类型(“opus”)作为编码名称进入 SDP“a=rtpmap” 。"a=rtpmap" 中的 RTP 时钟速率必须为 48000,
通道数必须为 2。

如何让 Kurento 和 Avaya SBCE 在它们之间发送媒体?

4

1 回答 1

0

最后,我可以让它工作的唯一方法是在它们之间放置一个 Kamailio/RTPEngine 服务器,并让它与双方单独协商。

于 2020-09-07T19:45:08.057 回答