Способы определения тональных (DTMF) сигналов в протоколе SIP

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску

Сигналы тонального набора номера/DTMF сигналы в протоколе SIP определяются тремя способами:

  • В аудиопотоке (inband). В этом случае сигнал передается как обычный звук в аудиопотоке и принимающая сторона должна выполнить процедуру распознавания этого сигнала. Следует заметить, что для протокола SIP это не очень хороший способ, так как при использовании кодеков отличных от ulaw или alaw (g711) сигналы будут искажаться и их распознавание будет либо затруднено либо вообще невозможно.
  • С использованием сигнализации RFC2833. В этом случае DTMF сигналы передаются по протоколу RTP отдельно от голосового потока. Каждый аудиопоток в RTP протоколе идентифицируется значением Payload Type. Поэтому голос, например, передается в Paylaod Type=0, а тоны DTMF в PT=101 (можно поменять для согласования с удалённой стороной).
  • Сигналы передаются в сообщении INFO протокола SIP. Пока не сильно распространен.

Таким образом общая схема передачи тональных сигналов между устройствами работающими по протоколу SIP примерно такова:

  • Если устройство передающее сигнал может передавать его с использованием сигнализации, скажем RFC2883, то SIP - шлюз просто транслирует этот сигнал на устройство получатель и, если оно умеет определять такие сигналы - все в порядке, сигнал будет успешно получен. Звук сигнала получатель не услышит.
  • Если же устройство передающее сигнал не может передать его с использованием сигнализации, оно передаст его как стандартный многочастотный звуковой сигнал в аудиопотоке. В этом случае устройство передающее голос (SIP-шлюз) может определить наличие тонального сигнала, вырезать его из аудиопотока и отправить получателю в виде сигнализации либо по протоколу RFC2833, либо в сообщении INFO протокола SIP, либо просто передаст его получателю без изменений как звук. В первом случае получатель скорее всего не услышит сигнала в трубке, но получит его, во втором случае услышит и получит, если сигнал будет правильно распознан среди аудиоданных. Не очень хорошая ситуация получается в случае, когда SIP-шлюз вырезает сигнал из аудиоданных не полностью и отправляет его и в виде сигнализации и обрывки сигнала в аудиоданных. В этом случае, возможно дублирование сигнала, так как он будет получен и в сигнализации и в аудиоданных. Для решения этой проблемы следует использовать параметр InboundDTMFMode в дополнительных параметрах протокола SIP.