LINUX.ORG.RU
решено ФорумAdmin

Asterisk - проблема с кодеками

 , ilbc, , ulaw


0

3

Гуру телефонии, подскажите. До недавнего времени в Астериске пользовался только alaw/ulaw кодеками, но вот возникла необходимость добавить нетребовательные к трафику кодеки и был выбран iLBC. Теперь не знаю как разрулить проблему когда у одного пира кодек ulaw (например) а у второго iLBC. Конкретно - есть астериск, у него 2 пира в sip.conf:

[101]
context=offices
type=friend
auth=md5
username=101
secret=XXX
callerid="101" <101>
host=dynamic
canreinvite=no
disallow=all
allow=ilbc
allow=ulaw
allow=alaw
nat=yes
transport=udp

[102]
context=offices
type=friend
auth=md5
username=102
secret=XXX
callerid="102" <102>
host=dynamic
canreinvite=no
disallow=all
allow=ilbc
allow=ulaw
allow=alaw
nat=yes
transport=udp

В данном случае 101 использует софтфон от Acrobits, а 102 - бородатая Cisco ATA186. При вызове с 101 (на 101 кодек iLBC) на 102 сразу получаем отлуп - «Circuit/channel congestion» (занято), а вот если наоборот вызывать то всё в порядке и во время вызова на 101 показывает что используется кодек ulaw.

По идее же Asterisk транскодит всё внутри себя и ему должно быть всё равно какие кодеки предпочитают пиры, однако в моём случае это не правда. Пир 102 Cisco ATA186 не поддерживает кодек iLBC и вызов не приходит если звонящий использует именно его. А вот если подправить немного конфиг и для пира 101 указать:

disallow=all
allow=ulaw
allow=alaw
то есть убрав «allow=ilbc», то вызов с 101 на 102 проходит, т.к. 101 в таком случае вынужденно использует кодек ulaw, которые понимает Cisco ATA186.

Не могу понять в чем причина.

Asterisk 1.8.13.1~dfsg1-3+deb7u3

★★★

Могу ошибаться, но на моём опыте все работало только если на клиентах одинаковые кодеки

dvrts ★★★
()
Ответ на: комментарий от Demacr

Пробывал, оставлял 101-му только «allow=ilbc», а 102-му только «allow=ulaw», в итоге получаю «No audio format found to offer.» в обе стороны.

FreeBSD ★★★
() автор топика
Ответ на: комментарий от Demacr

Так тут проблема так сказать более глобальная - как сделать так чтобы пиры, которые подключаются к Астериску с разными кодеками, имели возможность общаться между собой.. мне кажется это нетривиальная задача. Заставить 2-3-4 пользователей использовать один и тот же кодек можно, а если их 100 и у всех разные устройства и т.д.

FreeBSD ★★★
() автор топика
Ответ на: комментарий от FreeBSD

На цисках примерно такая же лабуда была. Список кодеков обширный, но порядок почему-то влияет на работу. Т.е. нет выбора общего на два пира.

Demacr ★★
()
Ответ на: комментарий от Demacr

Ну вот похоже что и с Астериском всё банально, однако я не понимаю почему нельзя (или всё таки можно?) транскодить в Астериске такие звонки когда кодеки разные.

Вот что нашел, https://wiki.asterisk.org/wiki/display/AST/Asterisk 10 Codecs and Audio Formats пишут:

In this case, we have defined 3 peers, each with a different CELT sampling rate. Thus, you'd probably want to set at least two of them to the same CELT rate, so they could call each other.

FreeBSD ★★★
() автор топика
Ответ на: комментарий от Usuychik
voip*CLI> core show translation
         Translation times between formats (in microseconds) for one second of data
          Source Format (Rows) Destination Format (Columns)

           g723   gsm  ulaw  alaw g726aal2 adpcm  slin lpc10  g729 speex  ilbc  g726  g722 siren7 siren14 slin16  g719 speex16 testlaw
     g723     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
      gsm     -     -     2     2     4001     2     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       2
     ulaw     -     2     -     1     4001     2     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       2
     alaw     -     2     1     -     4001     2     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       2
 g726aal2     -     2     2     2        -     2     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       2
    adpcm     -     2     2     2     4001     -     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       2
     slin     -     1     1     1     4000     1     -  4000     -  4000     -  4000     1      -       -   4001     -    8001       1
    lpc10     -     2     2     2     4001     2     1     -     -  4001     -  4001     2      -       -   4002     -    8002       2
     g729     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
    speex     -     2     2     2     4001     2     1  4001     -     -     -  4001     2      -       -   4002     -    8002       2
     ilbc     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
     g726     -     2     2     2     4001     2     1  4001     -  4001     -     -     2      -       -   4002     -    8002       2
     g722     -     2     2     2     4001     2     1  4001     -  4001     -  4001     -      -       -      1     -    4001       2
   siren7     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
  siren14     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
   slin16     -     2     2     2     4001     2     1  4001     -  4001     -  4001     1      -       -      -     -    4000       2
     g719     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
  speex16     -     3     3     3     4002     3     2  4002     -  4002     -  4002     2      -       -      1     -       -       3
  testlaw     -     2     2     2     4001     2     1  4001     -  4001     -  4001     2      -       -   4002     -    8002       -
FreeBSD ★★★
() автор топика
Ответ на: комментарий от Usuychik

Согласно voip-info ILBC не поставляется в составе Астериска начиная с версии 1.6 , его надо доустанавливать ручками.

Ставил астериск из репа Debian Wheezy, iLBC работает между пирами которые его поддерживают из коробки. Возможно он уже включен в репозитории Дебиана.

FreeBSD ★★★
() автор топика
Ответ на: комментарий от Usuychik

В общем теперь понятно что в Астериске транскодинг называется как трансляция, и из таблицы ясно что с чем можно мешать. Сделал на одном пире gsm, на втором оставил ulaw - теперь общаются между собой без проблем.

Спасибо за наводку!

FreeBSD ★★★
() автор топика
Ответ на: комментарий от FreeBSD

Он между пирами работает, потому что Астериск при связи с одинаковыми кодеками никак не учавствует в обработке rtp-трафика (раскодировкой занимаются только кклиенты). А вот при разных кодеках трафик необходимо декодировать и если Астериск не умеет один из кодеков, то он не сможет соеденить клиентов.

Usuychik
()
Ответ на: комментарий от FreeBSD

Посмотреть установленные кодеки можно командой

ls /usr/lib/asterisk/modules/ | grep codec

Usuychik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.