基于Linux系统提高VOIP语音信号实时性的方法性及系统的制作方法

文档序号:7895321阅读:255来源:国知局
专利名称:基于Linux系统提高VOIP语音信号实时性的方法性及系统的制作方法
技术领域
本发明涉及一种基于Linux系统VOIP的通信方法及系统,尤其是涉及一种基于Linux系统提高VOIP语音信号实时性的方法及系统。
背景技术
VoIP (Voice over Internet Protocol)是指将模拟的声音讯号经过压缩与打包之后,以数据封包的形式在IP (Internet Protocol)网络的环境进行语音讯号的传输,通俗来说也就是互联网电话、网络电话或者简称IP电话的意思。VoIP的基本原理是通过呼 叫控制协议建立语音连接的逻辑链路,然后根据语音压缩算法对语音数据编码进行压缩处理,把这些语音数据按TCP/IP标准进行打包,经过建立的逻辑链路通过IP网络把数据包送至接收地,再恢复成原来的语音信号,从而达到由互联网传送语音的目的。关于VOIP语音媒体流的收发,有一种常见的系统模型。如图4所示,经过VOIP信令协商后,语音数据从模拟前端经Slic模块采集到DSP模块,由DSP模块进行一系列处理,Echo cancel (去回声)、Jitterbuff (去抖动)、Codec encode (编码、解码)、Packet (打包)等等DSP处理,经过这一系列的处理后,编码出媒体包,在APP层(用户层)中,语音媒体预处理模块通过轮询DSP驱动,将媒体流取上APP层来,这个语音媒体预处理模块可能会对其进行一些媒体流的监控、安全性判断以及一些媒体流类型判断,媒体流经过媒体流预处理模块处理后,由数据收发模块通过Socket (套接字)接口发出去;另外一个方向,从数据收发模块收发媒体流包,经媒体流预处理模块处理后,传到DSP模块进行PLC (PacketLoss Concealment)丢包补偿、Echo cancelsJitterbuff>Codec decode 等处理,再经 Slic模块输出语音信号到模拟前端。Socket (套接字):用于网络通信的基本操作单元,可以看作不同主机之间进程双向通信的端面点。在这个过程中有三个相对耗时的处理I. DSP (Digital Signal Processing)模块处理DSP模块,主要用于完成DSP处理,所述DSP处理包括PLC (Packet LossConcealment)丢包补偿、Echo cancelsJitterbuff>Codec decode/encode、Packet,这些处理的相关延时方案相关性很强2.媒体流预处理媒体流预处理主要完成以下处理 媒体流的监控;通过统计在约定时间内双向所收到的媒体包数,来判断网络或DSP是否有异常,主要应用在一些呼叫仿真测试中。 安全性判断;对接收到的媒体数据进行源地址、源端口等的一些安全验证判断;目前很多VOIP方案的DSP模块都没有防媒体流攻击的功能,假如两个终端正在进行VOIP通话,来自第三方的网络端有意/无意地连续发一些网络包到其中一个VOIP终端正在通话的端口,该终端收到这些非法网络包。如果直接发到DSP模块,DSP模块很有可能会Crash (崩溃),严重的会导致系统崩溃。所以安全性判断对于一些要求比较高的VOIP系统还是比较重要的。 媒体流类型改变判断;主要应用在非协商模式下的自动适应,在中国电信的家庭网关ES标准里,有一种传真模式叫“自协商”的模式,如果VOIP终端都配置成这种模式的T38传真的话,当终端启动了传真传输,终端在不经过协商的情况下从语音模式切换到T38模式下,其媒体流的Mediatype (媒体流类型)就从RTP变成了 T38(其中,RTP代表即时传输协议;T38代表网络传真协议),而另外一个VOIP终端的媒体预处理层判断到这种改变就根据本端配置来进行传真切换,如果本终端的传真配置也设置成“自协商”的T38模式的话,也跟随进行T38传真切换。至于这种媒体流类型判断的处理为什么要放在APP层(用户层),而不放在DSP模块去检测,原因在于很多VOIP芯片方案的DSP库都是不开源的,让DSP模块去检测媒体流类型的改变通用性不大,方案相关性较强,而且不灵活。 数据收发处理 线路上的时延,如网络物理线路的时延。 软件处理上的时延Linux系统分为用户空间和内核空间;APP(Application)层即应用层应用于用户空间;内核空间内包括内核驱动(Kernel Driver)。如图4所示,常见的基于Linux VOIP系统的模型。数据收发模块以及语音媒体流预处理模块设在APP层即用户空间内;从网络收取媒体流数据到APP层,从APP层把媒体流发到网络去;通过应用层Socket接口来读写数据时,都会使用一个系统调用(system call)。这个调用(例如read或write)跨越了用户空间与内核空间的边界,以Ptime (每周期)为20ms的VOIP通话连接来说,每秒钟有50个媒体包发送,50个媒体包接收,也就等于每秒有50个read和50个write操作;即100次用户空间和内核空间的切换,频繁的在用户空间和内核空间之间切换,耗费的资源相对较高。综合上述DSP模块的方案相关性较强,而媒体流预处理模块也可以根据需求来进行裁剪调整;而数据收发的处理有优化的空间。语音信号的实时性在一些场合要求比较严格,例如IC电话,在其进入通话前,通过发送接收DTMF(Dual Tone Multi Frequency)码即双音多频码和局端进行一系列的交互验证,这个交互验证过程的实时性要求很严格,达到毫秒级别,如果延时相差10ms,交互验证过程就可能失败,进行IC电话拨号也就失败了。VOIP的语音信号的实时性对于这种信号交互来说尤为重要,而且实时性(单向延时)也是语音质量的重要元素。

发明内容
针对上述问题,本发明提供一种通信过程中耗费的资源较低,延时小的基于Linux提高VOIP语音信号实时性的方法及系统。为达上述目的,本发明基于Linux系统提高VOIP语音信号实时性的方法为直接使用内核空间内的内核Socket接口从网络接收数据或将待发送的数据发送到网络中。优选地,所述基于Linux系统提高VOIP语音信号实时性的方法包括以下具体步骤步骤I :建立DSP通道,从连接数据结构表中分配一个套接口用于建立内核Socket接口 ;、
步骤2 :当收任务内核线程轮询到连接数据结构表中有有效套接口,且对应的有效套接口已建立有效连接;内核Socket接口对该有效套接口进行读操作;再将读取的数据传输至模拟前端;步骤3 :找到用于发送该数据的套接口,使用内核Socket接口直接将待发送的数据发送到网络中。优选地,所述步骤I包括以下具体步骤步骤I. I :新建一个数据接收的收任务内核线程;步骤I. 2 :新建一个包含多个套接口的连接数据结构表;步骤I. 3 :进行信令协商,建立呼叫;读取DSP通道参数和网络参数,新建DSP通道连接;步骤I. 4 :从所述连接数据结构表中分配一个空闲套接口,创建并初始化一个内核 Socket 接口。优选地,所述Linux系统为多核处理器时,所述基于Linux系统VOIP的方法还包括,在新建所述收任务内核线程之前,指定一个新建所述收任务内核线程的处理器。优选地,所述步骤2包括以下具体步骤步骤2. I :所述收任务内核线程对所述数据结构表中的所述套接口进行轮询读处理;步骤2. 2 :所述收任务内核线程轮询到有有效套接口,且所述有效套接口已建立对应的有效连接,则所述内核Socket接口,读取所述有效套接口从网络中输入的媒体流数据;步骤2. 3 :对读取的所述媒体流数据进行媒体流预处理;步骤2. 4 :对进行媒体流预处理后的数据进行解包、解码、去抖动、去回音,其中一项或多项DSP处理,再输出到模拟前端。优选地,所述步骤3包括以下具体步骤步骤3. I :采集模拟前端所传输的模拟数据,进行模数转换;步骤3. 2 :对数模转换后的数据进行编码,去回音,去抖动,其中一项或多项DSP处理;步骤3. 3 :对所述DSP处理后的数据,进行语音媒体流预处理;步骤3. 4 :找到用于发送数据的套接口 ;对进行语音媒体流预处理后的数据,通过所述内核Socket接口发送到网络中。优选地,所述基于Linux系统提高VOIP语音信号实时性的方法还包括步骤4 :通信完毕后的断开连接和释放套接口,具体步骤如下 步骤4. I :关闭DSP通道;步骤4. 2 :调用所述内核Socket接口释放所述DSP通道的连接以及对应的套接
n ;步骤4. 3 :系统去初始化,销毁所述收任务内核线程,删除所述连接数据结构表。优选地,所述收任务内核线程的轮询包括以下步骤步骤A :判断系统初始化是否已完成;是,进行下一步;否,释放所述收任务内核线程;
步骤B :轮询所述连接数据结构表中当前所述套接口 ;步骤C :判断当前所述套接口是否为有效套接口以及当前所述有效套接口对应的连接是否有效;是,进行下一步;否,判断当前套接口是否为所述连接数据结构表中最后一个套接口,是,从所述连接数据结构表中的第一个套接口开始轮询,否,轮询下一所述套接
n ;步骤D :由所述内核Socket接口读取当前所述有效套接口对应连接传输的数据,并判断是否成功接收;是,进行所述语音媒体流预处理;否,判断当前套接口是否为所述连接数据结构表中最后一个套接口,是,轮询所述连接数据结构表中的第一个套接口,否,轮询下一所述套接口。 优选地,所述步骤C还包括建立一个轮询标记,所述轮询标记初始值为 0,且在轮询下一所述套接口之前自动加I ;当判断出当前所述套接口为无效套接口或当前所述有效套接口对应的连接无效后,判断所述轮询标记是否小于所述连接数据结构表中所述套接口的个数,是,则轮询下一所述套接口,否,则将所述轮询标记置0,轮询所述连接数据结构表中的第一个套接口。为达上述目的,本发明基于Linux系统提高VOIP语音信号实时性的系统,应用上述的基于Linux系统提高VOIP语音信号实时性的方法中,包括依次连接网络、Linux系统以及模拟前端;所述Linux系统包括依次连接的呼叫控制模块、数据收发模块、语音媒体流预处理模块、DSP模块以及Slic模块,其中,所述数据收发模块以及语音媒体流预处理模块设置在Linux系统内核空间内;且所述数据收发模块以及语音媒体流预处理模块嵌在所述DSP模块中,为所述DSP模块的子模块;其中,所述呼叫控制模块,实现信令交互、拨号管理、配置管理、任务管理、DSP通道管理以及业务逻辑控制;所述数据收发模块,与所述网络相连接,接收和发送数据;所述语音媒体流预处理模块,对媒体流进行监控、判断安全性以及媒体类型判断;所述DSP模块,进行DSP处理,所述DSP处理包括丢包补偿、去回音、去抖动、编码、解码以及打包;所述Slic模块,与所述模拟前端相连接,采集、输出模拟数据、振铃输出、挂机检测以及模数转换。本发明基于Linux提高VOIP语音信号实时性的方法的有益效果I、本发明基于Linux系统提高VOIP语音信号实时性的方法,数据接收以及数据发送均在Linux系统内核空间内完成的方法,简单、巧妙的降低了传统基于Linux系统VOIP通信方法,接收或发送数据时,需要在用户空间和内核空间来回的调用数据造成的时延。直接使用内核空间的内核Socket接收和发送数据,由于操作系统以及应用界面都不需要在用户空间和内核空间内来回的调用数据,降低了系统的繁忙度,减低了资源的耗费。2、本发明基于Linux系统提高VOIP语音信号实时性的系统,通过将数据收发模块以及语音媒体流预处理模块嵌入内核空间内的DSP系统中,简便的为基于Linux系统提高VOIP语音信号实时性的方法提供了硬件系统。


图I是本发明实施例所述基于Linux系统提高VOIP语音信号实时性的方法,具体步骤流程图;图2是本发明实施例所述基于Linux系统提高VOIP语音信号实时性的方法,所述通信完毕后的断开连接和释放套接口的流程图;图3是本发明实施例所述基于Linux系统提高VOIP语音信号实时性的方法,收任务内核线程的轮询逻辑图。图4是传统的基于Linux系统VOIP通信系统的系统模型图; 图5是本发明实施例所述基于Linux系统提高VOIP语音信号实时性的系统的系统模型图。
具体实施例方式下面结合说明书附图对本发明做进一步的描述。实施例一如图I所示,本发明基于Linux系统提高VOIP语音信号实时性的方法为直接使用内核空间内的内核Socket接口从网络接收数据或将待发送的数据发送到网络中。所述基于Linux系统提高VOIP语音信号实时性的方法包括以下具体步骤步骤I :建立DSP通道,从连接数据结构表中分配一个套接口用于建立内核Socket接口 ;步骤2 :当收任务内核线程轮询到连接数据结构表中有有效套接口,且对应的有效套接口已建立有效连接;内核Socket接口对该有效套接口进行读操作;再将读取的数据传输至模拟前端;步骤3 :找到用于发送该数据的套接口,使用内核Socket接口直接将待发送的数据发送到网络中;所述步骤I包括以下具体步骤 步骤I. I :新建一个数据接收的收任务内核线程;步骤I. 2 :新建一个包含多个套接口的连接数据结构表,并将连接数据结构表的状态初始化为IDLE ;IDLE标识当前状态为空闲,可使用。步骤I. 3 :进行信令协商,建立呼叫;读取DSP通道参数和网络参数,新建DSP通道连接;步骤1.4 :从所述连接数据结构表中分配一个空闲套接口,创建并初始化一个内核Socket接口,并将所述内核Socket接口连接状态设置为UP。UP标识当前连接已建立。所述步骤2包括以下具体步骤步骤2. I :所述收任务内核线程对所述数据结构表中的所述套接口进行轮询读处理;步骤2. 2 :所述收任务内核线程轮询到有有效套接口,且所述有效套接口已建立对应的有效连接,则所述内核Socket接口,读取所述有效套接口从网络中输入的媒体流数据; 步骤2. 3 :对读取的所述媒体流数据进行媒体流预处理;
步骤2. 4 :对进行媒体流预处理后的数据进行解包、解码、去抖动、去回音,其中一项或多项DSP处理,再输出到模拟前端。所述步骤3包括以下具体步骤步骤3. I :采集模拟前端所传输的模拟数据,进行模数转换;步骤3. 2 :对数模转换后的数据进行编码,去回音,去抖动,其中一项或多项DSP处理;步骤3. 3 :对所述DSP处理后的数据,进行语音媒体流预处理;步骤3. 4 :找到用于发送数据的套接口 ;对进行语音媒体流预处理后的数据,通过所述内核Socket接口发送到网络中。如图2所示,步骤4 :通信完毕后的断开连接和释放套接口,具体步骤如下步骤4. I :关闭DSP通道;步骤4. 2 :调用所述内核Socket接口释放所述DSP通道的连接以及对应的套接
n ;步骤4. 3 :系统去初始化,销毁所述收任务内核线程,删除所述连接数据结构表。如图3所示,所述收任务内核线程的轮询包括以下步骤步骤A :判断系统初始化是否已完成;是,进行下一步;否,释放所述收任务内核线程;步骤B :轮询所述连接数据结构表中当前所述套接口 ;步骤C :判断当前所述套接口是否为有效套接口以及当前所述有效套接口对应的连接是否有效;是,进行下一步;否,判断当前套接口是否为所述连接数据结构表中最后一个套接口,是,从所述连接数据结构表中的第一个套接口开始轮询,否,轮询下一所述套接
n ;步骤D :由所述内核Socket接口读取当前所述有效套接口对应连接传输的数据,并判断是否成功接收;是,进行所述语音媒体流预处理;否,判断当前套接口是否为所述连接数据结构表中最后一个套接口,是,轮询所述连接数据结构表中的第一个套接口,否,轮询下一所述套接口。其次,轮询的另一种方法为所述步骤C还包括建立一个轮询标记,所述轮询标记初始值为0,且在轮询下一所述套接口之前自动加I ;当判断出当前所述套接口为无效套接口或当前所述有效套接口对应的连接无效后,判断所述轮询标记是否小于所述连接数据结构表中所述套接口的个数,是,则轮询下一所述套接口,否,则将所述轮询标记置0,轮询所述连接数据结构表中的第一个套接口。所述Linux系统为多核处理器时,所述基于Linux系统VOIP的方法还包括,在新建所述收任务内核线程之前,指定一个新建所述收任务内核线程的处理器。如图5所不,本发明基于Linux系统提高VOIP语音信号实时性的系统,应用于如上述的基于Linux系统提高VOIP语音信号实时性的方法中,包括依次连接网络、Linux系统以及模拟前端;所述Linux系统包括依次连接的呼叫控制模块、数据收发模块、语音媒体流预处理模块、DSP模块以及Slic模块,所述数据收发模块以及语音媒体流预处理模块设置在Linux系统内核空间内;且所述数据收发模块以及语音媒体流预处理模块嵌在所述DSP模块中,为所述DSP模块的子模块;其中,
所述呼叫控制模块,实现信令交互、拨号管理、配置管理、任务管理、DSP通道管理以及业务逻辑控制;所述数据收发模块,与所述网络相连接,接收和发送数据;所述语音媒体流预处理模块,对媒体流进行监控、判断安全性以及媒体类型判断;所述DSP模块,进行DSP处理,所述DSP处理包括丢包补偿、去回音、去抖动、编码、解码以及打包;所述Slic模块,与所述模拟前端相连接,采集、输出模拟数据、振铃输出、挂机检测以及模数转换。其处理流程参考数据结构如下
权利要求
1.一种基于Linux系统提高VOIP语音信号实时性的方法,其特征在干,所述基于Linux系统提高VOIP语音信号实时性的方法为直接使用内核空间内的内核Socket接ロ从网络接收数据或将待发送的数据发送到网络中。
2.根据权利要求I所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述基于Linux系统提高VOIP语音信号实时性的方法包括以下具体步骤 步骤I :建立DSP通道,从连接数据结构表中分配一个套接ロ用于建立内核Socket接Π ; 步骤2 :当收任务内核线程轮询到连接数据结构表中有有效套接ロ,且对应的有效套接ロ已建立有效连接;内核Socket接ロ对该有效套接ロ进行读操作;再将读取的数据传输至模拟前端; 步骤3 :找到用于发送该数据的套接ロ,使用内核Socket接ロ直接将待发送的数据发送到网络中。
3.根据权利要求2所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述步骤I包括以下具体步骤 步骤1.1:新建一个数据接收的收任务内核线程; 步骤I. 2 :新建ー个包含多个套接ロ的连接数据结构表; 步骤I. 3 :进行信令协商,建立呼叫;读取DSP通道參数和网络參数,新建DSP通道连接; 步骤1.4 :从所述连接数据结构表中分配ー个空闲套接ロ,创建并初始化ー个内核Socket 接 ロ ο
4.根据权利要求3所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述Linux系统为多核处理器时,所述基于Linux系统VOIP的方法还包括,在新建所述收任务内核线程之前,指定ー个新建所述收任务内核线程的处理器。
5.根据权利要求2所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述步骤2包括以下具体步骤 步骤2. I :所述收任务内核线程对所述数据结构表中的所述套接ロ进行轮询读处理;步骤2. 2 :所述收任务内核线程轮询到有有效套接ロ,且所述有效套接ロ已建立对应的有效连接,则所述内核Socket接ロ,读取所述有效套接ロ从网络中输入的媒体流数据;步骤2. 3 :对读取的所述媒体流数据进行媒体流预处理; 步骤2. 4 :对进行媒体流预处理后的数据进行解包、解码、去抖动、去回音,其中ー项或多项DSP处理,再输出到模拟前端。
6.根据权利要求2所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述步骤3包括以下具体步骤 步骤3. I :采集模拟前端所传输的模拟数据,进行模数转换; 步骤3. 2 :对数模转换后的数据进行编码,去回音,去抖动,其中ー项或多项DSP处理; 步骤3. 3 :对所述DSP处理后的数据,进行语音媒体流预处理; 步骤3. 4 :找到用于发送数据的套接ロ ;对进行语音媒体流预处理后的数据,通过所述内核Socket接ロ发送到网络中。
7.根据权利要求I所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述基于Linux系统提高VOIP语音信号实时性的方法还包括步骤4 :通信完毕后的断开连接和释放套接ロ,具体步骤如下步骤4. I :关闭DSP通道; 步骤4. 2 :调用所述内核Socket接ロ释放所述DSP通道的连接以及对应的套接ロ ; 步骤4. 3 :系统去初始化,销毁所述收任务内核线程,删除所述连接数据结构表。
8.根据权利要求I所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述收任务内核线程的轮询包括以下步骤 步骤A :判断系统初始化是否已完成;是,进行下一歩;否,释放所述收任务内核线程; 步骤B:轮询所述连接数据结构表中当前所述套接ロ ; 步骤C :判断当前所述套接ロ是否为有效套接ロ以及当前所述有效套接ロ对应的连接是否有效;是,进行下一歩;否,判断当前套接ロ是否为所述连接数据结构表中最后ー个套接ロ,是,从所述连接数据结构表中的第一个套接ロ开始轮询,否,轮询下一所述套接ロ ;步骤D :由所述内核Socket接ロ读取当前所述有效套接ロ对应连接传输的数据,并判断是否成功接收;是,进行所述语音媒体流预处理;否,判断当前套接ロ是否为所述连接数据结构表中最后ー个套接ロ,是,轮询所述连接数据结构表中的第一个套接ロ,否,轮询下一所述套接ロ。
9.根据权利要求7所述的基于Linux系统提高VOIP语音信号实时性的方法,其特征在于,所述步骤C还包括建立ー个轮询标记,所述轮询标记初始值为O,且在轮询下一所述套接ロ之前自动加I;当判断出当前所述套接ロ为无效套接ロ或当前所述有效套接ロ对应的连接无效后,判断所述轮询标记是否小于所述连接数据结构表中所述套接ロ的个数,是,则轮询下一所述套接ロ,否,则将所述轮询标记置0,轮询所述连接数据结构表中的第一个套接ロ。
10.一种基于Linux系统提高VOIP语音信号实时性的系统,应用于如权利要求I所述的基于Linux系统提高VOIP语音信号实时性的方法中,包括依次连接网络、Linux系统以及模拟前端;所述Linux系统包括依次连接的呼叫控制模块、数据收发模块、语音媒体流预处理模块、DSP模块以及Slic模块,其特征在于,所述数据收发模块以及语音媒体流预处理模块设置在Linux系统内核空间内;且所述数据收发模块以及语音媒体流预处理模块嵌在所述DSP模块中,为所述DSP模块的子模块;其中, 所述呼叫控制模块,实现信令交互、拨号管理、配置管理、任务管理、DSP通道管理以及业务逻辑控制; 所述数据收发模块,与所述网络相连接,接收和发送数据; 所述语音媒体流预处理模块,对媒体流进行监控、判断安全性以及媒体类型判断; 所述DSP模块,进行DSP处理,所述DSP处理包括丢包补偿、去回音、去抖动、编码、解码以及打包; 所述Slic模块,与所述模拟前端相连接,采集、输出模拟数据、振铃输出、挂机检测以及模数转换。
全文摘要
本发明公开了一种基于Linux系统提高VOIP语音信号实时性的方法及系统。所述基于Linux系统提高VOIP语音信号实时性的方法为解决传统方法,使用用户空间内的Socket接口读写数据,需要系统函数在用户空间和内核空间之间来回的调用造成的通信时延而设计。本发明基于Linux系统提高VOIP语音信号实时性的方法,直接调用内核空间内的内核Socket接口从网络读取数据或将待发送的数据发送到网络中,降低了系统的繁忙度及系统资源的耗费、缩短了时延。所述基于Linux系统提高VOIP语音信号实时性的系统,应用于上述方法,将语音媒体流预处理模块和数据收发模块合并到DSP模块中,位于内核空间内,为实现上述方法提供了硬件支持,实现简便可靠。
文档编号H04M7/00GK102685342SQ20121014655
公开日2012年9月19日 申请日期2012年5月11日 优先权日2012年5月11日
发明者陆文乐 申请人:深圳市共进电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1