Как отправить аудио WebRTC с Kurento на телефоны Avaya

Я успешно использую Куренто RtpEndpointвведите для подключения к нескольким SIP-серверам Asterisk, а также напрямую к нескольким моделям SIP-телефонов, но соединения с SIP-серверами Avaya не работают, и я пытаюсь понять, почему. Симптомом является то, что соединение установлено, но медиа нет.

Для конечной точки 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 возвращает Kurento следующий SDP:

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 возвращает Kurento следующий SDP:

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 12 кбит / с узкополосный
  • Узкополосный OPUS 16 кбит / с
  • OPUS 18 кбит / с широкополосный
  • G.722
  • G.711ulaw
  • G.711alaw
  • G.726
  • G.729AB

Kurento поддерживает использование PCMU (также известного как G.711ulaw), как показано в рабочем примере Asterisk, но Avaya, похоже, отвергает его. (Примечание: раньше я думал, что он не был включен в SDP, но он есть как0 в m=audio line.) Я пытался заставить его использовать PCMU, используя rtpEndpoint.setAudioFormat(AudioCaps(AudioCodec.PCMU, 8000)), но это не помогло.

Вторая мысль заключалась в том, чтобы изменить битрейт OPUS, используя rtpEndpoint.setAudioFormat(AudioCaps(AudioCodec.OPUS, 18000)). Когда я попробовал это, он не только не работал с телефонами Avaya, но и перестал работать с Asterisk, поскольку Asterisk использовал PCMU. Я подумал о том, чтобы изменить SDP, чтобы изменить его наopus/18000, но это не разрешено, поскольку в RFC 7587 прямо указано:

Подтип носителя ("opus") входит в SDP "a=rtpmap" в качестве имени кодировки
. Тактовая частота RTP в "a = rtpmap" ДОЛЖНА быть 48000, а
количество каналов ДОЛЖНО быть 2.

Как я могу заставить Kurento и Avaya SBCE обмениваться мультимедийными данными между собой?

0 ответов

В конце концов, единственный способ заставить его работать - это поставить между ними сервер Kamailio/RTPEngine и позволить ему вести переговоры отдельно с обеими сторонами.

Другие вопросы по тегам