VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asterisk + chan_dongle + RTP

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
vitaleg
Сообщения: 3
Зарегистрирован: 10 ноя 2020, 20:06

Asterisk + chan_dongle + RTP

Сообщение vitaleg »

Привет. Друзья, помогите плз с настройкой Asterisk 16 + chan_dongle. Проблема в NAT, очевидно. Ситуация следующая, если переводить вызов с донгла на внешний транк вот так:

Код: Выделить всё

exten => _+X.,1,Dial(PJSIP/101@5172-100)
exten => _+X.,n,Hangup()
то звука нет и получаем вот такую картину:

Код: Выделить всё

   -- Executing [+1234567890@dongle:1] Dial("Dongle/tan-0100000001", "PJSIP/101@5172-100") in new stack
    -- Called PJSIP/101@5172-100
    -- PJSIP/5172-100-00000005 is ringing
    -- PJSIP/5172-100-00000005 is ringing
       > 0x7317d0 -- Strict RTP learning after remote address set to: 195.122.19.14:31938
    -- PJSIP/5172-100-00000005 answered Dongle/tan-0100000001
    -- Channel PJSIP/5172-100-00000005 joined 'simple_bridge' basic-bridge <91fe51f0-0e67-441d-ad52-fb3def95e36c>
    -- Channel Dongle/tan-0100000001 joined 'simple_bridge' basic-bridge <91fe51f0-0e67-441d-ad52-fb3def95e36c>
    -- Channel PJSIP/5172-100-00000005 left 'simple_bridge' basic-bridge <91fe51f0-0e67-441d-ad52-fb3def95e36c>
    -- Channel Dongle/tan-0100000001 left 'simple_bridge' basic-bridge <91fe51f0-0e67-441d-ad52-fb3def95e36c>
  == Spawn extension (dongle, +1234567890, 1) exited non-zero on 'Dongle/tan-0100000001'
Но, если добавить Answer(), то всё работает:

Код: Выделить всё

exten => _+X.,1,Answer()
exten => _+X.,n,Dial(PJSIP/101@5172-100)
exten => _+X.,n,Hangup()
и выглядит уже вот так:

Код: Выделить всё

-- Executing [+1234567890@dongle:1] Answer("Dongle/tan-0100000003", "") in new stack
    -- Executing [+1234567890@dongle:2] Dial("Dongle/tan-0100000003", "PJSIP/101@5172-100") in new stack
    -- Called PJSIP/101@5172-100
    -- PJSIP/5172-100-0000000b is ringing
    -- PJSIP/5172-100-0000000b is ringing
       > 0x79d370 -- Strict RTP learning after remote address set to: 195.122.19.14:34132
    -- PJSIP/5172-100-0000000b answered Dongle/tan-0100000003
    -- Channel PJSIP/5172-100-0000000b joined 'simple_bridge' basic-bridge <5f8b93c5-94d7-414e-959f-b220ee1c3718>
    -- Channel Dongle/tan-0100000003 joined 'simple_bridge' basic-bridge <5f8b93c5-94d7-414e-959f-b220ee1c3718>
       > 0x79d370 -- Strict RTP switching to RTP target address 195.122.19.14:34132 as source
       > 0x79d370 -- Strict RTP learning complete - Locking on source address 195.122.19.14:34132
    -- Channel Dongle/tan-0100000003 left 'simple_bridge' basic-bridge <5f8b93c5-94d7-414e-959f-b220ee1c3718>
  == Spawn extension (dongle, +1234567890, 2) exited non-zero on 'Dongle/tan-0100000003'
    -- Channel PJSIP/5172-100-0000000b left 'simple_bridge' basic-bridge <5f8b93c5-94d7-414e-959f-b220ee1c3718>
Думаю, что проблема вот в этой настройке, которая происходит только если есть Answer():

> 0x79d370 -- Strict RTP switching to RTP target address 195.122.19.14:34132 as source
> 0x79d370 -- Strict RTP learning complete - Locking on source address 195.122.19.14:34132


Причём если просто звонить с внутреннего клиента на транк - всё прекрасно работает и с Answer и без.

Посоветуйте, пожалуйста, в чём может быть проблема?
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk + chan_dongle + RTP

Сообщение ded »

Из мира GSM => Dongle => SIP:
USB-модем не передаёт голос (RTP) пока не получит Answer, ибо он переключается на ходу с режима SMS (data) в режим voice только если мы снимаем трубку (нажимаем зелёную трубочку на смартфоне).
Если же выполняется с внутреннего SIP клиента абоненту GSM
SIP => Dongle => GSM в мир,
то модем сразу видит, что это голос.
vitaleg
Сообщения: 3
Зарегистрирован: 10 ноя 2020, 20:06

Re: Asterisk + chan_dongle + RTP

Сообщение vitaleg »

Спасибо, но проблема в том, что при звонке на локальный sip клиент - никаких проблем со звуком нет и без Answer()

Код: Выделить всё

exten => _+X.,1,Dial(PJSIP/101)
exten => _+X.,n,Hangup()

Код: Выделить всё

-- Executing [+1234567890@dongle:1] Dial("Dongle/tan-0100000000", "PJSIP/101") in new stack
    -- Called PJSIP/101
[Nov 11 16:06:18] WARNING[2174][C-00000001]: channel.c:1079 channel_indicate: [Dongle/tan-0100000000] Don't know how to indicate condition 22
    -- PJSIP/101-00000000 is ringing
    -- PJSIP/101-00000000 is ringing
       > 0xcf9a60 -- Strict RTP learning after remote address set to: 192.168.100.29:10000
    -- PJSIP/101-00000000 answered Dongle/tan-0100000000
    -- Channel PJSIP/101-00000000 joined 'simple_bridge' basic-bridge <d9da28ef-2d1b-46e2-945e-889852afca49>
    -- Channel Dongle/tan-0100000000 joined 'simple_bridge' basic-bridge <d9da28ef-2d1b-46e2-945e-889852afca49>
       > 0xcf9a60 -- Strict RTP switching to RTP target address 192.168.100.29:10000 as source
    -- Channel Dongle/tan-0100000000 left 'simple_bridge' basic-bridge <d9da28ef-2d1b-46e2-945e-889852afca49>
  == Spawn extension (dongle, +1234567890, 1) exited non-zero on 'Dongle/tan-0100000000'
    -- Channel PJSIP/101-00000000 left 'simple_bridge' basic-bridge <d9da28ef-2d1b-46e2-945e-889852afca49>
И опять здесь есть вот это:

Strict RTP switching to RTP target address 192.168.100.29:10000 as source

Всё-таки, мне кажется, проблема где-то в этом ;(
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk + chan_dongle + RTP

Сообщение ded »

Попробуйте вместо Answer поставить Progress()
vitaleg
Сообщения: 3
Зарегистрирован: 10 ноя 2020, 20:06

Re: Asterisk + chan_dongle + RTP

Сообщение vitaleg »

К сожалению, не помогло, звука так и нет :(

Код: Выделить всё

-- Executing [+1234567890@dongle:1] Progress("Dongle/tan-0100000000", "") in new stack
    -- Executing [+1234567890@dongle:2] Dial("Dongle/tan-0100000000", "PJSIP/101@5172-100") in new stack
    -- Called PJSIP/101@5172-100
[Nov 12 16:15:37] WARNING[2178][C-00000001]: channel.c:1079 channel_indicate: [Dongle/tan-0100000000] Don't know how to indicate condition 22
    -- PJSIP/5172-100-00000000 is ringing
    -- PJSIP/5172-100-00000000 is ringing
       > 0xa3e470 -- Strict RTP learning after remote address set to: 195.122.19.14:17104
    -- PJSIP/5172-100-00000000 answered Dongle/tan-0100000000
    -- Channel PJSIP/5172-100-00000000 joined 'simple_bridge' basic-bridge <9e373e9b-5b1f-44bc-9259-bbd9fdf59a8d>
    -- Channel Dongle/tan-0100000000 joined 'simple_bridge' basic-bridge <9e373e9b-5b1f-44bc-9259-bbd9fdf59a8d>
    -- Channel PJSIP/5172-100-00000000 left 'simple_bridge' basic-bridge <9e373e9b-5b1f-44bc-9259-bbd9fdf59a8d>
    -- Channel Dongle/tan-0100000000 left 'simple_bridge' basic-bridge <9e373e9b-5b1f-44bc-9259-bbd9fdf59a8d>
  == Spawn extension (dongle, +1234567890, 2) exited non-zero on 'Dongle/tan-0100000000'
sir_FreeFrag
Сообщения: 2
Зарегистрирован: 08 янв 2025, 19:41

Re: Asterisk + chan_dongle + RTP

Сообщение sir_FreeFrag »

Влетел ровно в этот же самый баг. Все как у топикстартера.

Кто-нибудь за 4 года смог найти решение?
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk + chan_dongle + RTP

Сообщение ded »

> 0xcf9a60 -- Strict RTP learning after remote address set to: 192.168.100.29:10000
Удалённый адрес не может быть 192.168.100.29, это внутренний адрес. Стало быть проблема прохождения NAT на удалённом узле. Сигнализация при INVITE должна получить внешний, публичный адрес и порт, кудв слать RTP.
sir_FreeFrag
Сообщения: 2
Зарегистрирован: 08 янв 2025, 19:41

Re: Asterisk + chan_dongle + RTP

Сообщение sir_FreeFrag »

В общем, сам спросил, сам отвечаю.

Это какой-то древний баг не то в chan_dongle, не то в PJSip. Способ обхода (workaround) вот такой:

Код: Выделить всё

Dial(PJSIP/someclient,60,A(silence))
Где "silence" -- коротенький звуковой файл с тишиной, например длительностью в 0.1 секунды.

Команда говорит о том, что вызываемому абоненту нужно перед соединением сперва проиграть аудиофайл. Вот я ему и проигрываю целых 0,1 секунды тишины, после чего соединение устанавливается успешно, все всех слышат.

Забавно, но факт. Вышеописанным способом срабатывает. Если убрать "A(silence)", то RTP не проходит. Причем судя по снифферу, Asterisk даже не пытается ничего никуда отправлять.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk + chan_dongle + RTP

Сообщение ded »

Интересное явление. Никогда не сталкивались, хотя сами используем донглы в разных локациях около 15 лет, видимо потому, что не используем chan_pjsip.so
При Dial(SIP/123,,tT) таких трюков не нужно.
Аватара пользователя
Zavr2008
Сообщения: 2215
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Asterisk + chan_dongle + RTP

Сообщение Zavr2008 »

Аналогичное и в OsmoBSC!!!
Спасибо за идею про A(silence), 2 месяца мучался!!!
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH