天天看點

freeswitch兩個DTMF轉換接口的差別

作者:求真得真
freeswitch兩個DTMF轉換接口的差別

概述

freeswitch支援三種模式的DTMF傳輸方式,分别時inband、INFO、2833。

在傳統的PSTN網絡中,所有的DTMF碼都是inband模式,是以VOIP網絡和PSTN網絡對接中,需要将DTMF碼做格式轉換,通常是2833和inband之間的轉換。

環境

centos:CentOS release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

inband到2833的兩個接口

freeswitch中有兩個inband到2833格式的轉換接口,分别是“start_dtmf”和“spandsp_start_dtmf”。

兩個接口的功能是一樣的,都是檢測inband中的DTMF按鍵波形。

<action application="start_dtmf" />

<action application="spandsp_start_dtmf"/>

fs官方的描述中已經有明确說明,“start_dtmf”接口為老版本接口,盡量使用“spandsp_start_dtmf”來實作業務。

那麼,這兩個接口有什麼差別呢。

start_dtmf測試

配置dialplan撥号計劃如下。

<include>

<context name="out2in">

<extension name="sbc-out2in" continue="true">

<condition field="destination_number" expression="^(\d+)#34;>

<action application="export" data="nolocal:execute_on_media=start_dtmf" />

<action application="bridge" data="{sip_invite_call_id=${sip_call_id}

}sofia/external5066/sip:${destination_number}@10.55.55.138:5090"/>

</condition>

</extension>

</context>

</include>

freeswitch兩個DTMF轉換接口的差別

從截圖中,可以看出。

start_dtmf接口有識别出inband中的DTMF碼,并轉換為2833到A路。

但是紅框中的媒體流中的DTMF波形并沒有任何變化。

A路收到的媒體流中,既有inband的DTMF波形,也有2833的DTMF碼。

spandsp_start_dtmf測試

配置dialplan撥号計劃如下。

<include>

<context name="out2in">

<extension name="sbc-out2in" continue="true">

<condition field="destination_number" expression="^(\d+)#34;>

<action application="export" data="min_dup_digit_spacing_ms=40"/>

<action application="export" data="spandsp_dtmf_rx_threshold=-42"/>

<action application="export" data="spandsp_dtmf_rx_twist=8"/>

<action application="export" data="spandsp_dtmf_rx_reverse_twist=6"/>

<action application="export" data="spandsp_dtmf_rx_filter_dialtone=true"/>

<action application="export" data="nolocal:execute_on_media=spandsp_start_dtmf" />

<action application="bridge" data="{sip_invite_call_id=${sip_call_id}

}sofia/external5066/sip:${destination_number}@10.55.55.138:5090"/>

</condition>

</extension>

</context>

</include>

freeswitch兩個DTMF轉換接口的差別

從截圖中,可以看出。

spandsp_start_dtmf接口有識别出inband中的DTMF碼,并轉換為2833到A路。

同時,紅框中的媒體流中的DTMF波形被過濾掉了大部分,遺留部分的波形大概有30ms左右,當A路裝置(如TG)會同時檢測2833和inband時,仍然有機率會發生重碼的問題。

A路收到的媒體流中,有2833的DTMF碼,和少量inband的DTMF碼波形。

總結

freeswitch的“spandsp_start_dtmf”接口,表現更好,功能性更完整。

freeswitch的DTMF從inband轉換為2833的功能仍然有缺陷,表現為inband中的波形過濾不完全,會造成後續節點識别DTMF時重碼的問題。

後續我們再研究如何解決該問題。

空空如常

求真得真

繼續閱讀