DTMF (Dual-Tone MultiFrequency) - это тональный сигнал, генерируемый при нажатии на кнопки телефона.
DTMF широко применяется в работе автоответчиков (IVR), для различных интерактивных систем. В приложении к VoIP, при работе с различными кодеками DTMF требует довольно пристального внимания, поэтому его работу нужно четко понимать.
По умолчанию Gateway отсылает DTMF в потоке RTP (in-band), это прекрасно работает при использовании кодека high-bit-rate G.711, т.е. если голосовой поток не подвергается сжатию.
Основная проблема с DTMF возникает при использовании алгоритмов сжатия, например кодека G.729. Дело в том, что при сжатии качество голового потока заметно ухудшается, и хотя это почти не сказывается на способности абонентов понимать друг друга, DTMF тон уже не достаточно четкий и воспринимается неправильно.
Данная проблема решается с помощью DTMF Relay, при котором сигналы DTMF транспортируются отдельно от потока RTP или out-of-band.
Рассмотрим несколько примеров.
На рисунке изображена схема подключения телефонии через шлюз 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.
Cisco Gateways поддерживает следующие методы DTMF Relay:
Дебаг:
В одном из источников рекомендуется debug voice rtp session named-event, но у меня не сработало.
Результат дал только этот дебаг: debug h245 asn1
Дебаг: debug h245 asn1
Дебаг: debug h245 asn1
Дебаг: 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 Relay: