Список форумов Asterisk Forum Asterisk Forum
The Asterisk Open Source PBX - Russian Community
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ПравилаПравила   ГруппыГруппы   ИзбранноеИзбранное    LinksСсылки   РегистрацияРегистрация 
 RSSRSS   ПрофильПрофиль   Войти и проверить личные сообщения   ВходВход 

Проблемы с КПВ и слышимостью при использовании kamaili + asterisk 1.6.0.18 1.6.2.8 и т.д.

 
Список форумов Asterisk Forum -> OpenSER    вывод темы на печать
Предыдущая тема :: Следующая тема  
Автор Сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Чт Июн 17, 2010 11:41    Заголовок сообщения: Проблемы с КПВ и слышимостью при использовании kamaili + asterisk 1.6.0.18 1.6.2.8 и т.д.

Суть в следующем. Когда настраивал asterisk в связке с kamailio был неприятный баг не ходил RTP траф и не было КПВ, на 1.6.0.6 это решилось добавлением Playback(silence/1,noanswer).
Код:

2477811,1,Playback(silence/1,noanswer)
2477811,2,Dial(SIP/039302@sipbalanser,,tT)

КПВ до answer-а пошли, RTP соответственно тоже. И не стали копать в суть данного явления.

Настала потребность обновить asterisk до последних стабильных релизов. И такая схема не заработала. RTP есть, КПВ нет.
В change_log-е обнаружил следующую запись:

apps/app_playback.c, main/pbx.c, /, channels/chan_sip.c,
apps/app_disa.c, configs/sip.conf.sample: Merged revisions 216438
via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk
................ r216438 | oej | 2009-09-04 16:02:34 +0200 (Fre,
04 Sep 2009) | 35 lines Merged revisions 216430 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........
r216430 | oej | 2009-09-04 15:45:48 +0200 (Fre, 04 Sep 2009) | 27
lines Make apps send PROGRESS control frame for early media and
fix too early media issue in SIP The issue at hand is that some
legacy (dying) PBX systems send empty media frames on PRI links
*before* any call progress. The SIP channel receives these frames
and by default signals 183 Session progress and starts sending
media. This will cause phones to play silence and ignore the
later 180 ringing message. A bad user experience. The fix is
twofold: - We discovered that asterisk apps that support early
media ("noanswer") did not send any PROGRESS frame to indicate
early media. Fixed. - We introduce a setting in chan_sip so that
users can disable any relay of media frames before the outbound
channel actually indicates any sort of call progress. In 1.4,
1.6.0 and 1.6.1, this will be disabled for backward
compatibility. In later versions of Asterisk, this will be
enabled. We don't assume that it will change your Asterisk phone
experience - only for the better. We encourage third-party
application developers to make sure that if they have
applications that wants to send early media, add a PROGRESS
control frame transmission to make sure that all channel drivers
actually will start sending early media. This has not been the
default in Asterisk previous to this patch, so if you got
inspiration from our code, you need to update accordingly. Sorry
for the trouble and thanks for your support. This code has been
running for a few months in a large scale installation (over 250
servers with PRI and/or BRI links to old PBX systems). That's no
proof that this is an excellent patch, but, well, it's tested

Покопавшись в гугле обнаружил опцию, которая должна была вернуть поведение старых версий. prematuremedia = yes
ситуация изменилась но с точностью наоборот, теперь есть КПВ но нет RTP.
Начали экспериментировать и оказалось что без kamailio+mediaproxy RTP ходит.
Отсюда возникает подозрение что что-то не так с настройкой kamailio, выкладываю фрагмент конфига kamailio, который заворачивает звонки на asterisk.

Из основного route звонок попадает на route(13), с помощью ds_select_domain("8","4"); выбирается нужный asterisk, который прописан в таблице dispatcher

Код:

route[4].
{
    if (isbflagset(6) || isbflagset(7)).
    {
        if (!isbflagset(8)).
        {
                setbflag(8);
                use_media_proxy();
         };
    };
}

route[13]
{
    t_on_reply("2");
    t_on_failure("1");
    xlog("L_INFO", "route[5]->asterisk node: M=$rm RURI=$ru F=$fu T=$tu IP=$si\n");
    ds_select_domain("8","4");
    route(4);
    t_on_reply("1");
    if( !t_relay() )
    {
            xlog("L_INFO", "ERROR - Can not t_relay(): M=$rm RURI=$ru F=$fu T=$tu IP=$si\n");
            if (method=="INVITE" || method=="ACK")
            {
                end_media_session();
            };
            exit;
    };
    exit;
}

onreply_route[1]
{
    if ((isbflagset(6) || isbflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")).
    {
            if (!search("^Content-Length:[ ]*0")).
            {
                  use_media_proxy();
            };
            if (nat_uac_test("2")).
            {
                 fix_contact();
            };
    };
}


onreply_route[2].
{
    xlog("L_INFO", "onreply_route[2]: M=$rm RURI=$ru F=$fu T=$tu IP=$si\n");
    if (status=~"[12][0-9][0-9]")
    {
        fix_nated_contact();
        exit;
    };
}

failure_route[1]
{
    xlog("L_INFO", "failure_route[1]: M=$rm RURI=$ru F=$fu T=$tu IP=$si\n");
    if( t_check_status("408") )
    {
            xlog( "L_NOTICE", "[$Tf] FR: $ci -- TIMEOUT for Gateway $rd\n" );
    }.
    else.
    {
            xlog( "L_NOTICE", "[$Tf] FR: $ci -- $rs reason $rr\n" );
    };
    if( t_check_status("403") )
    {
            xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Forbidden -> ISDN Cause Code 1\n" );
            return;
    };
    if( t_check_status("486") )
    {
            xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Destination BUSY \n" );
            return;
    };
    if( t_check_status("487") )
    {
           xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Request Cancelled\n" );
           return;
    };
    if( ds_next_domain() )
    {
           t_on_reply("2");
           xlog( "L_NOTICE", "[$Tf] FR: $ci Next gateway $fU -> $tU via $rd\n" );
           if( !t_relay() )
           {
                xlog( "L_INFO", "[$Tf] FR: $ci -- ERROR - Can not t_relay()\n" );
                return;
           };
           return;
    }.
    else.
    {
        xlog( "L_INFO", "[$Tf] FR: $ci No more buscuits in the gateways" );
        t_reply("503", "Service unavailable -- no more gateways" );
        exit;
    };
}


Кто-нибудь знает как это лечить? Или может кто-нибудь поделится конфигом лишенным подобных проблем с КПВ и RTP?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
indeec



Зарегистрирован:
17.05.2009
Сообщения: 87
Откуда: Киев

Статус: Оффлайн 

СообщениеДобавлено: Чт Июн 17, 2010 19:29    Заголовок сообщения:

Нада на сигнализацию смотреть
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vlad1983



Зарегистрирован:
29.03.2009
Сообщения: 4

Статус: Оффлайн 

СообщениеДобавлено: Вс Янв 02, 2011 17:45    Заголовок сообщения:

Нада просто добавить Progress() в диалплан астериска вместо Playback(silence/1,noanswer)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Список форумов Asterisk Forum -> OpenSER Ответить на тему
Страница 1 из 1

Добавить в Избранное

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You cannot download files in this forum