Кодек WebRTC

Добрый день!
Теперь получили от разработчиков Манго такую инфу:
Проблема на удаленной стороне.
Мы отправляем invite и согласовываем кодеки.
После этого мы отправляем SendOfferRequest посредством invite без sdp секции.
В ответ мы ожидаем сообщение 200-ок с sdp-секцией для пересогласования кодеков. А приходит 200-ок без sdp-секции.
Мы считаем, что кодеки не согласованы и не даём команду на медиа-прокси на соединение плеч звонка. Поэтому отсутствует слышимость.
 

Max

Administrator
Staff member
Здравствуйте.

Мы отправляем invite и согласовываем кодеки.
После этого мы отправляем SendOfferRequest посредством invite без sdp секции.
В ответ мы ожидаем сообщение 200-ок с sdp-секцией для пересогласования кодеков. А приходит 200-ок без sdp-секции.
Мы считаем, что кодеки не согласованы и не даём команду на медиа-прокси на соединение плеч звонка. Поэтому отсутствует слышимость.
Здесь сообщается о re-INVITE ре-инициализация SIP сессии.
Такая функция на нашей стороне не поддерживается. Поэтому выясните пожалуйста, можно ли обойти такой сценарий на стороне SIP провайдера и не делать пересогласование кодеков.

На случай, если обойти пересогласование кодеков нельзя, завели внутренний тикет WCS-4002.
Реализация может занять продолжительное время. Также в рамках тикета прсьба предоставить дамп SIP RTP трафика для последующей проверки сценария.

Code:
tcpdump udp -s 4096 -w log.pcap
1. Убедитесь, что в дампе log.pcap содержится SIP и RTP трафик из неудачного звонка.

2. Пришлите нам его через форму.
 
Спасибо за ответ!

На случай, если обойти пересогласование кодеков нельзя, завели внутренний тикет WCS-4002.
Реализация может занять продолжительное время.
Подскажите, пожалуйста, хотя бы в первом приближении, когда реализация возможна?

Также в рамках тикета прсьба предоставить дамп SIP RTP трафика для последующей проверки сценария.
Пришлем
 

Max

Administrator
Staff member
Подскажите, пожалуйста, хотя бы в первом приближении, когда реализация возможна?
Мы не даем ETA по запросам на форуме. Обычно, чем больше желающих добавить новый функционал, тем быстрее он будет реализован. До сих пор клиенты не сталкивались с отсуствием настройки на стороне SIP провайдера, позволяющей включать/отключать SIP re-INVITE. Возможно, и у вашего провайдера (Mango) такая настройка имеется. В этом случае нужно отключить re-INVITE как временное решение, о чем мы уже писали ранее в этой теме.
 

Max

Administrator
Staff member
Добрый день.
Мы протестировали звонки через Mango с предоставленными аккаунтами на последней сборке сервера 5.2.1895. С настройками сервера
Code:
codecs_exclude_sip=mpeg4-generic,flv,mpv,opus,g729,speex16,g722
sip_force_tcp=true
allow_outside_codecs=false
звонки устанаваливаются корректно, обе стороны слышат друг друга, проблем с качеством связи нет. Выглядит так, что помогает исключение всех кодеков, кроме PCMA и PCMU, при этом согласование кодеков проходит на PCMA.
 

alexayy

New Member
Добрый день!
У нас исключены коде
ки в настройках, как дописать конфигурацию по вашей рекомендации исключение всех кодеков, кроме PCMA и PCMU, при этом согласование кодеков проходит на PCMA


#Settings of Flashphoner Core

ip_local=.....
codecs_exclude_sip_rtmp=opus,g729,g722,mpeg4-generic,vp8,mpv,speex16,h264,flv
codecs=alaw,ulaw,telephone-event
ip=.....
wss.port=.....
ws.port=.....
codecs_exclude_streaming=flv,telephone-event
media_port_to=.....
#streaming_distributor_subgroup_enabled=true
rtc_ice_add_local_component=true
codecs_exclude_sip=opus,g729,g722,mpeg4-generic,vp8,mpv,speex16,h264,flv
custom_stats_script=
client_mode=false
media_port_from=.....
ice_tcp_nio=false
ice_tcp_transport=false
sip_force_tcp=false
allow_outside_codecs=false
send_busy_when_on_call=true
#client_log_level=DEBUG
 
Last edited:

alexayy

New Member
Добрый день!
У нас исключены кодеки в настройках, как дописать конфигурацию по вашей рекомендации исключение всех кодеков, кроме PCMA и PCMU, при этом согласование кодеков проходит на PCMA


#Settings of Flashphoner Core

ip_local=.....
codecs_exclude_sip_rtmp=opus,g729,g722,mpeg4-generic,vp8,mpv,speex16,h264,flv
codecs=alaw,ulaw,telephone-event
ip=.....
wss.port=.....
ws.port=.....
codecs_exclude_streaming=flv,telephone-event
media_port_to=.....
#streaming_distributor_subgroup_enabled=true
rtc_ice_add_local_component=true
codecs_exclude_sip=opus,g729,g722,mpeg4-generic,vp8,mpv,speex16,h264,flv
custom_stats_script=
client_mode=false
media_port_from=.....
ice_tcp_nio=false
ice_tcp_transport=false
sip_force_tcp=false
allow_outside_codecs=false
send_busy_when_on_call=true
#client_log_level=DEBUG
 

Max

Administrator
Staff member
У нас исключены кодаки в настройках, как дописать конфигурацию по вашей рекомендации исключение всех кодеков, кроме PCMA и PCMU, при этом согласование кодеков проходит на PCMA
Пожалуйста, установите настройки, указанные в этом сообщении, как показано в нем. Остальные настройки можно оставить без изменения.
 

alexayy

New Member
Спасибо за ответы
У нас дополнительно через сервер телефонии Манго подключен транк номеров мобильного оператора со следующими настройками, там используется кодек G711A, звонки через транк так же проходят через ваше приложение, ниже на скриншоте настройки транка. В файле flashphoner.propertes данный кодек явно не прописан, надо ли его добавлять?
1708507354080.png
 

Max

Administrator
Staff member
Здравствуйте.

В конфиге flashphoner.properties

Голосовой кодек G711A прописан как alaw
Голосовой кодек G711U прописан как ulaw
RFC2833 (не кодек, а тип тонового набора) прописан как telephone-event

Поэтому добавлять в виде G711A его не нужно.
 

alexayy

New Member
Здравствуйте, если в секции "sipMessageRaw" отсутствует запись об обнаружении звонка, это может привести к потере информации о вызова?
 

Max

Administrator
Staff member
Поле sipMessageRaw в настоящее время не передается в REST хуках /call (оповещение бэкенда об исходящем вызове), /OnCallEvent (оповешение бкенда о входящем вызове) и /CallStatusEvent (оповещение бэкенда о текущем статусе звонка). Используйте информацию, доступную в этих REST хуках.
 

alexayy

New Member
Спасибо за ответы!
Еще возникли вопросы, отрывок из лога, например
06:45:09,356 INFO RetryExec - API-ASYNC-pool-13-thread-7 I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8081: The target server failed to respond


"SEND REST OBJECT ==>
URL:http://localhost:8081/apps/EchoApp/CallStatusEvent
OBJECT:
{
"nodeId" : "JKamj8OqgtQm85DSOJDSecOTjxDtOPcK@51.250.81.250",
"appKey" : "defaultApp",
"sessionId" : "/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7",
"callId" : "5d9bc822-bce5-ee11-838c-bacb8fef1e19",
"callUuid" : "99f7cecb-0750-44d6-85f8-178d4f979c1f",
"incoming" : false,
"status" : "FINISH",

какая может быть причина недоступности?

06:45:09,351 INFO SipCallProcessor - API-ASYNC-pool-13-thread-7 terminate: sipCall.id=5d9bc822-bce5-ee11-838c-bacb8fef1e19
06:45:09,351 INFO SipCallProcessor - API-ASYNC-pool-13-thread-7 Stop rtc media session id CLIENT-5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7, sipCallId 5d9bc822-bce5-ee11-838c-bacb8f
ef1e19
06:45:09,351 INFO Agent - API-ASYNC-pool-13-thread-7 ICE state changed from Completed to Terminated. Local ufrag CLIENT/5d9bc822/bce5/ee11/838c/bacb8fef1e19//176/99/220/0/54568/10/210/0/22/8443/4cb4984a/5346/47a3/9aaf/925f74159ec7ebojo1hp
an8sts
06:45:09,351 INFO ergingDatagramSocket - API-ASYNC-pool-13-thread-7 Closing.
06:45:09,351 INFO StunUdpSocket - API-ASYNC-pool-13-thread-7 Close socket
06:45:09,352 INFO MediaSession - API-ASYNC-pool-13-thread-7 Stop MediaSession id: CLIENT-5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7
06:45:09,354 INFO MediaSession - API-ASYNC-pool-13-thread-7 'CLIENT-5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7' has been terminated
06:45:09,354 INFO MediaSession - API-ASYNC-pool-13-thread-7 Stop MediaSession id: 5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7
06:45:09,355 INFO MediaSession - API-ASYNC-pool-13-thread-7 '5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7' has been terminated
06:45:09,355 INFO SipCall - API-ASYNC-pool-13-thread-7 cancelScheduleSessionRefresh
06:45:09,355 INFO WCS4CallbackHandler - API-ASYNC-pool-13-thread-7 finish SipCall{id='5d9bc822-bce5-ee11-838c-bacb8fef1e19', cost='', callee='79231476707', calleeVisibleName='<sip:79231476707@umaxmsk.mangosip.ru>', caller='user777, callerVisibleName='
user777', isVideoCall=false, incoming=false, terminated=true, state=FINISH, lastResponseStatusCode=200} user777@umaxmsk.mangosip.ru
06:45:09,355 INFO Streams - API-ASYNC-pool-13-thread-7 unpublish name: IN_user777_5d9bc822-bce5-ee11-838c-bacb8fef1e19
06:45:09,355 INFO Streams - API-ASYNC-pool-13-thread-7 destroyPublication name IN_user777_5d9bc822-bce5-ee11-838c-bacb8fef1e19
06:45:09,355 INFO F - API-ASYNC-pool-13-thread-7 unpublish name: IN_user777_5d9bc822-bce5-ee11-838c-bacb8fef1e19
06:45:09,355 INFO RestClient - API-ASYNC-pool-13-thread-7 SEND REST OBJECT ==>
URL:http://localhost:8081/apps/EchoApp/CallStatusEvent
OBJECT:
{
"nodeId" : "JKamj8OqgtQm85DSOJDSecOTjxDtOPcK@51.250.81.250",
"appKey" : "defaultApp",
"sessionId" : "/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7",
"callId" : "5d9bc822-bce5-ee11-838c-bacb8fef1e19",
"callUuid" : "99f7cecb-0750-44d6-85f8-178d4f979c1f",
"incoming" : false,
"status" : "FINISH",
"caller" : "user777",
"callee" : "79231476707",
"localAudioCodec" : "PCMA",
"remoteAudioCodec" : "PCMA",
"createDate" : 1710830678971,
"endDate" : 1710830709351,
"hasAudio" : true,
"hasVideo" : false,
"visibleName" : "user777",
"mediaProvider" : "WebRTC",
"sipStatus" : 200,
"holdForTransfer" : false,
"id" : "5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7",
"msrp" : false,
"history" : false
}
06:45:09,356 INFO RetryExec - API-ASYNC-pool-13-thread-7 I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8081: The target server failed to respond
06:45:09,356 INFO RetryExec - API-ASYNC-pool-13-thread-7 Retrying request to {}->http://localhost:8081
06:45:09,358 INFO RestApiRouter - HTTP-pool-3-thread-64 Use controller class com.flashphoner.rest.server.apps.echo_apps.EchoApp with path /apps/EchoApp/CallStatusEvent
06:45:09,359 INFO RestApiRouter - HTTP-pool-3-thread-64 handleRequest method: /apps/EchoApp/CallStatusEvent, params:{nodeId=JKamj8OqgtQm85DSOJDSecOTjxDtOPcK@51.250.81.250, appKey=defaultApp, sessionId=/176.99.220.0:54568/100.210.0.11:8443-4cb4984a
-5346-47a3-9aaf-925f74159ec7, callId=5d9bc822-bce5-ee11-838c-bacb8fef1e19, callUuid=99f7cecb-0750-44d6-85f8-178d4f979c1f, incoming=false, status=FINISH, caller=user777, callee=79231476707, localAudioCodec=PCMA, remoteAudioCodec=PCMA, createDate=171083067
8971, endDate=1710830709351, hasAudio=true, hasVideo=false, visibleName=user777, mediaProvider=WebRTC, sipStatus=200, holdForTransfer=false, id=5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7
, msrp=false, history=false}
06:45:09,359 INFO EchoApp - HTTP-pool-3-thread-64 handleRequest method: CallStatusEvent params:{nodeId=JKamj8OqgtQm85DSOJDSecOTjxDtOPcK@51.250.81.250, appKey=defaultApp, sessionId=/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf
-925f74159ec7, callId=5d9bc822-bce5-ee11-838c-bacb8fef1e19, callUuid=99f7cecb-0750-44d6-85f8-178d4f979c1f, incoming=false, status=FINISH, caller=user777 callee=79231476707, localAudioCodec=PCMA, remoteAudioCodec=PCMA, createDate=1710830678971, endDate=1
710830709351, hasAudio=true, hasVideo=false, visibleName=user777, mediaProvider=WebRTC, sipStatus=200, holdForTransfer=false, id=5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7, msrp=false, h
istory=false}
06:45:09,359 INFO RestClient - API-ASYNC-pool-13-thread-7 content -> {"nodeId":"JKamj8OqgtQm85DSOJDSecOTjxDtOPcK@51.250.81.250","appKey":"defaultApp","sessionId":"/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159ec7","call
Id":"5d9bc822-bce5-ee11-838c-bacb8fef1e19","callUuid":"99f7cecb-0750-44d6-85f8-178d4f979c1f","incoming":false,"status":"FINISH","caller":"user777","callee":"79231476707","localAudioCodec":"PCMA","remoteAudioCodec":"PCMA","createDate":1710830678971,"endDa
te":1710830709351,"hasAudio":true,"hasVideo":false,"visibleName":"user777","mediaProvider":"WebRTC","sipStatus":200,"holdForTransfer":false,"id":"5d9bc822-bce5-ee11-838c-bacb8fef1e19_/176.99.220.0:54568/100.210.0.11:8443-4cb4984a-5346-47a3-9aaf-925f74159e
c7","msrp":false,"history":false}
06:45:09,359 INFO RestClient - API-ASYNC-pool-13-thread-7 RECEIVED REST OBJECT <==
URL:http://localhost:8081/apps/EchoApp/CallStatusEvent
OBJECT:
{
 

Max

Administrator
Staff member
какая может быть причина недоступности?
Такое может быть при большой нагрузке на сервер: встроенный бэкенд не успевает обрабатывать REST хуки, либо превышено количество одновременных соединений. В этом случае предусмотрена повторная отправка запроса, по умолчанию повторяется три раза
Code:
rest_client_request_retry_count=3
Кроме того, в продакшне можно увеличить количество одновременных соединений к встроенному бэкенду, например
Code:
rest_max_connections=2000
 

alexayy

New Member
Поменяли значения, но отловили еще ошибки связаны с INTERNAL_SIP_ERROR" и повторения [URL http://localhost:8081/apps/EchoApp/ErrorStatusEvent has the following content: "You tried to access that URL but we cannot access it's content."]
количество подключений попробуем увеличить еще, а с INTERNAL_SIP_ERROR" не понятно.

--------------------> ACK sip:randomsip@randomdomain.com SIP/2.0
from: /10.100.0.10:30002
to: /81.88.86.35:5060
time: 1711443651167
timeStamp:
isSender: true
transactionId: randomtransactionid
callId: randomcallid

ACK sip:randomsip@randomdomain.com SIP/2.0
Call-ID: randomcallid
Max-Forwards: 70
From: "randomuser" <sip:randomuser@randomdomain.com>;tag=randomtag
To: <sip:randomsip@randomdomain.com>;tag=randomtag
Via: SIP/2.0/TCP 51.250.81.250:30002;branch=randombranch
CSeq: 2 ACK
Content-Length: 0

09:00:51,169 INFO SipUserAgentListener - EventScannerThread-29 Requested by uri sip:randomuser-48657347@51.250.81.250:30002 SipUserAgent SIP UA: login: randomuser assignedPort: 30002 listeningPort: 30002
09:00:51,169 INFO SipCallProcessor - EventScannerThread-29 terminate: sipCall.id=randomcallid
09:00:51,169 INFO SipCallProcessor - EventScannerThread-29 Stop rtc media session id CLIENT-randomcallid_/43.224.169.238:30154/10.100.0.10:8443-randomid, sipCallId randomcallid
09:00:51,169 INFO RestClient - API-ASYNC-pool-13-thread-8 SEND REST OBJECT ==>
[URL http://localhost:8081/apps/EchoApp/ErrorStatusEvent has the following content: "You tried to access that URL but we cannot access it's content."]
OBJECT:
{
"nodeId" : "randomnodeId",
"appKey" : "randomApp",
"sessionId" : "/43.224.169.238:30154/10.100.0.10:8443-randomid",
"status" : "INTERNAL_SIP_ERROR",
"info" : "INTERNAL_SIP_ERROR"
}
09:00:51,169 INFO Agent - EventScannerThread-29 ICE state changed from Completed to Terminated. Local ufrag CLIENT/randomcallid/43/224/169/238/30154/10/210/0/22/8443-randomid
09:00:51,169 INFO ergingDatagramSocket - EventScannerThread-29 Closing.
09:00:51,169 INFO StunUdpSocket - EventScannerThread-29 Close socket
09:00:51,170 INFO MediaSession - EventScannerThread-29 Stop MediaSession id: CLIENT-randomcallid_/43.224.169.238:30154/10.100.0.10:8443-randomid
09:00:51,170 INFO RestApiRouter - HTTP-pool-3-thread-100 Use controller class com.flashphoner.rest.server.apps.echo_apps.EchoApp with path /apps/EchoApp/ErrorStatusEvent
09:00:51,170 INFO RestApiRouter - HTTP-pool-3-thread-100 handleRequest method: /apps/EchoApp/ErrorStatusEvent, params:{nodeId=randomnodeId, appKey=randomApp, sessionId=/43.224.169.238:30154/10.100.0.10-randomid, status=INTERNAL_SIP_ERROR, info=INTERNAL_SIP_ERROR}
09:00:51,170 INFO EchoApp - HTTP-pool-3-thread-100 handleRequest method: ErrorStatusEvent params:{nodeId=randomnodeId, appKey=randomApp, sessionId=/43.224.169.238:30154/10.100.0.10:8443-randomid, status=INTERNAL_SIP_ERROR, info=INTERNAL_SIP_ERROR}
09:00:51,170 INFO RestClient - API-ASYNC-pool-13-thread-8 content -> {"nodeId":"randomnodeId","appKey":"randomApp","sessionId":"/43.224.169.238:30154/10.100.0.10::8443-randomid","status":"INTERNAL_SIP_ERROR","info":"INTERNAL_SIP_ERROR"}
09:00:51,170 INFO RestClient - API-ASYNC-pool-13-thread-8 RECEIVED REST OBJECT <==
[URL http://localhost:8081/apps/EchoApp/ErrorStatusEvent has the following content: "You tried to access that URL but we cannot access it's content."]
OBJECT:
{
"nodeId" : "randomnodeId",
"appKey" : "randomApp",
"sessionId" : "/43.224.169.238:30154/10.100.0.10::8443-randomid",
"status" : "INTERNAL_SIP_ERROR",
"info" : "INTERNAL_SIP_ERROR"
}
09:00:51,171 INFO MediaSession - EventScannerThread-29 'CLIENT-randomcallid_/43.224.169.238:30154/10.100.0.10:8443-randomid' has been terminated
09:00:51,171 INFO MediaSession - EventScannerThread-29 Stop MediaSession id: randomcallid_/43.224.169.238:30154/10.100.0.10::8443-randomid
09:00:51,171 INFO MediaSession - EventScannerThread-29 'randomcallid_/43.224.169.238:30154/10.100.0.10::8443-randomid' has been terminated
09:00:51,171 INFO SipCall - EventScannerThread-29 cancelScheduleSessionRefresh
09:00:51,171 INFO WCS4CallbackHandler - EventScannerThread-29 finish SipCall{id='randomcallid', cost='', callee='randomcallee', calleeVisibleName='<sip:randomcallee@randomdomain.com>', caller='randomuser', callerVisibleName='randomuser', isVideoCall=false, incoming=false, terminated=true, state=FINISH, lastResponseStatusCode=500} randomuser@randomdomain.com
09:00:51,171 INFO Streams - EventScannerThread-29 unpublish name: IN_randomuser_randomcallid
09:00:51,171 INFO F - EventScannerThread-29 unpublish name: IN_randomuser_randomcallid
09:00:51,172 INFO RestClient - API-ASYNC-pool-13-thread-8 SEND REST OBJECT ==>
[URL http://localhost:8081/apps/EchoApp/CallStatusEvent has the following content: "You tried to access that URL but we cannot access it's content."]
OBJECT:
{
"nodeId" : "randomnodeId",
"appKey" : "randomApp",
"sessionId" : "/43.224.169.238:30154/10.100.0.10::8443-randomid",
"callId" : "randomcallid",
"callUuid" : "randomuuid",
"incoming" : false,
"status" : "FINISH",
"caller" : "randomuser",
"callee" : "randomcallee",
"localAudioCodec" : "PCMA",
"remoteAudioCodec" : "PCMA",
"createDate" : 1711443648286,
"endDate" : 1711443651169,
"hasAudio" : true,
"hasVideo" : false,
"visibleName" : "randomuser",
"mediaProvider" : "WebRTC",
"sipStatus" : 500,
"holdForTransfer" : false,
"id" : "randomcallid_/43.224.169.238:30154/10.100.0.10::8443-randomid",
"msrp" : false,
"history" : false
}
09:00:51,172 INFO RetryExec - API-ASYNC-pool-13-thread-8 I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8081: The target server failed to respond
09:00:51,172 INFO RetryExec - API-ASYNC-pool-13-thread-8 Retrying request to {}->http://localhost:8081
09:00:51,172 INFO RestApiRouter - HTTP-pool-3-thread-92 Use controller class com.flashphoner.rest.server.apps.echo_apps.EchoApp with path /apps/EchoApp/CallStatusEvent
 

alexayy

New Member
Спасибо за информацию, обновили, наблюдаем, нужны ли дополнительные настройки в фале propertis?
 

Max

Administrator
Staff member
Спасибо за информацию, обновили, наблюдаем, нужны ли дополнительные настройки в фале propertis?
Нет, дополнительные настройки не нужны
 
Top