本发明涉及通信设备领域,特别涉及一种基于freeswitch的高性能媒体转发方法及装置。
背景技术:
freeswitch是一个开源的sip服务器,它具有良好的扩展性,并可支持多种编码以及可很好的支持rtp/rtcp协议。freeswitch支持jitterbuffer机制,并且在jitterbuffer机制上,可以实现nack丢包补偿功能。freeswitch还提供对报文的零拷贝机制,这样可以达到一定的高效报文转发。
目前,主流的流媒体技术都是rtp/rtcp协议,而rtp/rtcp协议中有一个补充协议,那就是nack丢包补偿技术。根据nack的rtcp报文内容,可以达到一定的丢包补偿功能。
在现有的freeswitch框架下,虽然有支持jitterbuffer以及nack的丢包补偿,但是其会话采用的是一对一的机制,每个会话都需要维护唯一的jitterbuffer,这导致如果有5000个会话,就需要维护5000个jitterbuffer。而jitterbuffer一旦缓存较大,就会导致程序占用过大的内存,进而导致设备要运行freeswitch就需要有更多的资源。这也使得当达到一定数量级的会话后,freeswitch将不在高性能运作,并且freeswitch对每个会话的rtp内容都是要做修改的,在一些纯转发的环境下,这些修改也会导致性能的下降。
技术实现要素:
本发明要解决的技术问题之一,在于提供一种基于freeswitch的高性能媒体转发方法,通过该方法来提高freeswitch的运行效率和对报文的转发处理效率,并可有效增强对网络的抗丢包能力。
本发明是这样实现技术问题之一的:基于freeswitch的高性能媒体转发方法,所述freeswitch上设置有唯一的jitterbuffer,所述方法包括如下步骤:
步骤1、由源发送rtp报文给所述freeswitch;
步骤2、所述freeswitch将接收的rtp报文缓存一份到jitterbuffer上;同时,所述freeswitch修改rtp报文的报文头,并将修改后的rtp报文转发给各对应的目的设备;
步骤3、各所述目的设备接收rtp报文,并检测rtp报文是否丢包,且若检测到丢包,则从所述freeswitch的jitterbuffer中重新获取丢失的rtp报文;若无丢包,则结束本次rtp报文的转发。
进一步地,在步骤2中,所述“freeswitch修改rtp报文的报文头”具体为:所述freeswitch根据所要转发的目的设备来修改rtp报文中rtp头部的payload字段,同时保持rtp报文的负载内容、seq序列以及ts时间戳不变。
进一步地,所述步骤3具体为:
各所述目的设备在接收到rtp报文后,均各自检测rtp报文中的seq序列,以确认接收的rtp报文是否出现丢包,且若检测到rtp报文出现丢包,则所述目的设备发送rtcpnack请求到所述freeswitch,所述rtcpnack请求中携带有丢失的seq序列号;
所述freeswitch接收到rtcpnack请求后,从共同的jitterbuffer中查找丢失的seq序列号所对应的rtp报文,并将查找到的rtp报文重传给发送请求的所述目的设备;
若检测到rtp报文无出现丢包,则结束本次rtp报文的转发。
本发明要解决的技术问题之二,在于提供一种基于freeswitch的高性能媒体转发装置,通过该转发装置来提高freeswitch的运行效率和对报文的转发处理效率,并可有效增强对网络的抗丢包能力。
本发明是这样实现技术问题之二的:基于freeswitch的高性能媒体转发装置,所述转发装置包括一源、一freeswitch以及至少一目的设备,所述freeswitch上设置有唯一的jitterbuffer;
所述源,用于发送rtp报文给所述freeswitch;
所述freeswitch,用于将接收的rtp报文缓存一份到jitterbuffer上;同时修改rtp报文的报文头,并将修改后的rtp报文转发给各对应的目的设备;
所述目的设备,用于接收rtp报文,并检测rtp报文是否丢包,且若检测到丢包,则从所述freeswitch的jitterbuffer中重新获取丢失的rtp报文;若无丢包,则结束本次rtp报文的转发。
进一步地,所述“修改rtp报文的报文头”具体为:所述freeswitch根据所要转发的目的设备来修改rtp报文中rtp头部的payload字段,同时保持rtp报文的负载内容、seq序列以及ts时间戳不变。
进一步地,所述目的设备具体为:
各所述目的设备在接收到rtp报文后,均各自检测rtp报文中的seq序列,以确认接收的rtp报文是否出现丢包,且若检测到rtp报文出现丢包,则发送rtcpnack请求到所述freeswitch,所述rtcpnack请求中携带有丢失的seq序列号;
所述freeswitch接收到rtcpnack请求后,从共同的jitterbuffer中查找丢失的seq序列号所对应的rtp报文,并将查找到的rtp报文重传给发送请求的所述目的设备;
若检测到rtp报文无出现丢包,则结束本次rtp报文的转发。
本发明具有如下优点:1、将freeswitch的一对一会话机制修改为一对多,可以提高freeswitch的运行效率;2、在转发时,仅修改rtp报文中rtp头部的payload字段,而不修改rtp报文的负载内容、seq序列以及ts时间戳,可以提高freeswitch对报文的转发处理效率;3、freeswitch仅维持一个jitterbuffer,使得可根据使用需要来增加jitterbuffer的容量,可有效增强对网络的抗丢包能力。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明的一对多的多媒体转发框架的示意图。
图2为本发明实现丢包补偿功能的时序图。
具体实施方式
请参照图1和图2所示,本发明基于freeswitch的高性能媒体转发方法的较佳实施例,所述freeswitch上设置有唯一的jitterbuffer,所述方法包括如下步骤:
步骤1、由源发送rtp报文给所述freeswitch;
步骤2、所述freeswitch将接收的rtp报文缓存一份到jitterbuffer上;同时,所述freeswitch修改rtp报文的报文头,并将修改后的rtp报文转发给各对应的目的设备;
步骤3、各所述目的设备接收rtp报文,并检测rtp报文是否丢包,且若检测到丢包,则从所述freeswitch的jitterbuffer中重新获取丢失的rtp报文;若无丢包,则结束本次rtp报文的转发。
由上述可知,本发明方法通过将freeswitch的一对一会话机制修改为一对多,并将jitterbuffer的数量限制为1个,且可基于原有的nack机制实现丢包补偿功能,这不仅可以极大的降低jitterbuffer的数量,减轻jitterbuffer对freeswitch的内存造成过大的压力,以使freeswitch可以将所有的资源都放在媒体转发处理上;而且由于jitterbuffer的数量仅限制为1个,完全可以将这个jitterbuffer的大小做高,而jitterbuffer大小的提高,对nack的丢包补偿能力也会有很大的提升。
在步骤2中,所述“freeswitch修改rtp报文的报文头”具体为:所述freeswitch根据所要转发的目的设备来修改rtp报文中rtp头部的payload字段,同时保持rtp报文的负载内容、seq序列以及ts时间戳不变。请重点参照图1所示,例如,源发出的rtp报文的payload字段为96,而目的设备1对应的payload字段为97,目的设备2对应的payload字段为98,目的设备3对应的payload字段为99,在freeswitch接收到源发出的rtp报文后,如果需要将rtp报文转发给目的设备1,就将rtp报文的payload字段改为97;如果需要将rtp报文转发给目的设备2,就将rtp报文的payload字段改为98;同理,如果还需要转发给其它的目的设备,也只需要修改对应的payload字段即可。
所述步骤3具体为:
各所述目的设备在接收到rtp报文后,均各自检测rtp报文中的seq序列,以确认接收的rtp报文是否出现丢包,且若检测到rtp报文出现丢包,则所述目的设备发送rtcpnack请求到所述freeswitch,所述rtcpnack请求中携带有丢失的seq序列号;
所述freeswitch接收到rtcpnack请求后,从共同的jitterbuffer中查找丢失的seq序列号所对应的rtp报文,并将查找到的rtp报文重传给发送请求的所述目的设备;请重点参照图2所示,例如,目的设备在接收到rtp报文后,检测到seq序列号为17,22,25的这几个报文丢失了,目的设备就发送rtcpnack请求给所述freeswitch,其中,所述rtcpnack请求中携带有丢失的seq序列号17,22,25;所述freeswitch在接收到rtcpnack请求后,就从共同的jitterbuffer中查找seq序列号为17,22,25的报文,并将查找到的seq序列号为17,22,25的报文重新传送给发送请求的目的设备;
同时,由图2的时序图可看出,jitterbuffer的大小更大,那么其丢包重传的能力也越强,而在本发明方法中,由于仅有一个jitterbuffer,在必要时刻(比如需要增加重传能力时),完全可以将jitterbuffer的容量变大,以提高重传能力。另外,由于目的设备1~目的设备n都是使用同一个rtp源的报文,我们在优化了freeswitch,使其对转发的报文的seq序列保持不变,可以保证目的设备1~目的设备n接收到的rtp报文的seq序列是一致的,这样也就达到了仅需维护一个jitterbuffer,并可有效降低freeswitch内存的目的。
若检测到rtp报文无出现丢包,则结束本次rtp报文的转发。
请重点参照图1和图2所示,本发明基于freeswitch的高性能媒体转发装置的较佳实施例,所述转发装置包括一源、一freeswitch以及至少一目的设备,所述freeswitch上设置有唯一的jitterbuffer;
所述源,用于发送rtp报文给所述freeswitch;
所述freeswitch,用于将接收的rtp报文缓存一份到jitterbuffer上;同时修改rtp报文的报文头,并将修改后的rtp报文转发给各对应的目的设备;
所述目的设备,用于接收rtp报文,并检测rtp报文是否丢包,且若检测到丢包,则从所述freeswitch的jitterbuffer中重新获取丢失的rtp报文;若无丢包,则结束本次rtp报文的转发。
由上述可知,本发明转发装置通过将freeswitch的一对一会话机制修改为一对多,并将jitterbuffer的数量限制为1个,且可基于原有的nack机制实现丢包补偿功能,这不仅可以极大的降低jitterbuffer的数量,减轻jitterbuffer对freeswitch的内存造成过大的压力,以使freeswitch可以将所有的资源都放在媒体转发处理上;而且由于jitterbuffer的数量仅限制为1个,完全可以将这个jitterbuffer的大小做高,而jitterbuffer大小的提高,对nack的丢包补偿能力也会有很大的提升。
所述“修改rtp报文的报文头”具体为:所述freeswitch根据所要转发的目的设备来修改rtp报文中rtp头部的payload字段,同时保持rtp报文的负载内容、seq序列以及ts时间戳不变。请重点参照图1所示,例如,源发出的rtp报文的payload字段为80,而目的设备1对应的payload字段为86,目的设备2对应的payload字段为87,目的设备3对应的payload字段为88,在freeswitch接收到源发出的rtp报文后,如果需要将rtp报文转发给目的设备1,就将rtp报文的payload字段改为86;如果需要将rtp报文转发给目的设备2,就将rtp报文的payload字段改为87;同理,如果还需要转发给其它的目的设备,也只需要修改对应的payload字段即可。
所述目的设备具体为:
各所述目的设备在接收到rtp报文后,均各自检测rtp报文中的seq序列,以确认接收的rtp报文是否出现丢包,且若检测到rtp报文出现丢包,则发送rtcpnack请求到所述freeswitch,所述rtcpnack请求中携带有丢失的seq序列号;
所述freeswitch接收到rtcpnack请求后,从共同的jitterbuffer中查找丢失的seq序列号所对应的rtp报文,并将查找到的rtp报文重传给发送请求的所述目的设备;请重点参照图2所示,例如,目的设备在接收到rtp报文后,检测到seq序列号为17,22,25的这几个报文丢失了,目的设备就发送rtcpnack请求给所述freeswitch,其中,所述rtcpnack请求中携带有丢失的seq序列号17,22,25;所述freeswitch在接收到rtcpnack请求后,就从共同的jitterbuffer中查找seq序列号为17,22,25的报文,并将查找到的seq序列号为17,22,25的报文重新传送给发送请求的目的设备;
同时,由图2的时序图可看出,jitterbuffer的大小更大,那么其丢包重传的能力也越强,而在本发明转发装置中,由于仅有一个jitterbuffer,在必要时刻(比如需要增加重传能力时),完全可以将jitterbuffer的容量变大,以提高重传能力。另外,由于目的设备1~目的设备n都是使用同一个rtp源的报文,我们在优化了freeswitch,使其对转发的报文的seq序列保持不变,可以保证目的设备1~目的设备n接收到的rtp报文的seq序列是一致的,这样也就达到了仅需维护一个jitterbuffer,并可有效降低freeswitch内存的目的。
若检测到rtp报文无出现丢包,则结束本次rtp报文的转发。
综上所述,本发明具有如下优点:1、将freeswitch的一对一会话机制修改为一对多,可以提高freeswitch的运行效率;2、在转发时,仅修改rtp报文中rtp头部的payload字段,而不修改rtp报文的负载内容、seq序列以及ts时间戳,可以提高freeswitch对报文的转发处理效率;3、freeswitch仅维持一个jitterbuffer,使得可根据使用需要来增加jitterbuffer的容量,可有效增强对网络的抗丢包能力。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。