基于linux内核实现帧缓存丢包补偿的方法及系统与流程

文档序号:12182658阅读:429来源:国知局
基于linux内核实现帧缓存丢包补偿的方法及系统与流程

本发明涉及通信设备技术领域,尤其涉及一种基于linux内核实现帧缓存丢包补偿的方法及系统。



背景技术:

在现有通信网络中服务器IPPBX的使用已经很普及,许多企业办公机构采用ippbx取代传统的用户级交换机pbx,来实现音频或音视频的通讯,极大提高了办公的效率,降低通讯的费用。

目前主流通信核心网接入都由网络电话交换机IPPBX、接入设备IAD等设备承担。并且因为通信压力又提出主备系统、负载均衡、媒体服务器独立、业务控制和通话控制分离等等理论,可以说通信融合的服务理念只是体现在用户层面,而负责通信及服务的网元设备将需要详细的分工合作,即应用服务模块化。基于该应用场景,本专利申请实现了基于linux内核实现ippbx的媒体转发模块。

目前主流的流媒体技术是RTP/RTCP协议,而RTP/RTCP协议中有一个补充协议,为NACK丢包补偿技术。根据NACK的RTCP报文内容,可以达到一定的丢包补偿功能;NACK是一种RTP丢包补偿技术。

在现有的服务器IPPBX系统中,开源的用户级交换机PBX,如freeswitch电话软交换平台、opensips服务器、freepbx平台和YATA平台等都是在应用层实现媒体转发功能,媒体包需从内核协议栈发到应用层,由应用层的媒体转发模块根据具体的通话修改目的端口和ip,再发送回内核协议栈转发给对端话机;媒体包进行了内核到应用层,再从应用层到内核的拷贝过程,对系统的消耗比大,满足不了高并发媒体服务的需求。而本专利申请通过实现了基于linux内核的媒体转发模块,极大提高了媒体处理的能力。但是在一些丢包补偿中,则没有实现相关的技术。



技术实现要素:

本发明要解决的技术问题之一,在于提供一种基于linux内核实现帧缓存丢包补偿的方法,加入了对NACK丢包补偿的支持,因而能够达到既能有效的实现媒体高效转发,又能实现RTP丢包的有效补偿。

本发明问题之一是这样实现的:一种基于linux内核实现帧缓存丢包补偿的方法,所述方法应用在服务器IPPBX中,所述方法为:两个话机与所述服务器IPPBX建立连接后,两个话机分别对应生成一RTP会话处理实例slave,两个话机进行会话时在两个RTP会话处理实例slave之间建立桥接方式;

在服务器IPPBX的MP内核中的两个RTP会话处理实例slave之间建立一内核报文缓存,添加RTP缓存机制,

通过NACK的RTCP请求,来达到缓存丢包补偿。

进一步的,所述添加RTP缓存机制,并通过NACK的RTCP请求,来达到缓存丢包补偿,具体为:两个话机进行媒体转发时,判断内核报文缓存是否达到上限,是则进行内核报文缓存进行缓存处理,控制丢弃最早的报文,在服务器IPPBX的MP内核收到NACK请求后,MP内核对NACK请求进行处理,让MP内核做重传工作。

进一步的,所述内核报文缓存进行缓存处理,控制丢弃最早的报文,具体为:服务器IPPBX的MP内核在收到一个RTP报文后,先判断内核报文缓存的大小是否达到上限,达到了上限,则需要将内核报文缓存中最早的RTP缓存报文给丢弃掉;丢弃掉后,在将现在接收的报文放到内核报文缓存中;报文放到内核报文缓存中进行一个快速排序,排序需要根据RTP报文中的SEQ序列以及timestamp时间戳共同决定,将最早的报文放置在最前面,而最后的报文放置在最后面;这样做丢包处理的时候,只要将最前面的报文丢弃即可;未达到上限,则不进行处理。

进一步的,所述MP内核对NACK请求进行处理,让MP内核做重传工作,具体为:在收到NACK请求后,MP内核要先解析NACK请求的内容;根据NACK报文中的丢包请求去内核报文缓存中找对应SEQ序列的RTP报文,如果有找到报文,则将该报文重新发送一次;而如果没有找到,则表示为已经不在内核报文缓存中,不进行操作。

本发明要解决的技术问题之二,在于提供一种基于linux内核实现帧缓存丢包补偿的系统,加入了对NACK丢包补偿的支持,因而能够达到既能有效的实现媒体高效转发,又能实现RTP丢包的有效补偿。

本发明问题之二是这样实现的:一种基于linux内核实现帧缓存丢包补偿的系统,所述系统应用在服务器IPPBX中;所述系统包括话机桥接模块,缓存处理模块以及NACK请求处理模块;

所述话机桥接模块,用于两个话机与所述服务器IPPBX建立连接后,两个话机分别对应生成一RTP会话处理实例slave,两个话机进行会话时在两个RTP会话处理实例slave之间建立桥接方式;

所述缓存处理模块,用于在服务器IPPBX的MP内核中的两个RTP会话处理实例slave之间建立一内核报文缓存,添加RTP缓存机制,

所述NACK请求处理模块,用于通过NACK的RTCP请求,来达到缓存丢包补偿。

进一步的,两个话机进行媒体转发时,判断内核报文缓存是否达到上限,是则进行内核报文缓存进行缓存处理,控制丢弃最早的报文,在服务器IPPBX的MP内核收到NACK请求后,MP内核对NACK请求进行处理,让MP内核做重传工作。

进一步的,所述所述缓存处理模块进一步具体为:服务器IPPBX的MP内核在收到一个RTP报文后,先判断内核报文缓存的大小是否达到上限,达到了上限,则需要将内核报文缓存中最早的RTP缓存报文给丢弃掉;丢弃掉后,在将现在接收的报文放到内核报文缓存中;报文放到内核报文缓存中进行一个快速排序,排序需要根据RTP报文中的SEQ序列以及timestamp时间戳共同决定,将最早的报文放置在最前面,而最后的报文放置在最后面;这样做丢包处理的时候,只要将最前面的报文丢弃即可;未达到上限,则不进行处理。

进一步的,所述所述NACK请求处理模块进一步具体为:在收到NACK请求后,MP内核要先解析NACK请求的内容;根据NACK报文中的丢包请求去内核报文缓存中找对应SEQ序列的RTP报文,如果有找到报文,则将该报文重新发送一次;而如果没有找到,则表示为已经不在内核报文缓存中,不进行操作。

本发明具有如下优点:有效利用基于linux内核实现媒体转发代理media proxy的方法,达到高效的流媒体处理能力。通过NACK丢包补偿的结合,进一步提高流媒体的丢包异常处理能力。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明方法的原理示意图。

图2为本发明内核报文缓存进行缓存处理的流程示意图。

图3为本发明内核对NACK请求进行处理的流程示意图。

图4为本发明系统的原理示意图。

具体实施方式

现有MP的内核对于报文的处理,主要是以桥接为主。主要做的是纯转发的工作。而原有的模块是不支持帧(其中,一个报文称为一帧)缓存的。这个报文的缓存,是有一定数量上限的,因为如果不做控制,那么则会导致内存使用量非常大。当达到上限,则会控制丢弃最早的报文。而NACK的请求下来后,则由应用层通知到内核,让内核去做重传的工作。

请参阅图1至图3所示,一种基于linux内核实现帧缓存丢包补偿的方法,所述方法应用在服务器IPPBX中,所述方法为:两个话机与所述服务器IPPBX建立连接后,两个话机分别对应生成一RTP会话处理实例slave,两个话机进行会话时在两个RTP会话处理实例slave之间建立桥接方式;

在服务器IPPBX的MP内核中的两个RTP会话处理实例slave之间建立一内核报文缓存,添加RTP缓存机制,

通过NACK的RTCP请求,来达到缓存丢包补偿。

所述添加RTP缓存机制,并通过NACK的RTCP请求,来达到缓存丢包补偿,具体为:两个话机进行媒体转发时,判断内核报文缓存是否达到上限,是则进行内核报文缓存进行缓存处理,控制丢弃最早的报文,在服务器IPPBX的MP内核收到NACK请求后,MP内核对NACK请求进行处理,让MP内核做重传工作。

请参阅图2所示,在本发明中,所述内核报文缓存进行缓存处理,控制丢弃最早的报文,具体为:服务器IPPBX的MP内核在收到一个RTP报文后,先判断内核报文缓存的大小是否达到上限,达到了上限,则需要将内核报文缓存中最早的RTP缓存报文给丢弃掉;丢弃掉后,在将现在接收的报文放到内核报文缓存中;报文放到内核报文缓存中进行一个快速排序,排序需要根据RTP报文中的SEQ序列以及timestamp时间戳共同决定,将最早的报文放置在最前面,而最后的报文放置在最后面;这样做丢包处理的时候,只要将最前面的报文丢弃即可;未达到上限,则不进行处理。

请参阅图3所示,所述MP内核对NACK请求进行处理,让MP内核做重传工作,具体为:在收到NACK请求后,MP内核要先解析NACK请求的内容;根据NACK报文中的丢包请求去内核报文缓存中找对应SEQ序列的RTP报文,如果有找到报文,则将该报文重新发送一次;而如果没有找到,则表示为已经不在内核报文缓存中,不进行操作。也就不能达到丢包补偿的功能,只能将当前的NACK报文当作是无效的请求。因此这个NACK的丢包请求是建立在内核报文缓存CACHE有缓存对应SEQ序列的RTP报文的前提下。

其中,内核要先解析NACK请求的内容;根据NACK报文中的丢包请求去内核报文缓存中找对应SEQ序列的RTP报文;解析NACK报文即解析出字段出来的。根据解析出来的字段,达到在现有缓存中获取已经缓存的SEQ的RTP报文,并进行补偿。

另外,NACK是一种接收端做丢包补偿请求的相关技术。可以在IPPBX服务器上做对话机1的丢包请求,同样,话机2也可以发送NACK请求给IPPBX做相关的NACK丢包请求。目前基于MP内核实现的IPPBX会给每个话机抽象出一个RTP会话处理实例slave来处理RTP报文。本发明加入了内核报文缓存机制,在MP内核的基础上加入报文缓存。话机2在出现RTP丢包后,发送NACK--->IPPBX-->IPPBX上的RTP会话处理实例slave2解析了NACK报文后,从内核报文缓存中去找丢包的RTP报文,并进行重传(参阅图3的流程)。

IPPBX服务器对话机1发送过来的RTP报文做了缓存处理,参阅图2的流程。在缓存处理的时候,也可以做一层的丢包检测,如果发现丢包,IPPBX也可以发送NACK-->话机1-->话机1如果支持NACK就业可以补充发送RTP报文。

请参阅图4所示,本发明的一种基于linux内核实现帧缓存丢包补偿的系统,所述系统应用在服务器IPPBX中;所述系统包括话机桥接模块,缓存处理模块以及NACK请求处理模块;

所述话机桥接模块,用于两个话机与所述服务器IPPBX建立连接后,两个话机分别对应生成一RTP会话处理实例slave,两个话机进行会话时在两个RTP会话处理实例slave之间建立桥接方式;

所述缓存处理模块,用于在服务器IPPBX的MP内核中的两个RTP会话处理实例slave之间建立一内核报文缓存,添加RTP缓存机制,

所述NACK请求处理模块,用于通过NACK的RTCP请求,来达到缓存丢包补偿。

两个话机进行媒体转发时,判断内核报文缓存是否达到上限,是则进行内核报文缓存进行缓存处理,控制丢弃最早的报文,在服务器IPPBX的MP内核收到NACK请求后,MP内核对NACK请求进行处理,让MP内核做重传工作。

其中,所述所述缓存处理模块进一步具体为:服务器IPPBX的MP内核在收到一个RTP报文后,先判断内核报文缓存的大小是否达到上限,达到了上限,则需要将内核报文缓存中最早的RTP缓存报文给丢弃掉;丢弃掉后,在将现在接收的报文放到内核报文缓存中;报文放到内核报文缓存中进行一个快速排序,排序需要根据RTP报文中的SEQ序列以及timestamp时间戳共同决定,将最早的报文放置在最前面,而最后的报文放置在最后面;这样做丢包处理的时候,只要将最前面的报文丢弃即可;未达到上限,则不进行处理。

所述所述NACK请求处理模块进一步具体为:在收到NACK请求后,MP内核要先解析NACK请求的内容;根据NACK报文中的丢包请求去内核报文缓存中找对应SEQ序列的RTP报文,如果有找到报文,则将该报文重新发送一次;而如果没有找到,则表示为已经不在内核报文缓存中,不进行操作。

总之,针对现有方案,已经将流媒体在linux内核中实现,有效的提高了报文转发的效率,但是并未能实现相关的NACK丢包补偿技术,因此在现有的方案中,本发明加入了对NACK丢包补偿的支持,因而能够达到既能有效的实现媒体高效转发,又能实现RTP丢包的有效补偿。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1