AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Выбор кодека оригинатором (динамически)

Newbies/FAQ Forum 8 сообщений -
#1

Имеем: Asterisk 1.8.10.1

Условный пир:

disallow=all
allow=alaw,ulaw,gsm

Условно предположим, что с его стороны доступны в принципе те же 3 кодека (про порядок приоритета - дальше). От пира поступает вызов, предварительно он устанавливает у себя приоритетный кодек (на каждом вызове это может быть разный кодек). Несмотря ни на что, выбирается именно alaw (то есть тот первый по приоритету, который задан именно у меня). Как это ни крути - вызов установится в первом указанном кодеке. Будь то хоть gsm, хоть ulaw.

Примечание: то есть оригинатор задает первый приоритетный кодек при звонке, но не единственно-возможный (в таком случае все стыковалось бы, безусловно, на нем).

Что мы видим при входящем вызове от него в debug:

a=rtpmap:3 GSM/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000

Это то, что желает пир. Но стыкуется все равно на alaw. Если в диалплане жестко задать переменную SIP_CODEC_INBOUND=gsm - вопросов нет, это срабатывает (игнорируя приоритет из sip.conf). Но это может быть не gsm, а также - ulaw.

Вопрос: как диалпланом дернуть первоочередный кодек пришедшего вызова (то есть приоритет его стороны - из SDP BODY)? Тогда бы я мог задать в диалплане данный кодек как и свой приоритетный.

channel audio(native/read/write)format я пробовал - там всегда и везде первый кодек из моего приоритета.


Последний раз редактировалось: bzmn (Пн Дек 09, 2013 15:39)
#2

я в SPA 303 ручками проставлял, use only prefered codec = yes и тогда бегал по любимому кодеку.
#3

CHANNEL(audionativeformat)
_________________
рву шаблоны. дорого.
#4

Игорь @ Чт Ноя 28, 2013 21:43 писал(а):
CHANNEL(audionativeformat)


я уточнил снизу - это не работает. данная переменная назначается уже после объявления кодека, в котором стыканулся пир при входящем вызове.
это удобная переменная, когда нужно послать его вызов, избежав транскодинга

Added after 2 minutes:

Gich @ Ср Ноя 27, 2013 20:27 писал(а):
я в SPA 303 ручками проставлял, use only prefered codec = yes и тогда бегал по любимому кодеку.


это не выход. даже если удастся заставить пир ставить эту опцию для того кодека, в котором он хочет стыкануться. и даже если эта опция будет касаться только моего пира, все равно всегда остается вероятность риска, что в нем не стыканется.
#6

Zavr2008 @ Ср Дек 04, 2013 22:10 писал(а):
canreinvite=yes устарел. Нужно юзать directmedia=yes


Во-первых, вообще не вижу взаимосвязи. Если правильно понимаю параметр - он мне не нужен по определению.
Во-вторых, даже с ним - сути проблемы не меняет.
#7

bzmn @ Пт Дек 06, 2013 01:18 писал(а):
Во-первых, вообще не вижу взаимосвязи. Если правильно понимаю параметр - он мне не нужен по определению.


Дело не в проблеме, дело в неумении читать список изменений параметров sip.conf в различных версиях Asterisk
Цитата:

Имеем: Asterisk 1.8.10.1

Там нет уже параметра canreinvite

Цитата:
Во-вторых, даже с ним - сути проблемы не меняет.

Я и говорил, что это - условие необходимое, но возможно недостаточное)

Чтобы это работало, нужно, чтобы в Dial не было опций tT, еще есть несколько правил..
По поводу же выбора кодека - если обе стороны Вам подконтрольны, просто передавайте его в доп SIP Header, в этом случае еще до Answer всё будет видно.
Еще не ясно что на второй стороне - шифруетесь? где конфиги, где логи?

_________________
http://mh.otx.ru Гибкие SIP/E1 шлюзы Alvis-GW-2E1. Модернизация LDK300/TDA100:VoIP
#8

Цитата:
просто передавайте его в доп SIP Header


думал об этом, но это анал какой-то - пир на той стороне не очень хочет. так-то, можно было бы и разные транки на той стороне завести с разными кодеками и по ним раскидывать. но хочется универсальное решение.
а что тут логировать? вопрос то больше философский - как устанавливать кодек по приоритету со стороны пира, а не своего приоритета.