纯软录音说明:
纯软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编解码器。