"
FreeSWITCH檢測DTMF數(shù)據(jù)的方法有三種:RFC2833(帶內(nèi)檢測)、SIPINFO(帶外檢測)、INBAND(帶內(nèi)RTP檢測),下面我們就來詳細(xì)了解學(xué)習(xí)一下。
一、RFC2833
1.介紹:
RFC2833為帶內(nèi)檢測方式,通過RTP傳輸,由特殊的rtpPayloadType即TeleponeEvent來標(biāo)示RFC2833數(shù)據(jù)包。同一個DTMF按鍵通常會對應(yīng)多個RTP包,這些RTP數(shù)據(jù)包的時間戳均相同,此可以作為識別同一個按鍵的判斷依據(jù),最后一包RTP數(shù)據(jù)包的end標(biāo)志置1表示DTMF數(shù)據(jù)結(jié)束。
另外,很多SIP UA默認(rèn)的TeleponeEvent都為101,但可以人為修改,這時要求在進(jìn)行RFC2833 DTMF檢測之前需事先獲取SDP協(xié)商的TeleponeEvent參數(shù)。
2. 配置:
這是FreeSWITCH默認(rèn)的DTMF檢測配置。
二、SIPINFO
1. 介紹:
SIPINFO為帶外檢測方式,通過SIP信令通道傳輸DTMF數(shù)據(jù)。這種方式甚至比RFC2833更有效。但是由于SIP信令和RTP收發(fā)采用的是不同的端口,所以可能會造成收到DTMF和實(shí)際的聲音不同步。
2. 配置:
修改profile,例如sip_profiles/internal.xml。
三、INBAND
1. 介紹:
INBAND為帶內(nèi)檢測方式,而且與普通的RTP語音包混在一起傳送。在進(jìn)行INBAND DTMF檢測時唯一的辦法就是提取RTP數(shù)據(jù)包進(jìn)行頻譜分析,經(jīng)過頻譜分析得到高頻和低頻的頻率,然后查表得到對應(yīng)的按鍵,進(jìn)行頻譜分析的算法一般為Goertzel,這種算法的實(shí)現(xiàn)也很簡單,網(wǎng)上有很多可以下到,但建議采用定點(diǎn)算法,浮點(diǎn)算法效率很低。
2. 配置:
2.1 修改profile,例如sip_profiles/internal.xml。
2.2 在需要使用的dialplan中增加
<完>
"