Вы здесь

DTMF и его настройка. Часть1. Теория

DTMF (Dual-Tone MultiFrequency) - это тональный сигнал, генерируемый при нажатии на кнопки телефона.
DTMF широко применяется в работе автоответчиков (IVR), для различных интерактивных систем. В приложении к VoIP, при работе с различными кодеками DTMF требует довольно пристального внимания, поэтому его работу нужно четко понимать.

По умолчанию Gateway отсылает DTMF в потоке RTP (in-band), это прекрасно работает при использовании кодека high-bit-rate G.711, т.е. если голосовой поток не подвергается сжатию.
Основная проблема с DTMF возникает при использовании алгоритмов сжатия, например кодека G.729. Дело в том, что при сжатии качество голового потока заметно ухудшается, и хотя это почти не сказывается на способности абонентов понимать друг друга, DTMF тон уже не достаточно четкий и воспринимается неправильно.
dtmf_i_ego_nastroyka_dtmf_g729_ciscomaster.ru.jpg

Данная проблема решается с помощью DTMF Relay, при котором сигналы DTMF транспортируются отдельно от потока RTP или out-of-band.

Рассмотрим несколько примеров.
dtmf_i_ego_nastroyka_cucm_h.323_dtmf_ciscomaster.ru_0.jpg
На рисунке изображена схема подключения телефонии через шлюз H.323.

На участке PSTN DTMF отдается in-band, т.е. там даже нет понятия DTMF Relay, поскольку это аналоговая линия.

DTMF relay становится нужным только на участке VoIP, где возможно применения методов компрессии.
Также можно сказать, что:
- in-band DTMF relay будет идти внутри потока RTP, т.е. на рисунке по красной линии RTP.
- out-of-band DTMF relay будет идти вместе с сигнализацией, т.е. по зеленым линиям на рисунке.

На участках телефон-CUCM и CUCM-H.323Gateway используется разная сигнализация, и значит различные методы DTMF relay. Со стороны телефона приходит SCCP messages, содержащие DTMF в своей кодировке, со стороны H.323 gateway сигнализация вместе с DTMF идет H.245 messages.
CUCM в нашем случае выступает как DTMF Forwarder между различными типами сигнализаций.

На участке телефон-CUCM у нас будет возможна только out-of-band, поскольку SCCP-шный телефон не поддерживает in-band.
На участке CUCM-H.323Gateway возможны методы как in-band, так и out-of-band. При этом в случае SCCP-шного телефона, для включения in-band потребуется использование MTP.

Также нужно понимать, что настройки DTMF для H.323 Trunk - это есть настройки для работы этого транка с Dial-peer на физическом H.323 Gateway.

В зависимости от протокола сигнализации (H.323, SIP, MGCP, SCCP), существуют различные методы для осуществления DTMF Relay. В любом случае, Call Manager CUCM изначально пытается некоциировать общий для всех метод. Если ощий метод найден не был, предпринимается попытка использовать MTP.

H.323 DTMF Support

Cisco Gateways поддерживает следующие методы DTMF Relay:

  • Cisco proprietary: - in-band DTMF relay. DTMF отсылается в том же потоке RTP как и голос, но тоны DTMF кодируются несколько иначе, что позволяет их успешно отличать и принимать на той стороне. Семплы DTMF идентифицируются как RTP payload type 121. Метод работает только если на обоих сторонах оборудование Cisco, а также тот же метод

    Дебаг:
    В одном из источников рекомендуется debug voice rtp session named-event, но у меня не сработало.
    Результат дал только этот дебаг: debug h245 asn1

  • H.245 Alphanumeric: -Out-of-band DTMF relay. Отделяет DTMF от потока RTP и шлет их через H.245 User Input Indication messages. При этом методе не отсылается tone length: всегда считается что длина тона 500msec.
    В этом примере мы нажали на "5".

    Дебаг: debug h245 asn1

  • H.245 Signal: -Out-of-band DTMF relay. Этот метод способен отсылать длину тона (tone length).

    Дебаг: debug h245 asn1

  • NTE: - in-band DTMF relay. Работает подобно Cisco proprietary, DTMF отсылается в том же потоке RTP как и голос, с использованием RTP payload type. Другая payload не позволяет сэмплы DTMF подвергать сжатию. В отличие от Cisco proprietary, NTE использует стандарт RFC 2833.

    Дебаг: debug h245 asn1

На маршрутизаторе Cisco доступны следующие команды:

router(config-dial-peer)#dtmf-relay ?
  cisco-rtp          Cisco Proprietary RTP
  h245-alphanumeric  DTMF Relay via H245 Alphanumeric IE
  h245-signal        DTMF Relay via H245 Signal IE
  rtp-nte            RTP Named Telephone Event RFC 2833
router(config-dial-peer)#   

Лучшая практика:
На диалпире лучше всего давать команды следующим образом:

dial-peer voice 3000 voip
 description Long calls
 destination-pattern [6-7].[1-5]..
 session target ipv4:192.168.0.11
 dtmf-relay h245-signal h245-alphanumeric cisco-rtp rtp-nte
 codec g711ulaw
 no vad

В этом случае обе стороны могут негоциировать подходящий метод dtmf-relay между собой.

Для определения выбранного DTMF relay method:
show call active voice

router#show call active voice
...........
PeerAddress=5001
...........
tx_DtmfRelay=rtp-nte

Таким образом, CUCM автоматически проверяет какой метод DTMF подойдет обоим сторонам.
Касательно H.323 Gateway в CUCM, там настроек DTMF нет. CUCM принимает настройку другой стороны.

MGCP DTMF Support

Для MGCP доступны следующие методы DTMF Relay:

  • Cisco proprietary: DTMF о