Это на самом деле общая проблема.
Проблема с транспортом RTP - не имеет ничего общего с вашей сигнализацией на портах 5060 или 5080. Пока я не вижу сам пакет, вы получаете тайм-аут RTP, а время ожидания RTP по умолчанию - 30 секунд.
пару вещей, чтобы проверить.
- Убедитесь, что в удаленном брандмауэре разрешена конечная точка, в которой вы отправляете носитель (сам поток RTP - порты UDP 10000 - 60000).
- Убедитесь, что вы принимаете все порты UDP RTP из удаленных систем - это может быть сложно, и я обычно рекомендую разрешить всем UDP-портам с 1025 до 60000 на SBC, например, тот, который у вас есть, - это не рискованно, как вы не можете разместить или принять вызов без сигнализации (которую вы защитили на портах 5060-5080).
Как отмечал предыдущий комментатор, проверьте NAT и убедитесь, что внешний IP-адрес находится в SIP-пакете должным образом. Если вы хотите, введите следующее в CLI Звездочка:
глотнуть набор отладки на
затем вставить содержимое отладки в ответ на это, и я могу помочь дальше.
- Вы также можете установить атрибут rtpignoreversion в пределах звездочки. Но я бы рекомендовал это в качестве крайней меры. Лучше всего вставить трассировку SIP, как указано выше, чтобы получить корень проблемы.
Если бы я был беттинцем, а иногда я :-) - я бы поставил доллары на пончики, чтобы поток RTP (media) не проходил должным образом между этим сервером и конечной точкой, с которой он обменивается. Трассировка SIP покажет вам проблему с IP-адресом и, я бы сказал, разрешает вам либо открывать брандмауэр, чтобы позволить указанной конечной точке AND/OR убедить вас открыть RTP на этом сервере, открыв порты UDP, упомянутые выше. Если IPTABLES включен, попробуйте отключить его и протестируйте. Опять же, трассировка SIP расскажет нам все, что нам нужно знать, чтобы дать вам точный ответ.
UPDATE после просмотра ЖУРНАЛОВ ----
Похоже, мне сценарий маршрутизации не имеют крючков, необходимые для связывания звездочки в пути, что вы хотите ...
Берет посмотрите на этот скрипт - я использовал это в прошлом. Это потребует некоторой модификации с вашей стороны, но это должно вас заставить ...
Очевидно, что это не весь скрипт маршрутизации - он будет размещен непосредственно перед определениями маршрутов в нижней части вашего скрипта ...
Кроме того, вы заметили, что звездочка не может аутентифицировать пользователя 3012, верно? Я предполагаю, что вы сделали и что это не имеет отношение к вашему вопросу, но я думал, что я должен спросить ...
# ASTERISK HOOK - BEGIN
# media service number? (digits starting with *)
if ($rU=~"^\*[1-9]+") {
# we do provide access to media services only to our
# subscribers, who were previously authenticated
if (!is_from_local()) {
send_reply("403","Forbidden access to media service");
exit;
}
#identify the services and translate to Asterisk extensions
if ($rU=="*1111") {
# access to own voicemail IVR
seturi("sip:[email protected]_IP:ASTERISK_PORT");
} else
if ($rU=="*2111") {
# access to the "say time" announcement
seturi("sip:[email protected]_IP:ASTERISK_PORT");
} else
if ($rU=="*2112") {
# access to the "say date" announcement
seturi("sip:[email protected]_IP:ASTERISK_PORT");
} else
if ($rU=="*2113") {
# access to the "echo" service
seturi("sip:[email protected]_IP:ASTERISK_PORT");
} else
if ($rU=~"\*3[0-9]{3}") {
# access to the conference service
# remove the "*3" prefix and place the "CR_" prefix
strip(2);
prefix("CR_");
rewritehostport("ASTERISK_IP:ASTERISK_PORT");
} else {
# unknown service
seturi("sip:[email protected]_IP:ASTERISK_PORT");
}
# after setting the proper RURI (to point to corresponding ASTERISK extension),
# simply forward the call
t_relay();
exit;
}
# ASTERISK HOOK - END
# do lookup
if (!lookup("location")) {
# ASTERISK HOOK - BEGIN
# callee is not registered, so different to Voicemail
# First add the VM recording prefix to the RURI
prefix("VMR_");
# forward to the call to Asterisk (replace below with real IP and port)
rewritehostport("ASTERISK_IP:ASTERISK_PORT");
route(1);
# ASTERISK HOOK - END
exit;
}
# when routing via usrloc, log the missed calls also
setflag(2);
# arm a failure route in order to catch failed calls
# targeting local subscribers; if we fail to deliver
# the call to the user, we send the call to voicemail
t_on_failure("1");
route(1);
}
route[1] {
if (!t_relay()) {
sl_reply_error();
};
exit;
}
failure_route[1] {
if (t_was_cancelled()) {
exit;
}
# if the failure code is "408 - timeout" or "486 - busy",
# forward the calls to voicemail recording
if (t_check_status("486|408")) {
# ASTERISK HOOK - BEGIN
# First revert the RURI to get the original user in RURI
# Then add the VM recording prefix to the RURI
revert_uri();
prefix("VMR_");
# forward to the call to Asterisk (replace below with real IP and port)
rewritehostport("ASTERISK_IP:ASTERISK_PORT");
t_relay();
# ASTERISK HOOK - END
exit;
}
Thnk viraptor для быстрого ответа, возможно, вы можете увидеть мой код opensips.cfg и помочь мне найти ошибку. – rickygm
Добавьте его к вопросу, это не может повредить :) – viraptor
ребята OpenSIPS загружают мои настройки, чтобы помочь мне найти проблему, я добавляю ее в начало сообщения – rickygm