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

Kamailio/OpenSIPS и другие производные от SER.

Модераторы: Admins, Модераторы

Ответить
ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

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

Сообщение ZloMurz » 17 июн 2010, 11:41

Суть в следующем. Когда настраивал 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
Сообщения: 87
Зарегистрирован: 17 май 2009, 11:46
Откуда: Киев

Сообщение indeec » 17 июн 2010, 19:29

Нада на сигнализацию смотреть

Vlad1983
Сообщения: 4
Зарегистрирован: 29 мар 2009, 11:33

Сообщение Vlad1983 » 02 янв 2011, 17:45

Нада просто добавить Progress() в диалплан астериска вместо Playback(silence/1,noanswer)

Ответить