Keygoe交换机系列产品完全支持带外DTMF的检测和发送。
IP业务中的DTMF分为带内(In Band)和带外(Out of Band)两种。 带外DTMF
1、是VoIP协议中定义的一系列用来描述DTMF信号的分组消息。
2、常用的包括H.323 协议下的H.245 UserInputIndication 消息、SIP协议下的INFO消息。
带外DTMF通过IOData命令和事件XMS_IO_TYPE_VOIP_RTPDTMF/XMS_IO_TYPE_VOIP_RTPTONE 来完成,应用程序通过函数 XMS_ctsSendIOData()可以主动向对端发送带外DTMF信号,在收到对端发送的带外DTMF信号时,应用程序会收到XMS_EVT_RECVIODATA 事件。
对于带内DTMF,需以录放音类似的方法处理。需为VoIP设备绑定语音设备,之后对该语音设备进行传统DTMF的相应操作。
带内DTMF
1、指的就是传统的DTMF,在话路中以时域信号形式在语音带内传输; 2、包括RFC 2833/4733标准定义的以RTP分组格式封装的DTMF消息;
由于带内DTMF的发送和放音类似,所以在向VoIP设备绑定的语音设备发送DTMF时,需要先对语音设备调用XMS_ctsSetParam()设置语音输出通道的混音来源为IP语音通道+放音通道。
//向VoIP设备绑定的语音设备发送DTMF时,调用XMS_ctsSetParam()设置语音输出通道的混音来源为IP语音通道+放音通道。
CmdParamData_Voice_t VocMixParam;
memset(&VocMixParam,0,sizeof(CmdParamData_Voice_t)); VocMixParam.m_u8OutputCtrlValid=1;
VocMixParam.m_VocOutputControl.m_u8OutputType=XMS_VOC_OUTPUT_FROM_MIXER; VocMixParam.m_VocOutputControl.m_u16FixGain=1024;
VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC1_Ctrl=XMS_MIXER_FROM_PLAY; VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID1=g_deviceVoc[iDeviceVoc].device.m_s16ChannelID;
VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC2_Ctrl=XMS_MIXER_FROM_IP; VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID2=g_deviceVoIP[iDeviceIP].device.m_s16ChannelID;
XMS_ctsSetParam(g_acsHandle, &g_deviceVoc[iDeviceVoc].device,VOC_PARAM_UNIPARAM, sizeof(VocMixParam), &VocMixParam);
用于混音的语音设备和VoIP设备必须位于同一个DSP上。网关对VoIP设备和对语音设备调用XMS_ctsSetParam()设置混音时的参数类型和参数内容并不相同。
前者VoIP设备参数类型为VOIP_PARAM_RTPMIXER,参数为MixerControlParam_t 结构, 后者语音设备参数类型为VOC_PARAM_UNIPARAM,参数为CmdParamData_Voice_t 结构。
对于VoIP与中继通道的语音交互(如各类IP网关应用)
1、将VoIP设备的输出音源设为语音设备输入(Input),XMS_MIXER_FROM_INPUT; 2、将语音设备的输出(Output)设为VoIP设备, MixerControlParam_t VocCmdP;
memset(&VocCmdP, 0, sizeof(MixerControlParam_t)); VocCmdP.m_u8SRC1_Ctrl=XMS_MIXER_FROM_INPUT;
VocCmdP.m_u16SRC_ChID1=g_deviceVoc[iDeviceVoc].device.m_s16ChannelID; ret=XMS_ctsSetParam(g_acsHandle, &g_deviceVoIP[iDeviceIP].device, VOIP_PARAM_RTPMIXER ,sizeof(VocCmdP), &VocCmdP);
1
RetCode_t Ret=LinkDevice(&g_deviceVoIP[iDeviceIP],&g_deviceVoc[iDeviceVoc]); 之后再通过函数XMS_ctsLinkDevice()将绑定的语音设备与其他中继设备进行时隙连接,可完成IP与其他中继设备语音的交互
对于IP设备加入会议的功能,不需要额外借助语音设备,只需要直接将IP加入会议设备即可。
IP与传真
VoIP模块支持SIP协议下的IP传真功能,包括T.38/udptl和T.30透传两种模式。 在呼叫成功建立以后,应用程序可通过XMS_ctsSendIOData 函数向VoIP模块发送
XMS_IO_TYPE_VOIP_FAXSTART 事件启动传真模式协商,协商完成后应用程序会收到相同的事件类型,即表示传真模式正常启动。
XMS_IO_TYPE_VOIP_FAXSTART事件参数为DJ_U8类型,值为0表示启动T.38/udptl传真模式,值为1表示启动T.30 透传模式(G.711 编码)。
传真结束后可再次向VoIP模块发送XMS_IO_TYPE_VOIP_FAXSTOP事件返回正常通话模式。
IP与语音
当VoIP呼叫建立后,DSP模块将使用内部缺省的IP专用语音通道用于RTP媒体数据的接收和发送。 该语音通道【IP专用语音通道】与DSP模块通常意义的语音设备并不相同,不能用于录放音等操作。 当需要对VoIP设备进行录放音或中继转接等功能时,必须借助语音设备的混音来完成, 直接对VoIP 设备调用XMS_ctsPlay()、XMS_ctsRecord()等函数是错误的。 混音操作通过调用函数XMS_ctsSetParam()设置混音参数(MixerControl)来实现。
对于IP放音
在混音属性中将VoIP设备的输出音源设定为语音的放音设备(XMS_MIXER_FROM_PLAY) MixerControlParam_t VocCmdP;
memset(&VocCmdP, 0, sizeof(MixerControlParam_t)); VocCmdP.m_u8SRC1_Ctrl=XMS_MIXER_FROM_PLAY;
VocCmdP.m_u16SRC_ChID1=g_deviceVoc[iDeviceVoc].device.m_s16ChannelID; XMS_ctsSetParam(g_acsHandle, &g_deviceVoIP[iDeviceIP].device, VOIP_PARAM_RTPMIXER,sizeof(VocCmdP), &VocCmdP);
对于IP录音
在函数XMS_ctsRecord()的录音混音属性中将音源指定为VoIP设备(XMS_MIXER_FROM_IP) RecordProperty_t recordProperty;
memset(&recordProperty,0,sizeof(RecordProperty_t));
recordProperty.m_MixerControl.m_u8SRC1_Ctrl=XMS_MIXER_FROM_PLAY; recordProperty.m_MixerControl.m_u16SRC_ChID1=pVocDevID->m_s16ChannelID; recordProperty.m_MixerControl.m_u8SRC2_Ctrl=XMS_MIXER_FROM_IP;
recordProperty.m_MixerControl.m_u16SRC_ChID2=pIPDevID->m_s16ChannelID;//XMS_MIXER_FROM_IP;
XMS_ctsRecord(g_acsHandle,pVocDevID,&recordProperty,NULL);
2

