2013-09-02 4 views
0

Привет, я интегрирую Asterisk с OpenSIPS в качестве медиа-сервисов. Я тестирую конференцию Asterisk и голосовую почту, но у меня есть проблема, когда я звоню на конференцию, отбрасывается через 30 секунд.Служба Asterisk Media с opensips

OpenSIPS и звездочки в том же окне

OpenSIPS 5060 Звездочка 5080

My logs в журнале появляется как вопросы, NAT, но оба находятся в одной коробке, и все мои местные клиенты UA не удаленный

мой конфиг opensips.cfg

http://www.netsoluciones.com/opensip.txt

любая помощь приветствуется!

ответ

0

Я не могу видеть, какой пакет он жалуется, но я предполагаю, что сервер не видит ACK от клиента - если это услуга конференции абонент отправит INVITE, Asterisk будет отвечать 200/OK и вызывающему предполагается отправить ACK. 200/OK будет «критическим пакетом», упомянутым в журналах.

Пробуйте отслеживать все соединения отдельно. Убедитесь, что OpenSips корректно передает ACK (это может быть сложно реализовать, убедитесь, что обрабатываются как строгие, так и свободные варианты маршрута). Убедитесь, что OpenSips не пытается переписать поле контакта, если это сценарий локальной сети.

+0

Thnk viraptor для быстрого ответа, возможно, вы можете увидеть мой код opensips.cfg и помочь мне найти ошибку. – rickygm

+0

Добавьте его к вопросу, это не может повредить :) – viraptor

+0

ребята OpenSIPS загружают мои настройки, чтобы помочь мне найти проблему, я добавляю ее в начало сообщения – rickygm

0

Это на самом деле общая проблема.

Проблема с транспортом RTP - не имеет ничего общего с вашей сигнализацией на портах 5060 или 5080. Пока я не вижу сам пакет, вы получаете тайм-аут RTP, а время ожидания RTP по умолчанию - 30 секунд.

пару вещей, чтобы проверить.

  1. Убедитесь, что в удаленном брандмауэре разрешена конечная точка, в которой вы отправляете носитель (сам поток RTP - порты UDP 10000 - 60000).
  2. Убедитесь, что вы принимаете все порты UDP RTP из удаленных систем - это может быть сложно, и я обычно рекомендую разрешить всем UDP-портам с 1025 до 60000 на SBC, например, тот, который у вас есть, - это не рискованно, как вы не можете разместить или принять вызов без сигнализации (которую вы защитили на портах 5060-5080).
  3. Как отмечал предыдущий комментатор, проверьте NAT и убедитесь, что внешний IP-адрес находится в SIP-пакете должным образом. Если вы хотите, введите следующее в CLI Звездочка:

    глотнуть набор отладки на

затем вставить содержимое отладки в ответ на это, и я могу помочь дальше.

  1. Вы также можете установить атрибут 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; 
    } 
+0

Привет, спасибо за ответы, открыл порты на брандмауэре on и 1025: 60000 10000: 60000 udp, но проблема продолжается, я PASTE DE LOG звездочки http://www.netsoluciones.com/sip_packet.txt, также отключить брандмауэр – rickygm

+0

Привет, форум, попробуйте воспроизвести этот сценарий был таким же, как на сайте OpenSIPS, и у меня такие же результаты. – rickygm

0

Есть несколько вещей, которые могли бы помещают вызов.

Я перечислю 3, так что вы можете взглянуть:

1) неполучения ACK от вызываемого абонента, сделает его непрерывным генерировать 200 OK затем бросить курить и отправить BYE.

2) RTP Timeout

3) SIP пинг из OpenSIPS Механизм,

Поскольку вы получили тайм-аут повторной передачи, я бы с номером 1 и William ответ является хорошим местом для начала.

У меня возникло несколько проблем в прошлом, когда я запускал Opensips по локальным IP-адресам ... Может быть немного сложно. Кроме того, не забудьте использовать функцию record_routing() на главном маршруте Opensips, чтобы убедиться, что он находится в середине разговора.

+0

http://www.netsoluciones.com/sip_packet_opensips.txt, Привет, я не эксперт в OpenSIPS, и я приспосабливаюсь, чтобы предоставлять некоторые услуги своим пользователям сети, но я застрял на этой части, в основном, на моих скриптах opensips.cfg имеет multidomain и интегрирует обмен сообщениями, а медиа-сервис со звездочкой – rickygm

Смежные вопросы