Dialogic DI/SI座席卡会议问题和解决之道

Dialogic公司已经将原来的MSI座席卡淘汰了,代之以DM3架构的DI/SI座席卡,如16路的DI/SI16或DI/SI32。
在CIT论坛上也有介绍:http://www.ctiforum.com/train/intel/manual/manual01_015.htm,声称兼容原来的MSI接口:“这些板卡与过去的R4 MSI API兼容”。

因为DI/SI只能在最新的SR6开发包上使用,我在从SR511移植到SR6的过程中,座席部分遇到很大的困难,中间几乎一筹莫展。

Dialogic在座席卡上集成了会议资源,我们的语音平台和呼叫中心平台,外线与内线的连接都是基于会议来实现:

  // i是座席在座席卡上的通道号,从0开始
  MS_CDT confcdt;
  confcdt.chan_num = i+1;   // 从1开始
  confcdt.chan_sel = MSPN_STATION;  // 用站号来加入会议
  confcdt.chan_attr = MSPA_NULL;
  // 创建一个会议,只有一个成员,就是座席本身
  int ret = ms_estconf(brdHd, &confcdt, 1, MSCA_ND | MSCA_NN, &confId); // brdHd是已打开的座席板句柄

  // 增加一个外线成员到会议
  confcdt.chan_num = TelList[index]->sctslot;  // 时隙
  confcdt.chan_sel = MSPN_TS;
  confcdt.chan_attr = MSPA_NULL;
  ret = ms_addtoconf(brdHd, confId, &confcdt);

  // 侦听会议的时隙
  SC_TSINFO tsinfo;
  tsinfo.sc_numts = 1;
  tsinfo.sc_tsarrayp = &confcdt.chan_lts;
  ret = dt_listen(TelList[index]->dti, &tsinfo);
测试发现,双方根本不能正常通话。检查程序日志,发现会议创建函数和加入会议的函数返回值都是0,也就是成功了,但就是不能听到声音。
这问题相当棘手,如果有错误,我们可以根据错误来定位和修正。我们一度怀疑是DCM配置有误,后来还怀疑硬件是否存在问题,均没办法解决。我在网上寻找答案的过程中,发现有其他人遇到同样的困惑,“ms_estconf() problems”:
http://threebit.net/projects/jvr/general-dialogic-discussion/2371.html
他的问题和我一模一样:
“ms_estconf() functions returns 0 which means the function is executed successfully.
But i am not able to hear anything in any station device ”
可惜,这个帖子没有答案。

客户的交货日期逐渐逼近。后来试图改为时隙相连,并不不成功。我几乎要被这个问题逼疯了。
病急乱投医,找各代理商技术支持询问,到处发邮件,Dialogic华南技术陈经理也被我骚扰,最后,还是意科特的周工给出了关键的线索:
“请参考附件DM3卡移植上的一些问题,由于DISI是DM3产品,和以前MSI确实存在移植问题。DISI座席卡启动后,上面以有dcbB1D1设备资源,如果你之前有用DCB函数开发过会议系统,沿用DCB方式创建会议加入各方成员,会议就不存在兼容问题。请考虑。”

原来DI/SI有增强的会议资源,增强的会议资源是dcb_开头的一组函数,调用形式和msi会议很相似。说干就干:
  MS_CDT confcdt;
  confcdt.chan_num = _msi[i].sctslot;   // 座席i的时隙
  confcdt.chan_sel = MSPN_TS;  // 必须用时隙号来加入会议
  confcdt.chan_attr = MSPA_NULL;
  // 创建一个会议,只有一个成员,就是座席本身
  int ret = dcb_estconf(dcbHd, &confcdt, 1, MSCA_ND | MSCA_NN, &confId);  // dcbHd是已打开的会议设备句柄

  // 加上:让座席设备去侦听会议的时隙
  SC_TSINFO tsinfo;
  tsinfo.sc_numts = 1;
  tsinfo.sc_tsarrayp = &confcdt.chan_lts;
  ret = ms_listen(_msi[i].handle, &tsinfo);


  // 增加一个外线成员到会议
  confcdt.chan_num = TelList[index]->sctslot;  // 时隙
  confcdt.chan_sel = MSPN_TS;
  confcdt.chan_attr = MSPA_NULL;
  ret = dcb_addtoconf(dcbHd, confId, &confcdt);

  // 侦听会议的时隙
  SC_TSINFO tsinfo;
  tsinfo.sc_numts = 1;
  tsinfo.sc_tsarrayp = &confcdt.chan_lts;
  ret = dt_listen(TelList[index]->dti, &tsinfo);

(上面的代码的简化的示例,实际代码比这个复杂些,考虑了两种会议的兼容)

经过客户仔细地测试,程序完全正常。
到周五下班前总算搞定,终于可以安心过一个周末了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值