东进数字卡会议编程
以挑剔的眼光來看,東進語音卡的接口缺乏一致性,應用程序員被迫了解底層細節,會議接口尤甚。
先說說應用背景,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后,一切正常。
總結
- 上一篇: g723源码详细分析-11-多脉码激励编
- 下一篇: JAVA单元测试——常用注解(案例源码分