以挑剔的眼光来看,东进语音卡的接口缺乏一致性,应用程序员被迫了解底层细节,会议接口尤甚。
先说说应用背景,64座席的呼叫中心,双E1接入,最开始的配置是D641数字语音卡1块,再加上D161A模拟座席卡4块。
外线和座席的通话用会议方式来完成,一次通话至少需要3个会议资源,即通话的双方,再加上录音。
数字卡和模拟卡上都有会议资源,可不能统一使用,只能用D641数字卡上的会议资源。在座席少的时候没问题,但电话多了就有问题,没办法创建会议。D641卡上有64个会议资源,按我们的应用,最多只能同时创建64/3=21个会议,而且这64个资源分成了上下两半,如果未加处理地使用,可用数将减半,出现最坏的结果:
会议组编号从0-32,如果按顺序使用的话,会很快出现没有会议资源的情况,因为上半区和下半区的资源不能通用。
这时候应该这样处理:
1.将会议组分成两半:left: 0-15; right: 16-31
2.取得上半区的可用资源数:lRes = DJConf_GetAvailResNum(0);
下半区的可用资源数:rRes = DJConf_GetAvailResNum(1);
3.取最空闲的半区来工作,即lRes和rRes最大的一个,如lRes大,则到0-15中取空闲的一个做id,反之亦然。
即使这样,也只能同时创建最多21个会议,即只能21个座席同时工作,离60多个座席相距甚远。没办法,只好加了一块DCB2560会议卡,会议卡采用另外一套接口,叫新会议函数进行编程。卡上有256个会议资源,按每个通话占用3个资源计算,则可同时进行256/3=85个通话。
但后来进行的压力测试,只能同时创建20多个会议,DJConf_JoinConfGroup()函数返回-2,百思不得其解,来在与东进技术支持工程师robo的交谈中得到启发,加入会议的DJConf_JoinConfGroup()函数会自动调用创建会议的函数DJConf_CreateConfGroup(),东进DCB2560的手册上说:
在创建会议时,该函数会自动查找有足够空闲资源的逻辑板卡创建会议,如果找不到将返回失败,另外,该函数会自动为该会议预留会议资源,这样,其他会议就不能占用这预留的资源。预留资源数 = 会议最大说话人数
查TCE1-32.INI配置文件[NewConf]一节,有下面这个配置:
GroupMaxSpeaker=10
#默认最大可说话成员数。应小于等于64
该值为10,意味着每创建一个会议需预留10个会议资源,256个资源只能同时创建25个会议。将参数改为GroupMaxSpeaker=4后,一切正常。
1191

被折叠的 条评论
为什么被折叠?



