純軟錄音說明:
純軟sip錄音系統,是在網絡交換機上設置端口鏡像,將所有坐席(如ip話機)的端口數據鏡像到指定端口,錄音系統接到該端口,抓取端口上所有的數據包。
純軟錄音優勢:
1、高性能:支持1000線以上的並發錄音。2、簡單、自成體系:系統對sip消息也進行了處理,分析創建會話和結束會話的消息,並從消息中抽取主叫號碼、被叫號碼等信息。支持UDP或TCP傳輸的sip協議。不支持H323等過時的協議,原因一是此類協議很複雜,二是原先使用h323協議的廠商產品如Avaya,很容易配置成SIP 。系統可將會話記錄寫到數據庫表,包括主、被叫號碼,開始時間,通話時長,錄音文件名等信息,供外部應用進行查詢匹配。(因為主叫或被叫,總有一方對應坐席分機,匹配和查詢統計是很容易的)通過數據庫,可以很容易和第三方應用集成。3、穩定:可長時間穩定運行,不會丟失錄音,也不會丟包。4、支持多種音頻編解碼:包括:g711a、g711u,g729ab,gsm,g723,iLbc等多種編碼。5、支持異地、本地多地存儲:錄音文件可以存放防於任何非本地服務器的其他國家地區:比如:服務器在美國,錄音文件既可存放於香港、美國、英國、新加坡、澳大利亞、日本、新西蘭、俄羅斯、台灣、澳門等IDC機房,同時也可以存儲於歐洲國家IDC,如:德國、法國、意大利、荷蘭等國家的IDC。6、兼容多種voip網絡電話軟、硬件:包括華為,思科、訊時、鼎信等voip語音網關;eyebeam,zoiper,X_Lite等軟電話;vos,Elastic,FreeSWITCH,asterisk等軟交換以及各品牌ippbx、ip話機(IPPHONE),包括avaya的ipoffice 6.0/8.0等。
純軟錄音實現原理以及處理過程::1、抓包採用wincaplib,抓取tcp和udp,抓取後做快速判斷,比如判斷是否為sip的應答、建立會話200 OK消息,或是sip的bye消息,或是rtp包,如是上述三類包,則放入到緩衝區;2、線程池去處理緩衝區,如sip處理的從緩衝區讀取消息來生成會話和創建錄音文件,或者關閉會話關閉錄音。
高效率的要點是讀寫必須無鎖,每個線程上的緩衝區為環形隊列。
3、rtp包的處理:根據源或目標地址和端口,到會話隊列中去匹配會話,此時需要對隊列進行加鎖。我參考數據庫思想設計了兩種鎖,讀鎖和寫鎖,多個線程同時可以讀,但讀鎖和寫鎖之間互斥。sip消息處理線程在創建會話或拆除會話時,使用寫鎖;rtp包處理線程在定位會話時,使用讀鎖。
這是巧妙的設計,因為錄音系統大部分時間在處理rtp包,採用讀鎖機制既保證了線程安全,又大大地提高了效率。
4、媒體處理:每個會話的兩個方向的rtp包收到後要進入緩衝區去抖動,並解碼成線性pcm數據,錄音合成線程(是個線程池)會以20ms的間隔去合成兩個方向的pcm數據並延遲寫入錄音文件。延遲寫入可以提高磁盤io的效率。媒體處理使用了藍星際自行開發並長期使用的庫:LxjMediaApi.dll,這個庫經過升級後可以支持外部數據源。特別地,藍星際媒體庫對g729的處理十分高效,因為我們採用了Intel的IPP庫,是業界公認性能最佳的g729編解碼器。