一种快速处理实时媒体流数据包的方法及其系统的制作方法

文档序号:7589790阅读:146来源:国知局
专利名称:一种快速处理实时媒体流数据包的方法及其系统的制作方法
技术领域
本发明涉及一种IP网络数据通讯处理技术,更确切地说是涉及基于UDP(User Datagram Protocol用户数据报协议)的RTP/RTCP(Real-timeTransport Protocol/Real-time Transport Control Protocol实时传输协议/实时传输控制协议)协议传输实时媒体流数据包的一种快速处理方法,应用于媒体网关、IAD(Integrate Access Device综合接入设备)、IP多媒体终端等设备中基于RTP/RTCP传输的实时媒体流数据包的快速接收和快速发送处理。
本发明还涉及一种用于快速处理实时媒体流数据包的系统。
背景技术
随着互联网的普及和多媒体技术在互联网上的应用,目前迫切要求能有解决实时传送视频、音频等实时媒体流的技术,目前一般使用RTP/RTCP(Real-time Transport Protocol/Real-time Transport Control Protocol实时传输协议/实时传输控制协议)协议来传输视频、音频等实时媒体流数据。
所述实时传输协议RTP提供时间信息和实现流同步;RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠实时传输控制协议RTCP提供这些服务;所述实时传输控制协议RTCP和实时传输协议RTP一起提供流量控制和拥塞控制服务;在RTP会话期间,各参与者周期性地传送RTCP包;该RTCP包中含有已发送的数据包的数量、丢失的数据包数量等统计资料,因此,可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP进行配合使用,能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。通常RTP算法并不作为一个独立的网络层来实现,而是作为应用程序代码的一部分。网络传输协议RTP通常使用UDP来传送数据;当应用程序开始一个RTP会话时将使用两个本地端口一个给RTP,一个给RTCP。
如图1所示的,为RTP/RTCP数据包的传统发送流程。所述RTP/RTCP应用层程序要发送实时媒体流数据包时,将调用SOCKET API函数的SendTo发送数据,在SOCKET层内部经过sendit、sosend等函数进行以下操作sendit函数准备sosend系统调用所需的数据结构msghdr,初始化uio结构,创建MBUF,并将进程指定的输出缓存中的数据收集到内核缓存中,然后将控制和地址信息从进程空间复制到内核,最后将插口、目的地址、uio结构、控制信息和标志等全部传给函数sosend;所述sosend的功能是检查差错条件和等待发送缓存中的闲置空间,当检查差错情况时,为防止缓存发生改变,协议处理先被挂起,将进程来的数据复制到内核,通过调用udp_output并将数据传递给与插口相关的UDP协议层。UDP层用来分析控制信息、数据的内容及合法性,临时连接一个未连接上的插口,填充udpiphdr结构的字段,为检验和计算准备伪首部,计算检验和,填充UDP长度、TTL和TOS等,最后调用ip_output发送数据包到IP层。在IP层完成以下操作初始化IP首部,确定一条到目的地的路由并获取下一跳的MAC地址,保证所述IP首部有一个有效源地址,复制数据和计算检验和,然后把分组提交给与路由相关的接口if_output函数,完成以太网头部数据的填充,最后调用网口驱动层的发送函数。所述网口驱动发送函数拷贝MBUF中的以太网包数据并驱动网络接口硬件把数据传输到物理层。
如图2所示的,为RTP/RTCP数据包的传统接收流程。一个基于UDP的RTP/RTCP实时媒体流数据包被网口接收函数(即网口驱动以太网帧接收函数)接收后,通过TCP/IP协议栈注册的回调函数ether_input把数据上传给TCP/IP协议栈,经过协议栈IP层的处理,分发给UDP层处理,UDP层的udp_input函数再按照UDP数据包中的目的端口号依次找到对应的接收SOCKET,并把数据放到对应的接收缓冲区中,如此分层拆包处理。RTP/RTCP协议层应用程序任务会每隔一定的时间间隔,调用recvfrom函数从SOCKET的接收缓冲区中读出数据放到应用程序任务的缓冲区中处理。
经过实验和分析发现,在媒体网关、IAD、IP多媒体终端等设备中使用这种发送RTP/RTCP数据包的方法存在一些不必要的处理,导致了处理效率很低,具体表现在以下3个方面1、实时媒体流数据通过RTP/RTCP数据包承载在UDP上,根据RTP/RTCP数据包的特性,RTP/RTCP协议层应用程序已经确定了数据包中的源IP、源PORT、目的IP、目的PORT等内容,而标准TCP/IP协议栈、SOCKET层存在很多协议、地址分析判断处理,这些处理和判断的结果对于RTP/RTCP数据包的发送来说是已知的和多余的,完全不需要。
2、标准TCP/IP协议栈在不同的层来填充数据包中的相关字段,分层来处理不同的协议层数据,因而层数多,层数多则必然需要更多的动态内存的申请操作,这样会进行大量的数据结构的转换、数据的拷贝以及数据判断等非常耗时、占CPU资源的操作。根据在一个会话中实时媒体流RTP/RTCP数据包的特征,实时媒体流数据包从上层应用程序到网络驱动发送可以由一个新的处理函数实现,跨越SOCKET层及标准协议栈。
3、通过所述标准TCP/IP协议栈发送数据时,每个数据包都要进行路由、ARP的查找,协议栈的这些操作是非常费时的。根据在一个会话中实时媒体流RTP/RTCP数据包的特征,软件可以采用基于端口的ARP策略来大大降低这种非常费时的路由、ARP查找操作。
在媒体网关、IAD、IP多媒体终端等设备中使用这种接收RTP/RTCP数据包的方法也存在一些不必要的处理,导致了处理效率很低,具体表现在以下2个方面1、这种分层拆包处理存在很多冗余、费时的处理,如多次协议类型、地址信息、数据合法性的判断,多次数据结构的转换,多次数据拷贝等等,这些操作对于已知端口范围的UDP数据接收来说是不必要的。
2、RTP/RTCP协议层应用程序任务采用SOCKET编程定时查询方式接收数据大大增加了时延并浪费了CPU资源。
如上所述,在传统的RTP/RTCP数据包的处理过程中,RTP/RTCP应用层通过SOCKET API与TCP/IP协议栈完成接口操作,由TCP/IP协议栈与网络驱动层完成数据的接收与发送。在发送方向上,RTP/RTCP应用层程序调用SOCKET API的发送函数把数据发送出去,存在处理效率低的问题;在接收方向上,RTP/RTCP协议应用程序以定时查询的方式调用SOCKET API的接收函数来接收数据包,并分层拆包处理,同样存在处理效率低下的问题。

发明内容
本发明的目的在于提供一种快速处理实时媒体流数据包的方法及其系统,由媒体网关、IAD以及IP多媒体终端等设备通过实现该系统来使用这种方法,通过在接收方向上使用IP数据包快速过滤模块取代TCP/IP协议栈的数据接收处理函数集及SOCKET接收处理,并去除了TCP/IP协议栈分层拆包过程中的数据结构转换,以及在发送方向上使用UDP快速发送模块代替TCP/IP协议栈的数据发送处理函数集及SOCKET发送处理,发送实时媒体流数据包时减少多层分发处理的函数调用,从而去除数据结构的多次转换和减少动态内存的申请和数据的拷贝,使之相对于使用传统的TCP/IP协议栈处理方式,RTP/RTCP数据包的处理效率明显提高,提高设备的处理能力,减少媒体流数据包的网络时延,从而提高网络服务质量。
本发明的目的通过如下技术方案实现一种快速处理实时媒体流数据包的系统,其包括一IP数据包快速过滤模块、一UDP快速发送模块以及一基于本地UDP端口策略ARP表处理模块;所述系统还包括一基于UDP端口注册的RTP/RTCP快速接收处理函数,所述RTP/RTCP快速接收处理函数位于RTP/RTCP应用层内;所述基于本地UDP端口策略ARP表处理模块与所述IP数据包快速过滤模块和所述UDP快速发送模块通讯连接,并且所述基于本地UDP端口策略ARP表处理模块根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标的ARP表;所述IP数据包快速过滤模块在数据链路层接收函数中,安装快速接收钩子函数;所述钩子函数用于分析以太网数据包的内容;RTP/RTCP应用层在所述钩子函数中注册UDP端口对应的RTP/RTCP快速接收处理函数;所述UDP快速发送模块用于在所述RTP/RTCP应用层任务发送实时媒体流数据包时直接调用所述UDP快速发送模块提供的发送函数,经过该UDP快速发送模块的处理,最后调用对应的网口发送函数把数据发送出去;所述IP数据包快速过滤模块用于把实时媒体流数据包从一网口接收函数接收后,传输给所述RTP/RTCP快速接收处理函数,从而直接传输到所述RTP/RTCP应用层的任务的缓冲区中。
所述的系统,其中,该系统还包括一TCP/IP协议栈模块,所述UDP快速发送模块还在无法完成数据包发送的情况下,通过TCP/IP协议栈模块使用SOCKET API发送数据包。
所述的系统,其中,所述ARP表中的信息主要有数据包的目的IP地址、下一跳的MAC地址、该表项上次刷新时间。
所述的系统,其中,所述钩子函数分析以太网数据包的内容包括分析是否是IP数据包,如果是进一步分析是否是UDP数据包,如果是进一步分析是否是已经注册了的UDP端口范围的数据包,如果是则调用对应的基于UDP端口注册的RTP/RTCP快速接收处理函数,将实时媒体流数据包直接传输到RTP/RTCP应用层任务的缓冲区中。
所述的系统,其中,所述钩子函数分析以太网数据包的内容还包括分析是否是IP数据包,如果不是钩子函数实体进一步解析是否是免费ARP包,如果是则启动基于本地UDP端口策略的ARP表刷新机制,使策略ARP表无效。
一种所述的快速处理实时媒体流数据包的方法,其包括以下步骤a)所述基于本地UDP端口策略ARP表处理模块根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标的ARP表;b)上层应用调用所述UDP快速发送模块发送RTP/RTCP数据包,根据所述RTP/RTCP数据包的目的IP地址,使用传统TCP/IP协议栈的相关接口函数获取下一跳的MAC地址;c)如果成功获取下一跳的MAC地址则刷新ARP表项中的下一跳的MAC地址并直接发送该RTP/RTCP数据包,此后如果在该UDP端口上所发送的目的IP地址不变且端口ARP表未到老化时间,则均直接使用ARP表项中的下一跳MAC地址填充以太网数据包的目的MAC地址,快速发送该RTP/RTCP数据包;d)如果不能获取下一跳的MAC地址,则需要通过TCP/IP UDPSOCKET API发送这个RTP/RTCP数据包,以便TCP/IP协议栈获得下一跳MAC地址并刷新协议栈ARP表,在该端口的下一个数据包发送时,就可成功获取下一跳的MAC地址并刷新基于本地UDP端口的策略ARP表项中的下一跳的MAC地址。
所述的方法,其中,所述方法包括RTP/RTCP数据包的快速发送方法,其包括以下处理步骤a1)根据所述RTP/RTCP应用层的情况,初始化全局以太网数据帧结构,并填充相关字段;a2)所述RTP/RTCP应用层在发送实时媒体流数据包时,准备协议层数据指针、数据长度、源IP地址、目的IP地址、源UDP端口号、目的UDP端口号等参数,调用所述UDP快速发送模块提供的RTP/RTCP发送函数a3)所述UDP快速发送模块根据源UDP端口号、目的IP地址从ARP表中获取下一跳MAC地址;如果获取不成功,则通过TCP/IP协议栈模块发送这个RTP/RTCP数据包;a4)如果获取成功,使用已初始化的以太网数据帧结构,并填充相应的字段,以及根据需要计算并填充IP、UDP的校验字段;a5)调用网口发送函数发送数据包。
所述的方法,其中,所述方法的RTP/RTCP数据包的快速接收方法,其包括以下处理步骤b1)根据所述系统的本地UDP端口资源的分配情况维护一个协议层回调函数注册表,注册一RTP/RTCP快速接收处理函数来接收处理目的端口号对应的UDP数据包,所述RTP/RTCP快速接收处理函数完成把RTP/RTCP数据包写到RTP/RTCP应用层的缓冲区中b2)在网口接收函数中注册一以太网数据包快速接收处理钩子函数,该钩子函数的实体为所述IP数据包快速过滤模块,用以分析所述以太网数据包是否为本网口的UDP/IP数据包并进行过滤处理;b3)根据所述UDP数据包的目的端口号和RTP/RTCP应用层回调函数注册表,调用UDP目的端口号对应的RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收处理函数,由该回调函数完成该UDP数据包的处理
b4)如果所述IP数据包快速过滤模块已经成功通过RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收函数处理,则返回一个已经被处理的标记;b5)网口接收函数根据以太网数据包快速接收处理钩子函数返回的是否已经处理标记,判断是否要继续传给所述TCP/IP协议栈模块处理。
所述的方法,其中,所述步骤b4)后如果没有被处理,则分析是否是免费ARP包;在网口接收函数上收到免费ARP包时,使ARP表项中的MAC地址失效,以便随后发RTP/RTCP数据包时主动从所述TCP/IP协议栈重新获取下一跳MAC并刷新ARP表。
所述的方法,其中,在所述步骤d)定义一刷新时间间隔,以定时刷新所述基于本地UDP端口的策略ARP表。
本发明的快速处理实时媒体流数据包的方法及其系统充分利用了RTP/RTCP协议数据实时媒体流的特性,从根本上改变了媒体流数据包的处理流程。
首先在接收方向上使用IP数据包快速过滤模块取代TCP/IP协议栈的数据接收处理函数集及SOCKET接收处理,并去除了TCP/IP协议栈分层拆包过程中的数据结构转换,大大减少了各种协议类型、地址信息、数据内容的有效、合法性判断。RTP/RTCP应用层不需要SOCKET编程中的定时查询操作,RTP/RTCP协议实时媒体流数据直接通过RTP/RTCP应用层注册的回调函数写入RTP/RTCP应用层的缓冲区中。
其次在发送方向上使用UDP快速发送模块代替TCP/IP协议栈的数据发送处理函数集及SOCKET发送处理,发送实时媒体流数据包时减少多层分发处理的函数调用,从而去除数据结构的多次转换和减少动态内存的申请和数据的拷贝。
更重要的是本发明采用基于本地UDP端口策略ARP表处理模块,根本上改变传统TCP/IP协议栈发送数据包时的下一跳地址查找机制。
本发明的系统和方法相对于传统的TCP/IP协议栈及SOCKET编程的侦听接收与发送,使用本发明可快速处理实时媒体流数据包,提高设备的处理能力,减少媒体流数据包的网络时延,从而提高网络服务质量。
在产品的对比测试中,使用本发明的方法和系统,实时媒体流数据包的处理效率明显提高,设备的处理能力大大增强,从而减少了实时媒体流数据包的网络时延,提高了实时媒体流的服务质量。实验结果显示以主频为50M的通用CPU和通用10M/100M自适应网络控制器设备为例,使用传统的TCP/IP SOCKET API处理实时媒体流数据包,处理20路G.711 20ms的语音数据流会占用80%左右的CPU处理时间,而如果采用本发明的方法及系统处理实时媒体流数据包,处理20路G.711 20ms的语音数据流会只占用20%左右的CPU处理时间,因此数据包的处理效率显著提高。


图1是现有技术中的传统实时媒体流数据包发送框图;图2是现有技术的传统实时媒体流数据包接收框图;图3是本发明的快速处理实时媒体流数据包模块框图;图4是本发明的实时媒体流快速发送处理流程;图5是本发明的实时媒体流快速接收处理流程。
具体实施例方式
下面结合附图对技术方案的实施作进一步的详细描述请参见图3,本发明的改进实施例涉及三个主要发明创造部分IP数据包快速过滤模块、UDP快速发送模块以及基于本地UDP端口策略ARP表处理模块;本发明的系统还包括传统的TCP/IP协议栈模块和基于UDP端口注册的RTP/RTCP快速接收处理函数,一网口接收函数和一网口发送函数位于数据链路层内;所述RTP/RTCP快速接收处理函数位于RTP/RTCP应用层内。
本发明的所述快速处理实时媒体流数据包的系统,充分利用了RTP/RTCP实时媒体流数据包的特征进行快速接收和发送处理。在发送方向上RTP/RTCP实时媒体流的特征是已知数据包的源IP地址、目的IP地址、源UDP端口、目的UDP端口;在接收方向上RTP/RTCP实时媒体流的特征是已知数据包的目的IP地址、目的UDP端口范围。
所述基于本地UDP端口策略ARP表处理模块包括以下特征根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标(索引)的ARP表;该ARP表中的信息主要有数据包的目的IP地址,用于保存该本地UDP端口上次UDP数据包的目的IP地址;下一跳的MAC地址,用于保存数据包的目的IP地址所对应的MAC地址;该表项上次刷新时间。
在最开始,上层应用调用快速发送接口发送RTP/RTCP数据包,此时所需发送的数据包的目的地址IP不等于所述基于本地UDP端口的策略ARP表中的数据包的目的IP地址,需要根据RTP/RTCP数据包的目的IP地址,使用传统的TCP/IP协议栈的相关接口函数获取下一跳的MAC地址。
如果成功获取了下一跳的MAC地址则刷新所述ARP表项中的下一跳的MAC地址并直接发送该RTP/RTCP数据包,此后如果在该UDP端口上所发送的目的IP地址不变且端口ARP表未到老化时间,则均直接使用所述ARP表项中的下一跳MAC地址填充以太网数据包的目的MAC地址,以实现快速发送该RTP/RTCP数据包。
如果不能获取下一跳的MAC地址,则需要通过TCP/IP UDP SOCKETAPI发送这个RTP/RTCP数据包,以便所述TCP/IP协议栈模块启动传统的获得下一跳MAC地址的流程并刷新TCP/IP协议栈ARP表,在该端口的下一个数据包发送时,必须成功获取下一跳的MAC地址并刷新所述基于本地UDP端口的策略ARP表项中的下一跳的MAC地址。
在网口接收函数上收到免费ARP包时,需要使所述ARP表项中的MAC地址失效,这样在随后发RTP/RTCP数据包时能主动从所述TCP/IP协议栈重新获取下一跳MAC并刷新ARP表。并且可以定义一个刷新时间间隔,以便定时刷新基于本地UDP端口的策略ARP表。
所述IP数据包快速过滤模块的特征在于在所述数据链路层的网口接收函数中安装快速接收钩子函数;该钩子函数的实体分析以太网数据包的内容;所述RTP/RTCP应用层在该钩子函数实体中注册UDP端口对应的RTP/RTCP快速接收处理函数。
进一步地,所述钩子函数实体分析以太网数据包的内容还包括分析该以太网数据包是否是IP数据包,如果是进一步分析是否是UDP数据包,如果是进一步分析是否是已经注册了的UDP端口范围的数据包,如果是则调用对应的基于UDP端口注册的RTP/RTCP快速接收处理函数,将实时媒体流数据包直接传输到RTP/RTCP应用层任务的缓冲区中。
如果不是IP数据包,所述钩子函数实体进一步解析是否是免费ARP包,免费ARP包区别于其他ARP包的特征是其数据包中的目的IP地址与源IP地址一致,如果是则启动基于本地UDP端口策略的ARP表刷新机制,使策略ARP表无效。
所述UDP快速发送模块的特征包括所述RTP/RTCP应用层任务发送实时媒体流数据包时直接调用该UDP快速发送模块提供的网口发送函数,经过该UDP快速发送模块的处理,最后调用对应的网口驱动程序发送函数把数据发送出去。
进一步地,该发送模块充分利用了RTP/RTCP传输实时媒体流的特征,维护所述基于本地UDP端口策略的ARP表完成下一跳MAC地址的获取,如此,以太网数据包的接收和发送都尽可能不经过现有技术的所述TCP/IP协议栈模块处理,并采用所述基于本地端口的策略ARP表大大降低了非常费时的路由、ARP查找等操作;并且发送过程中使用已经申请并初始化好的以太网数据包结构,数据包中的很多字段不需要重新填写,这样就从发送和接收方向上都提高了RTP/RTCP传输实时媒体流的传输效率,降低了对CPU的利用率。
另外,所述UDP快速发送模块的特征还包括在所述UDP快速发送模块无法完成数据包发送的情况下,本发明系统仍然通过TCP/IP协议栈模块使用SOCKET API发送数据包。传统的TCP/IP协议栈支持SOCKET接口和一些标准IO控制接口,通过调用传统的协议栈提供的接口,可以根据数据包的目的IP得到下一跳的IP地址;通过调用传统协议栈提供的接口,可以根据下一跳的IP地址,得到该IP地址所对应的MAC地址。
所述IP数据包快速过滤模块的特征还包括所述基于UDP端口注册的RTP/RTCP快速接收处理函数负责把实时媒体流数据包直接传输到RTP/RTCP应用层任务的缓冲区中。
以下具体描述本发明的一较佳实施例在本发明的系统和方法中,在RTP/RTCP数据包的接收方向上使用所述IP数据包快速过滤模块取代现有技术的TCP/IP协议栈模块,通过RTP/RTCP协议应用程序注册的基于本地UDP端口范围的RTP/RTCP快速接收处理函数直接把从所述网口接收函数收到的RTP/RTCP数据包写到对应的RTP/RTCP协议应用程序的数据接收缓冲区中。在RTP/RTCP数据包的发送方向上使用所述UDP快速发送处理模块取代现有技术的TCP/IP协议栈模块,直接把RTP/RTCP应用层的数据写到网口发送函数的发送缓冲区中。根据设备RTP/RTCP协议端口资源的分配情况,提供基于本地UDP端口的策略ARP表及其查找、刷新机制,取代所述TCP/IP协议栈的路由及其下一跳MAC地址的查找机制。
所述基于本地UDP端口的策略ARP表及其查找、刷新机制,包括以下内容A、根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标(索引)的ARP表项,即一结构数组PORT_IP_MAC_TABLE[PORT_MAP_VALUE]。例如如果设备中RTP/RTCP的端口资源范围为10000----20000,结构数组下标与UDP端口的映射关系可以是UDP端口号X对应下标PORT_MAP_VALUE=(X-10000)/2。
B、所述ARP表项结构内容包含四个字节的RtpRtcpDestIp、六个字节的NextHopMacAddr、四个字节的refurbishTick。所述RtpRtcpDestIp保存该本地UDP端口上次UDP数据包的目的IP地址,NextHopMacAddr保存RtpRtcpDestIp对应的下一跳MAC地址,refurbishTick保存该表项上次刷新时间。
C、如图3所示,所述IP数据包快速过滤处理模块收到免费ARP包时,通过清除PORT_IP_MAC_TABLE表中各表项的refurbishTick使表项中的MAC地址失效,这样在发RTP/RTCP数据包时能主动从TCP/IP协议栈重新获取下一跳MAC并刷新表项中的数据。
D、定义一个刷新时间间隔,所述RTP/RTCP应用层发送实时媒体流数据时,如图4所示,首先根据UDP源端口对应数据项的refurbishTick和系统时间值以及定义的刷新时间间隔,判断该表项内容是否需要刷新。如果没到刷新时间,则继续执行步骤E。如果需要刷新,则执行步骤F。
E、判断传输的RTP/RTCP数据包的目的IP地址与表项中的RtpRtcpDestIp是否一致,如果相同则继续执行步骤G。如果不相同,则执行步骤F。
F、根据传输的RTP/RTCP数据包的目的IP地址,使用TCP/IP协议栈的相关路由、ARP函数获取下一跳的MAC地址。如果成功获取则刷新ARP表项的refurbishTick、NextHopMacAddr、RtpH248DestIp,并继续执行所述步骤G。否则通过TCP/IP UDP SOCKET API发送这个RTP/RTCP数据包,以便TCP/IP协议栈刷新ARP表。
G、直接使用ARP表项中的下一跳MAC地址NextHopMacAddr填充以太网数据包的目的MAC地址,快速发送该RTP/RTCP数据包。
本发明方法的RTP/RTCP数据包的快速发送方法,如图3、图4所示,其包括以下处理步骤H、根据所述RTP/RTCP应用层的情况,初始化全局以太网数据帧结构,并填充相关字段。
I、所述RTP/RTCP应用层要发送实时媒体流数据包时,需要准备协议层数据指针、数据长度、源IP地址、目的IP地址、源UDP端口号、目的UDP端口号等参数,调用所述UDP快速发送模块提供的RTP/RTCP发送函数。
J、所述UDP快速发送模块根据源UDP端口号、目的IP地址从PORT_IP_MAC_TABLE中获取下一跳MAC地址。如果不成功,则通过TCP/IP UDP SOCKET API发送这个RTP/RTCP数据包。如果成功,则继续执行步骤K。
K、使用已初始化的以太网数据帧结构,并填充相应的字段,如源IP、目的IP、源PORT、目的PORT、源MAC、目的MAC等,以及根据需要计算并填充IP、UDP的校验字段。
L、调用网口驱动程序即数据链路层的网口发送函数发送数据。
本发明方法的RTP/RTCP数据包的快速接收方法,如图3、图5所示,其包括以下处理步骤M、根据本发明系统的本地UDP端口资源的分配情况维护一个协议层回调函数注册表,如UDP端口号10000----20000对应的是RTP/RTCP数据包,注册一个RTP/RTCP快速接收处理函数来接收处理目的端口号为10000---20000范围的UDP数据包。所述RTP/RTCP快速接收处理函数主要完成把RTP/RTCP数据包写到RTP/RTCP应用层的缓冲区中。
N、在网口驱动程序即所述数据链路层的网口接收函数中注册一个以太网数据包快速接收处理钩子函数,该钩子函数的实体IP数据包快速过滤模块分析以太网数据包并进行过滤处理。
O、所述IP数据包快速过滤模块分析该以太网数据包是否为本网口的UDP/IP包。
P、根据UDP数据包的目的端口号和RTP/RTCP应用层回调函数注册表,调用UDP目的端口号对应的RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收处理函数,由该回调函数完成该UDP数据包的处理。
Q、如果IP数据包快速过滤模块已经成功通过RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收函数处理,则返回一个已经被处理的标记。
R、如果没有被处理,则分析是否是免费ARP包,如果是,通过清除PORT_IP_MAC_TABLE表中各表项的refurbishTick使表项中的MAC地址失效。
S、网口驱动程序的所述网口接收函数,根据以太网数据包快速接收处理钩子函数返回的是否已经处理标记,判断是否要继续传给所述TCP/IP协议栈模块处理。
综上所述,本发明为媒体网关、IAD(Integrate Access Device综合接入设备)、多媒体终端等网络节点揭示了一种基于UDP(User DatagramProtocol用户数据报协议)的RTP/RTCP(Real-time Transport Protocol/Real-time Transport Control Protocol实时传输协议/实时传输控制协议)传输实时媒体流数据包的快速处理方法及其系统,这种方法包括快速接收处理基于RTP/RTCP协议传输的实时媒体流数据包;快速发送基于RTP/RTCP协议传输的实时媒体流数据包;基于本地UDP端口的策略ARP表及其刷新机制。其中快速接收包括实时媒体流数据包到达网口驱动程序接收函数(数据链路层)后,经过新增的IP(Internet Protocol网际协议)数据包快速过滤模块,跳过现有技术的TCP/IP协议栈模块,直接通过所述基于本地UDP端口注册的RTP/RTCP快速接收处理函数,将实时媒体流数据包直接传输到RTP/RTCP应用层任务的缓冲区中。而快速发送包括所述RTP/RTCP应用层任务发送实时媒体流数据包时直接调用新增的UDP数据包快速发送处理函数经过UDP快速发送模块的处理,最后调用网口驱动程序的网口发送函数发送数据包,不经过所述TCP/IP协议栈模块,充分利用RTP/RTCP传输实时媒体流的特征,由所述UDP快速发送模块维护基于本地UDP端口策略ARP表完成下一跳MAC地址的获取。由此,本发明的系统和方法,相对于传统的TCP/IP协议栈及SOCKET编程的侦听接收与发送,使用本发明可快速处理实时媒体流数据包,提高设备的处理能力,减少媒体流数据包的网络时延,从而提高网络服务质量。
应当理解的是,对本发明的同领域普通技术人员来说,可以根据本发明的技术方案及其构思做出各种可能的改变或变形,而所有这些改变或变形都应属于本发明所附权利要求的保护范围。
权利要求
1.一种快速处理实时媒体流数据包的系统,其包括一IP数据包快速过滤模块、一UDP快速发送模块以及一基于本地UDP端口策略ARP表处理模块;所述系统还包括一基于UDP端口注册的RTP/RTCP快速接收处理函数,所述RTP/RTCP快速接收处理函数位于RTP/RTCP应用层内;所述基于本地UDP端口策略ARP表处理模块与所述IP数据包快速过滤模块和所述UDP快速发送模块通讯连接,并且所述基于本地UDP端口策略ARP表处理模块根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标的ARP表;所述IP数据包快速过滤模块在数据链路层接收函数中,安装快速接收钩子函数;所述钩子函数用于分析以太网数据包的内容;RTP/RTCP应用层在所述钩子函数中注册UDP端口对应的RTP/RTCP快速接收处理函数;所述UDP快速发送模块用于在所述RTP/RTCP应用层任务发送实时媒体流数据包时直接调用所述UDP快速发送模块提供的发送函数,经过该UDP快速发送模块的处理,最后调用对应的网口发送函数把数据发送出去;所述IP数据包快速过滤模块用于把实时媒体流数据包从一网口接收函数接收后,传输给所述RTP/RTCP快速接收处理函数,从而直接传输到所述RTP/RTCP应用层的任务的缓冲区中。
2.根据权利要求1所述的系统,其特征在于,该系统还包括一TCP/IP协议栈模块,所述UDP快速发送模块还在无法完成数据包发送的情况下,通过TCP/IP协议栈模块使用SOCKET API发送数据包。
3.根据权利要求2所述的系统,其特征在于,所述ARP表中的信息主要有数据包的目的IP地址、下一跳的MAC地址、该表项上次刷新时间。
4.根据权利要求3所述的系统,其特征在于,所述钩子函数分析以太网数据包的内容包括分析是否是IP数据包,如果是进一步分析是否是UDP数据包,如果是进一步分析是否是已经注册了的UDP端口范围的数据包,如果是则调用对应的基于UDP端口注册的RTP/RTCP快速接收处理函数,将实时媒体流数据包直接传输到RTP/RTCP应用层任务的缓冲区中。
5.根据权利要求3所述的系统,其特征在于,所述钩子函数分析以太网数据包的内容还包括分析是否是IP数据包,如果不是钩子函数实体进一步解析是否是免费ARP包,如果是则启动基于本地UDP端口策略的ARP表刷新机制,使策略ARP表无效。
6.一种如权利要求1所述的快速处理实时媒体流数据包的方法,其包括以下步骤a)所述基于本地UDP端口策略ARP表处理模块根据设备RTP/RTCP协议端口资源的分配情况以及RTP/RTCP协议端口的特征,构造一个以端口映射值为下标的ARP表;b)上层应用调用所述UDP快速发送模块发送RTP/RTCP数据包,根据所述RTP/RTCP数据包的目的IP地址,使用传统TCP/IP协议栈的相关接口函数获取下一跳的MAC地址;c)如果成功获取下一跳的MAC地址则刷新ARP表项中的下一跳的MAC地址并直接发送该RTP/RTCP数据包,此后如果在该UDP端口上所发送的目的IP地址不变且端口ARP表未到老化时间,则均直接使用ARP表项中的下一跳MAC地址填充以太网数据包的目的MAC地址,快速发送该RTP/PTCP数据包;d)如果不能获取下一跳的MAC地址,则需要通过TCP/IP UDPSOCKET API发送这个RTP/RTCP数据包,以便TCP/IP协议栈获得下一跳MAC地址并刷新协议栈ARP表,在该端口的下一个数据包发送时,就可成功获取下一跳的MAC地址并刷新基于本地UDP端口的策略ARP表项中的下一跳的MAC地址。
7.根据权利要求6所述的方法,其特征在于,所述方法包括RTP/RTCP数据包的快速发送方法,其包括以下处理步骤a1)根据所述RTP/RTCP应用层的情况,初始化全局以太网数据帧结构,并填充相关字段;a2)所述RTP/RTCP应用层在发送实时媒体流数据包时,准备协议层数据指针、数据长度、源IP地址、目的IP地址、源UDP端口号、目的UDP端口号等参数,调用所述UDP快速发送模块提供的RTP/RTCP发送函数a3)所述UDP快速发送模块根据源UDP端口号、目的IP地址从ARP表中获取下一跳MAC地址;如果获取不成功,则通过TCP/IP协议栈模块发送这个RTP/RTCP数据包;a4)如果获取成功,使用已初始化的以太网数据帧结构,并填充相应的字段,以及根据需要计算并填充IP、UDP的校验字段;a5)调用网口发送函数发送数据包。
8.根据权利要求6所述的方法,其特征在于,所述方法的RTP/RTCP数据包的快速接收方法,其包括以下处理步骤b1)根据所述系统的本地UDP端口资源的分配情况维护一个协议层回调函数注册表,注册一RTP/RTCP快速接收处理函数来接收处理目的端口号对应的UDP数据包,所述RTP/RTCP快速接收处理函数完成把RTP/RTCP数据包写到RTP/RTCP应用层的缓冲区中b2)在网口接收函数中注册一以太网数据包快速接收处理钩子函数,该钩子函数的实体为所述IP数据包快速过滤模块,用以分析所述以太网数据包是否为本网口的UDP/IP数据包并进行过滤处理;b3)根据所述UDP数据包的目的端口号和RTP/RTCP应用层回调函数注册表,调用UDP目的端口号对应的RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收处理函数,由该回调函数完成该UDP数据包的处理b4)如果所述IP数据包快速过滤模块已经成功通过RTP/RTCP应用层注册的回调函数RTP/RTCP快速接收函数处理,则返回一个已经被处理的标记;b5)网口接收函数根据以太网数据包快速接收处理钩子函数返回的是否已经处理标记,判断是否要继续传给所述TCP/IP协议栈模块处理。
9.根据权利要求8所述的方法,其特征在于,所述步骤b4)后如果没有被处理,则分析是否是免费ARP包;在网口接收函数上收到免费ARP包时,使ARP表项中的MAC地址失效,以便随后发RTP/RTCP数据包时主动从所述TCP/IP协议栈重新获取下一跳MAC并刷新ARP表。
10.根据权利要求6~9任一权项所述的方法,其特征在于,在所述步骤d)定义一刷新时间间隔,以定时刷新所述基于本地UDP端口的策略ARP表。
全文摘要
本发明的一种快速处理实时媒体流数据包的方法及其系统,为媒体网关、综合接入设备IAD、多媒体终端等网络节点揭示了一种基于用户数据报协议UDP的实时传输协议/实时传输控制协议RTP/RTCP传输实时媒体流数据包的快速处理方法及其系统。该系统改进点在于增加了IP数据包快速过滤模块、UDP快速发送模块和基于本地UDP端口策略ARP表处理模块。这种方法包括快速接收处理基于RTP/RTCP协议传输的实时媒体流数据包;快速发送基于RTP/RTCP协议传输的实时媒体流数据包;基于UDP端口策略ARP表及其刷新机制。相对于传统的TCP/IP协议栈及SOCKET编程的侦听接收与发送,使用本发明可快速处理实时媒体流数据包,提高设备的处理能力,减少媒体流数据包的网络时延,从而提高网络服务质量。
文档编号H04L29/06GK1558623SQ20041001514
公开日2004年12月29日 申请日期2004年1月15日 优先权日2004年1月15日
发明者湖 黄, 黄湖, 何延伟, 朱蓉俊 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1