[0004] 针对以上所述的技术问题,本发明提供了一种基于内核进行RTP数据收发的网关设备,以减少内核和应用层之间的频繁切换,提高系统的运行效率。
[0005] 具体的技术方案如下所示:
[0006] 基于内核进行RTP数据收发的网关设备,其中,
[0007] 所述网关设备包括一驱动模块,所述驱动模块包括RTP接收子模块以及RTP读取子模块;所述驱动模块与RTP应用程序的接口包括创建接口、修改接口以及关闭接口;
[0008] 所述RTP接收子模块分别与所述内核的socket和所述RTP读取子模块连接,所述RTP读取子模块与一DSP模块连接;
[0009] 所述驱动模块通过所述RTP接收子模块从所述内核的socket中接收网络RTP包,并将所述RTP包送入系统缓存队列;所述驱动模块通过所述RTP读取子模块从所述系统缓存队列中读取所述RTP包,并将所述RTP包发送到所述DSP模块。
[0010] 上述的基于内核进行RTP数据收发的网关设备,其中,
[0011] 所述驱动模块还包括RTP发送子模块,所述RTP发送子模块与所述DSP模块连接;
[0012] 所述驱动模块通过所述RTP发送子模块从所述DSP模块接收RTP净荷,并封装成IP包格式,并通过所述网关设备的物理接口向外发送。
[0013] 上述的基于内核进行RTP数据收发的网关设备,其中,所述RTP接收子模块和所述RTP读取子模块通过数据队列同步锁同步操作。
[0014] 上述的基于内核进行RTP数据收发的网关设备,其中,
[0015] 所述创建接口用于接收所述RTP应用程序创建一个RTP流的指令,并设置所述RTP流参数;所述修改接口用于修改所述RTP流参数;所述关闭接口用于接收所述RTP应用程序关闭所述RTP流的指令,并释放系统资源。
[0016] 上述的基于内核进行RTP数据收发的网关设备,其中,
[0017] 所述参数包括DSP通道号、本地端口、本地IP、远端端口、远端IP以及媒体方向。
[0018] 上述的基于内核进行RTP数据收发的网关设备,其中,所述驱动模块对所述RTP数据的收发同样适用于对RTCP数据的收发。
[0019] 基于内核进行RTP数据收发的方法,其中,通过上述的网关设备进行RTP数据收发,所述方法具体包括如下步骤:
[0020] 步骤S1. 在用户层通过所述RTP应用程序的创建接口,创建一RTP流,并在系统内核中创建与所述RTP流对应的RTP接收内核线程、RTP读取内核线程以及RTP发送内核线程;
[0021] 步骤S2. 所述RTP接收内核线程从内核socket中接收RTP包,并将其送入系统缓存队列;
[0022] 步骤S3. 所述RTP读取内核线程从所述系统缓存队列中读取所述RTP包,并利用DSP模块的接口,发送到所述DSP模块的消息队列中。
[0023] 上述的基于内核进行RTP数据收发的方法,其中,所述方法还包括:
[0024] 步骤S4. 所述RTP发送内核线程从所述DSP模块接收所述RTP净荷,并封装成IP包形式,从所述网关设备的物理接口发送出去。
[0025] 上述的基于内核进行RTP数据收发的方法,其中,所述步骤S2中还包括:
[0026] 步骤S2.1 所述RTP接收内核线程从内核socket中接收RTP包后,得到一数据队列同步锁;
[0027] 步骤S2.2 所述RTP接收内核线程将所述RTP包加入到缓存队列,并释放可用数据包信号量,同时释放所述数据队列同步锁;
[0028] 所述步骤S3中还包括:
[0029] 步骤S3.1 所述RTP读取内核线程不断尝试获得数据包信号量,当所述RTP读取内核线程不能获得所述数据包信号量,所述RTP读取内核线程睡眠,并被系统内核的定时器定时唤醒;
[0030] 步骤S3.2 当所述RTP读取内核线程获得所述数据包信号量,所述RTP读取内核就去拿所述数据队列同步锁,并在从所述缓存队列中获得RTP包后,释放所述数据队列同步锁。
[0031] 上述的基于内核进行RTP数据收发的方法,同样适用于对RTCP数据的收发。
[0032] 本技术方案的有益效果是:通过直接在内核层处理RTP的收发,而不需要频繁的通过系统调用来处理RTP包,减少了在应用层和内核之间的切换,大大减小RTP的转发时延,增强了语音模块的健壮性。