DTMF配置
DTMF的配置只会影响接收到的DTMF数据,并不会影响DTMF数据的发送和接收。
一般不进行DTMF配置,UE在接收到DTMF数据后就会丢弃,所以听不到DTMF音。一般运营商默认不配置,需要在 overideconfig 文件中进行“DLDtmfMode=1”配置
overideconfig 文件在设备中的路径:EFS --> efsprofiles
DTMF配置排查
成功配置DTMF后,空闲时“DLDtmfMode=2”,工作时“DLDtmfMode=1”
如果没有进行DTMF配置,DTMF全程都为2(“DLDtmfMode=2”)
关键字:DLDtmfMode
//配置后的DTMF
15:29:38.433984 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=1 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150 //工作态:DLDtmfMode=1
15:29:38.433984 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=1 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
15:29:38.810026 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=1 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
15:29:38.810026 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=1 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
15:29:51.720990 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=2 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150 //空闲态:DLDtmfMode=2
//未配置的DTMF
15:23:32.890000 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=2 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
15:23:32.890000 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=2 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
15:23:46.297161 IMS RTP/Medium [qvp_rtp_app_cmd.c 9498] DLDtmfMode=2 disableVarDjtrOpt=0, fltrAlphaVar=90minWVar=3, maxWVar=4, wVarstep=3 sldWinSize=150
DTMF配置
关于在overideconfig 文件中配置DTMF:
- 首先在设备中激活当前问题的MBN
- 导出设备中的 overideconfig 文件
- 根据导出的 overideconfig 文件,匹配代码中的 overideconfig 文件
- 在代码中的 overideconfig 文件中添加配置。
[MEDIA:MediaCommon]
*DLDtmfMode = 1
关于 overideconfig 文件的修改,请参考 KBA-170531044543
DTMG发送流程
1.DTMF发送流程图
2.DTMF发送流程
- CM通过QMI消息接收DTMF启动请求 (RIL --> CM)
- CM向IMS发送带内的DTMF开始发送消息 (CM --> IMS)
- IMS第一次发送DTMF到网络 (IMS --> NW)
- IMS接收DTMF发送消息并完成DTMF发送相关配置(IMS配置)
- CM通过QMI消息返回DTMF启动请求(CM --> RIL)
- IMS继续向网络发送DTMF(IMS --> NW)
- CM通过QMI消息接收DTMF释放/停止请求(RIL --> CM)
- CM向IMS发送带内的DTMF结束发送消息(CM --> IMS)
- IMS接收DTMF结束消息并完成DTMF结束相关配置(IIMS配置)
- CM通过QMI消息返回DTMF释放/停止请求(CM --> RIL)
- DTMF发送结束标识(IMS --> NW)
- IMS发送DTMF到网络的 RTP 数据包(IMS --> NW)
15:30:05.694244 QMI_MCS_QCSI_PKT Length: 49 //CM通过QMI消息接收DTMF启动请求
15:30:05.694219 Call Manager/Medium [cmipapp.c 5645] =CM= CM->IMS: CMIPAPP: Send start inband DTMF for call 10, as_id 0 //CM向IMS发送带内的DTMF开始发送消息
15:30:05.694219 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 20, end_bit = 0 //IMS第一次发送DTMF到网络
15:30:05.694219 IMS/High [qipcalldtmf.c 373] qipcall_start_dtmf_rpt_conf: Block call rpt ind = 0,Call Id=10, State=14, status = 1 //IMS接收DTMF发送消息并完成DTMF发送相关配置
15:30:05.695010 QMI_MCS_QCSI_PKT Length: 55 //CM通过QMI消息返回DTMF启动请求
15:30:05.714271 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 40, end_bit = 0 //IMS继续向网络发送DTMF
15:30:05.735052 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 60, end_bit = 0
15:30:05.755000 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 80, end_bit = 0
15:30:05.775104 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 100, end_bit = 0
15:30:05.795313 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 120, end_bit = 0
15:30:05.815469 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 140, end_bit = 0
15:30:05.835521 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 160, end_bit = 0
15:30:05.853073 QMI_MCS_QCSI_PKT Length: 48 //CM通过QMI消息接收DTMF释放/停止请求
15:30:05.853073 Call Manager/Medium [cmipapp.c 5703] =CM= CMIPAPP: Send stop inband DTMF for call 10, sub 0 //CM向IMS发送带内的DTMF结束发送消息
15:30:05.853073 IMS/High [qipcalldtmf.c 418] qipcall_stop_dtmf_rpt_conf: Block call rpt ind 0. Call Id=10, State=14, status =1 //IMS接收DTMF结束消息并完成DTMF结束相关配置
15:30:05.853073 QMI_MCS_QCSI_PKT Length: 55 //CM通过QMI消息返回DTMF释放/停止请求
15:30:05.855339 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1 //DTMF发送结束标识
15:30:05.875990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.895990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
3.DTMF发送详细过程及log分析
3.1、CM通过QMI消息接收DTMF启动请求
在DTMF开始发送时,首先通过QMI消息的下发,UE接收到DTMF发送的命令及相关信息。QMI的请求消息正常情况下,都会有响应消息相对应
关键字:QMI --> voice_start_cont_dtmf
//DTMF按键请求
15:30:05.694244 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Request //DTMF请求消息
Counter = 419
......
Service_VOICE {
ServiceVOICEV2 {
voice_start_cont_dtmf {
voice_start_cont_dtmf_reqTlvs[0] {
Type = 0x01
Length = 2
cont_dtmf_info {
call_id = 255
digit = 49 //键值对应ASCALL值,这是49即数字1
}
}
}
}
}
}
//DTMF按键请求响应
15:30:05.695010 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Response //DTMF请求响应
Counter = 419
...
Service_VOICE {
ServiceVOICEV2 {
voice_start_cont_dtmf {
voice_start_cont_dtmf_respTlvs[0] {
Type = 0x02
Length = 4
resp {
result = QMI_RESULT_SUCCESS //DTMF请求成功
error = QMI_ERR_NONE
}
}
voice_start_cont_dtmf_respTlvs[1] {
Type = 0x10
Length = 1
call_id {
call_id = 1
}
}
}
}
}
}
3.2、CM向IMS发送带内的DTMF开始发送消息
CM接收到DTMF发送的消息,然后发送带内的消息,告诉IMS:需要发送DTMF到网络
关键字:Send start inband DTMF
15:30:05.694219 Call Manager/Medium [cmipapp.c 5645] =CM= CM->IMS: CMIPAPP: Send start inband DTMF for call 10, as_id 0
3.3、IMS第一次发送DTMF到网络
IMS接收到来自CM的消息后,开始第一次尝试发送DTMF到网络。如果发送成功,会在后续进行资源分配。第一次的发送可以认为是与网络初次连接
第一次发送的“持续时间(duration)"一般从20ms开始,当然也有少数从40ms开始。)。正常的数据发送的结束bit位都为0(end_bit = 0)
第一次发送也会携带“键值”
关键字:Sending dtmf for digit
15:30:05.694219 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 20, end_bit = 0
3.4、IMS接收DTMF发送消息并完成DTMF发送相关配置
在第一次发送成功后,IMS与网络建立通信,IMS开始进行配置,分配资源。在发送结束时会再次进行配置,将资源回收
关键字:qipcall_start_dtmf_rpt_conf
15:30:05.694219 IMS/High [qipcalldtmf.c 373] qipcall_start_dtmf_rpt_conf: Block call rpt ind = 0,Call Id=10, State=14, status = 1
3.5、CM通过QMI消息返回DTMF启动请求
在第一次发送完成,并完成配置后,IMS与网络的通道已经建立,CM通过QMI返回DTMF发送的请求
关键字:QMI --> voice_start_cont_dtmf
//DTMF按键请求响应 --- 同上
15:30:05.695010 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Response //DTMG请求响应
Counter = 419
...
Service_VOICE {
ServiceVOICEV2 {
voice_start_cont_dtmf {
voice_start_cont_dtmf_respTlvs[0] {
Type = 0x02
Length = 4
resp {
result = QMI_RESULT_SUCCESS //DTMF请求成功
error = QMI_ERR_NONE
}
}
voice_start_cont_dtmf_respTlvs[1] {
Type = 0x10
Length = 1
call_id {
call_id = 1
}
}
}
}
}
}
3.6、IMS继续向网络发送DTMF
QMI的返回标志着准备工作已经就绪,接着IMS会把DTMF信息发送到网络。如果第一次发送时20ms开始,DTMF信息发送到160ms就会完成,后续从180ms开始停止工作。如果第一次发送时40ms开始,DTMF信息发送到180ms就会完成,后续从200ms开始停止工作
关键字:Sending dtmf for digit
15:30:05.714271 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 40, end_bit = 0
15:30:05.735052 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 60, end_bit = 0
15:30:05.755000 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 80, end_bit = 0
15:30:05.775104 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 100, end_bit = 0
15:30:05.795313 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 120, end_bit = 0
15:30:05.815469 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 140, end_bit = 0
15:30:05.835521 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 160, end_bit = 0
3.7、CM通过QMI消息接收DTMF释放/停止请求
在DTMF发送结束时,CM收到QMI消息,UE接收到DTMF发送结束的命令及相关信息,开始执行DTMF结束相关的操作。
关键字:QMI --> voice_stop_cont_dtmf
15:30:05.853073 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Request //DTMF发送结束请求
Counter = 420
...
Service_VOICE {
ServiceVOICEV2 {
voice_stop_cont_dtmf {
voice_stop_cont_dtmf_reqTlvs[0] {
Type = 0x01
Length = 1
call_id {
call_id = 255
}
}
}
}
}
}
3.8、CM向IMS发送带内的DTMF结束发送消息
CM接收到DTMF结束发送的消息,然后发送带内的消息,告诉IMS:DTMF发送结束
关键字:Send stop inband DTMF
15:30:05.853073 Call Manager/Medium [cmipapp.c 5703] =CM= CMIPAPP: Send stop inband DTMF for call 10, sub 0
3.9、IMS接收DTMF结束消息并完成DTMF结束相关配置
IMS收到DTMF发送结束的信息,IMS开始进行结束配置,回收资源。结束DTMF发送
关键字:qipcall_stop_dtmf_rpt_conf
15:30:05.853073 IMS/High [qipcalldtmf.c 418] qipcall_stop_dtmf_rpt_conf: Block call rpt ind 0. Call Id=10, State=14, status =1
3.10、CM通过QMI消息返回DTMF释放/停止请求
IMS进行结束配置成功后,DTMF发送基本完成,QMI返回结束
关键字:QMI --> voice_stop_cont_dtmf
15:30:05.853073 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Response //DTMF发送结束请求响应
Counter = 420
...
Service_VOICE {
ServiceVOICEV2 {
voice_stop_cont_dtmf {
voice_stop_cont_dtmf_respTlvs[0] {
Type = 0x02
Length = 4
resp {
result = QMI_RESULT_SUCCESS //操作成功
error = QMI_ERR_NONE
}
}
voice_stop_cont_dtmf_respTlvs[1] {
Type = 0x10
Length = 1
call_id {
call_id = 1
}
}
}
}
}
}
3.11、DTMF发送结束标识
在”DTMF发送结束配置成功”及“结束DTMF发送请求QMI响应成功”后,最后发送 3次 DTMF结束标志(end_bit = 1),跟网络再见
关键字:Sending dtmf for digit
15:30:05.855339 IMS/Medium [ qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.875990 IMS/Medium [ qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.895990 IMS/Medium [ qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
3.12、IMS发送DTMF到网络的 RTP 数据包(IMS --> NW)
IMS是通过RTP包将DTMF信息发送到网络,RTP包是UE与网络数据交互的一种方式
关键字:0x1568
15:30:05.694219 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 20, end_bit = 0
15:30:05.694244 IMS RTP SN and Payload Length: 62 //RTP包
Version = 12
Version 12 {
Direction = UE_TO_NETWORK
Rat Type = LTE
Sequence = 304
Ssrc = 1114439703
Rtp Time stamp = 174400
CodecType = TELEPHONY_EVENT
mediaType = AUDIO
PayLoad Size = 16
Logged Payload Size = 4
DTMF {
Marker = 1
Event = 1
End bit = 0
Volume dbm0 = 10 dBm
Volume DbFs = 13
Duration = 320 //320开始
High Frequency = 1209
Low Frequency = 697
}
Latency Info Present = 0
Latency Block None {
}
Rtp Raw Payload = { 1, 10, 1, 64 }
Rtp Redundant Indicator = Original RTP Packet
}
15:30:05.714271 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 40, end_bit = 0
15:30:05.715010 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 640
}
15:30:05.735052 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 60, end_bit = 0
15:30:05.735054 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 960
}
15:30:05.755000 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 80, end_bit = 0
15:30:05.755001 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1280
}
15:30:05.775104 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 100, end_bit = 0
15:30:05.775112 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1600
}
15:30:05.795313 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 120, end_bit = 0
15:30:05.795337 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1920
}
15:30:05.815469 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 140, end_bit = 0
15:30:05.815488 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2240
}
15:30:05.835521 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 160, end_bit = 0
15:30:05.835532 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2560
}
15:30:05.855339 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.856003 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2880
}
15:30:05.875990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.876003 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2880
}
15:30:05.895990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.896014 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2880
}
DTMF接收流程
Qualcomm IMS解决方案提供FR#25100支持播放接收方向DTMF事件通过 IMS -> MMODE -> QMI 报告路径,以便 OEM 可以在 AP 侧实现。已集成 FR#25100 的构建,IMS 将报告接收方向 DTMF 到模式。
在发送端发送DTMF包后,通过网络发送到接收端。接收端开始接收DTMF数据并处理。发送端发送DTMF与接收端接收DTMF是一个相互的过程,即发送端发送一次,接收端就需要接收一次,如果中间有差别,很可能网络出现了问题
- IMS收到DTMF的网络数据包 (NW --> IMS)
- IMS将DTMF信息发送到CM (IMS --> CM)
- CM中的call进行进行DL DTMF时间接收
- CM进行DTMF发送其他模块响应
15:30:05.276019 IMS RTP SN and Payload Length: 62 //IMS收到DTMF的网络数据包
15:30:05.296006 IMS RTP SN and Payload Length: 62
15:30:05.317045 IMS RTP SN and Payload Length: 62
15:30:05.330990 Call Manager/High [cmtask.c 10918] =CM= CM<< IP cmd:642 //IMS将DTMF信息发送到CM/MMODE
15:30:05.330990 IMS/Medium [qipcalldtmf.c 658] qipcall_process_dl_dtmf_event: indication type = 0, call_id = 1, volume = 10, digit = 49 //CM中的call进行进行DL DTMF时间接收
15:30:05.330990 Call Manager/High [cmdbg.c 3957] =CM= <<CM inbandevt=9 <1> //CM进行DTMF发送其他模块响应
15:30:05.341097 IMS RTP SN and Payload Length: 62 //IMS收到DTMF的网络数据包
15:30:05.360008 IMS RTP SN and Payload Length: 62
15:30:05.401042 IMS RTP SN and Payload Length: 62
15:30:05.440002 IMS RTP SN and Payload Length: 62
15:30:05.481025 IMS RTP SN and Payload Length: 62
15:30:05.490260 Call Manager/High [cmtask.c 10918] =CM= CM<< IP cmd:643 //IMS将DTMF信息发送到CM/MMODE
15:30:05.490260 IMS/Medium [qipcalldtmf.c 658] qipcall_process_dl_dtmf_event: indication type = 2, call_id = 1, volume = 10, digit = 49 //CM中的call进行进行DL DTMF时间接收
15:30:05.490260 Call Manager/High [cmdbg.c 3957] =CM= <<CM inbandevt=10 <1> //CM进行DTMF发送其他模块响应
1.IMS收到DTMF的网络数据包
IMS通过RTP包与网络进行交互,在LTE产品中,RTP包是 0x1568。一般RTP包中从320开始,一次增加320,并且与发送端一一对应
关键字:0x1568 --> DTMF
//发送端
15:30:05.694219 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 20, end_bit = 0
15:30:05.694244 IMS RTP SN and Payload Length: 62 //Duration = 320
15:30:05.714271 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 40, end_bit = 0
15:30:05.715010 IMS RTP SN and Payload Length: 62 //Duration = 640
15:30:05.735052 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 60, end_bit = 0
15:30:05.735054 IMS RTP SN and Payload Length: 62 //Duration = 960
15:30:05.755000 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 80, end_bit = 0
15:30:05.755001 IMS RTP SN and Payload Length: 62 //Duration = 1280
15:30:05.775104 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 100, end_bit = 0
15:30:05.775112 IMS RTP SN and Payload Length: 62 //Duration = 1600
15:30:05.795313 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 120, end_bit = 0
15:30:05.795337 IMS RTP SN and Payload Length: 62 //Duration = 1920
15:30:05.815469 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 140, end_bit = 0
15:30:05.815488 IMS RTP SN and Payload Length: 62 //Duration = 2240
15:30:05.835521 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 160, end_bit = 0
15:30:05.835532 IMS RTP SN and Payload Length: 62 //Duration = 2560
15:30:05.855339 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.856003 IMS RTP SN and Payload Length: 62 //Duration = 2880
15:30:05.875990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.876003 IMS RTP SN and Payload Length: 62 //Duration = 2880
15:30:05.895990 IMS/Medium [qipcalldtmf.c 896] -----> Sending dtmf for digit = 49, duration = 180, end_bit = 1
15:30:05.896014 IMS RTP SN and Payload Length: 62 //Duration = 2880
//接收端
15:29:57.227009 IMS RTP SN and Payload Length: 62 //接收消息位
Version = 12
Version 12 {
Direction = UE_TO_NETWORK
Rat Type = LTE
Sequence = 260
Ssrc = 2261344487
Rtp Time stamp = 87680
CodecType = TELEPHONY_EVENT
mediaType = AUDIO
PayLoad Size = 16
Logged Payload Size = 4
DTMF {
Marker = 1
Event = 1
End bit = 0
Volume dbm0 = 10 dBm
Volume DbFs = 13
Duration = 320
High Frequency = 1209
Low Frequency = 697
}
Latency Info Present = 0
Latency Block None {
}
Rtp Raw Payload = { 1, 10, 1, 64 }
Rtp Redundant Indicator = Original RTP Packet
}
15:29:57.247093 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 640
}
15:29:57.267104 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 960
}
15:29:57.287081 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1280
}
15:29:57.307006 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1600
}
15:29:57.328016 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 1920
}
15:29:57.348004 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2240
}
15:29:57.368170 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2560
}
15:29:57.387013 IMS RTP SN and Payload Length: 62 //接收结束位
DTMF {
Duration = 2880
}
15:29:57.408157 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2880
}
15:29:57.428256 IMS RTP SN and Payload Length: 62
DTMF {
Duration = 2880
}
2.IMS将DTMF信息发送到CM/MMODE
IMS将收到DTMF发送到CM,在CM及逆行处理。IMS分两次发送,其中DTMF的标识为”642“,”643“
关键字:cmtask
15:30:05.330990 Call Manager/High [cmtask.c 10918] =CM= CM<< IP cmd:642
15:30:05.490260 Call Manager/High [cmtask.c 10918] =CM= CM<< IP cmd:643
关于IP cmd 的的说明
cmll.h
typedef enum cm_name_e{
...
CM_IP_CALL_START_DTMF_IND, /* 642 --> DTMF IMD sent by IMS for starting MT DTMF --> IMS发送用于启动MT DTMF的DTMF IMD */
CM_IP_CALL_STOP_DTMF_IND, /* 643 --> DTMF IMD sent by IMS for stopping MT DTMF --> IMS发送用于停止MT DTMF的DTMF IMD */
...
}cm_name_type;
3.CM中的call进行进行DL DTMF时间接收
在CM中我们可以看到来自IMS模块的消息,在消息中我们可以看到”键值(digit = 49)“
关键字:qipcall_process_dl_dtmf_event
15:30:05.330990 IMS/Medium [qipcalldtmf.c 658] qipcall_process_dl_dtmf_event: indication type = 0, call_id = 1, volume = 10, digit = 49
15:30:05.490260 IMS/Medium [qipcalldtmf.c 658] qipcall_process_dl_dtmf_event: indication type = 2, call_id = 1, volume = 10, digit = 49
4.CM进行DTMF发送其他模块响应
CM在接收到DTMF后会进行会转到响应的模块进行处理。CM会转移很多消息事件到其他模块,其中,DTMG相关的”inbandevt”分别是”9和10”
15:30:05.330990 Call Manager/High [cmdbg.c 3957] =CM= <<CM inbandevt=9 <1>
15:30:05.490260 Call Manager/High [cmdbg.c 3957] =CM= <<CM inbandevt=10 <1>
关于带内事件的说明
/*带内事件的枚举。客户端可以向CM注册,以获得这些带内事件的任何子集的通知。*/
typedef enum cm_inband_event_e {
/* -1 */
CM_INBAND_EVENT_NONE=-1,
/**< FOR INTERNAL CM USE ONLY! --> 最小值,仅供内部CM使用!*/
/* 0 */
CM_INBAND_EVENT_REV_BURST_DTMF,
/**< Send a CDMA-burst DTMF --> 发送CDMA突发DTMF */
/* 1 */
CM_INBAND_EVENT_REV_START_CONT_DTMF,
/**< Start a continuous DTMF tone --> 开始连续双音多频音 */
/* 2 */
CM_INBAND_EVENT_REV_START_CONT_DTMF_CONF,
/**< Confirm that a continuous DTMF tone is played (WCDMA/GSM/TDS only) --> 确认已连续播放DTMF音调(仅限WCDMA/GMS/TDS) */
/* 3 */
CM_INBAND_EVENT_REV_STOP_CONT_DTMF,
/**< Stop a continuous DTMF tone --> 停止连续的双音多频音 */
/* 4 */
CM_INBAND_EVENT_REV_STOP_CONT_DTMF_CONF,
/**< Confirm a that continuous DTMF tone is stopped (WCDMA/GSM/TDS only) --> 确认连续DTMF音已停止(仅限WCDMA/GMS/TDS) */
/* 5 */
CM_INBAND_EVENT_FWD_BURST_DTMF,
/**< Received a CDMA-burst DTMF message --> 收到CDMA突发DTMF消息 */
/* 6 */
CM_INBAND_EVENT_FWD_START_CONT_DTMF,
/**< Received a start continuous DTMF tone order --> 收到开始连续DTMF音指令 */
/* 7 */
CM_INBAND_EVENT_FWD_STOP_CONT_DTMF,
/**< Received a stop continuous DTMF tone order --> 收到停止连续DTMF音指令 */
/* 8 */
CM_INBAND_EVENT_REV_BURST_DTMF_ACK,
/**< Received an L2 ACK for a CDMA-burst DTMF message (FEATURE_T53) --> 收到CDMA突发DTMF消息的L2 ACK(FEATURE_T53) */
/* 9 */
CM_INBAND_EVENT_IP_START_DTMF_IND,
/**< Start of MT DTMF tone sent by IMS --> 开始发送从IMS接手的DTMF音 */
/* 10 */
CM_INBAND_EVENT_IP_STOP_DTMF_IND,
/**< Stop of MT DTMF tone sent by IMS--> 停止发送从IMS接手的DTMF音 */
/* MAX */
CM_INBAND_EVENT_MAX
/**< FOR INTERNAL CM USE ONLY! --> 最大值,仅供内部CM使用!*/
} cm_inband_event_e_type;