一种数据处理方法、装置、电子设备、服务器及存储设备转让专利

申请号 : CN202110288512.2

文献号 : CN112671810B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 阎博孙亮王东升周木子王晟

申请人 : 紫光恒越技术有限公司

摘要 :

本申请实施例提供了一种数据处理方法、装置、电子设备、服务器及存储设备。该数据处理方法,包括:采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;将所述多个报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;采用所述工作线程对接收到的多个报文结构体进行处理。

权利要求 :

1.一种数据处理方法,其特征在于,包括:采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;

将多个所述报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;基于报文结构体中的源IP地址和目的IP地址来判断RTSP报文以及RTP报文是否属于同一RTSP媒体流;

采用所述工作线程对接收到的多个报文结构体进行处理;

所述采用所述工作线程对接收到的多个报文结构体进行处理,包括:采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息;

采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理。

2.根据权利要求1所述的数据处理方法,其特征在于,所述将所述多个报文结构体分发至多个工作线程,包括:

以报文结构体中的MBUF中的源IP地址和目的IP地址作为键计算第一哈希值,并将第一哈希值存储到所述MBUF的哈希字段,得到新哈希字段;

根据所述MBUF中的新哈希字段将所述多个报文结构体分发到不同的工作线程中,其中,新哈希字段相同的报文结构体分发至同一工作线程。

3.根据权利要求1所述的数据处理方法,其特征在于,所述采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息,包括:

采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息;

根据所述RTSP报文结构体的四元组信息在当前的工作线程的RTSP哈希树上的对应的第一目标哈希节点;

若查找到所述第一目标哈希节点,则将所述RTSP报文结构体中的RTSP报文信息存储到所述第一目标哈希节点;

若未查找到所述第一目标哈希节点,则根据所述RTSP报文结构体的四元组信息在所述RTSP哈希树上建立对应的第一目标哈希节点,并将所述RTSP报文结构体中的RTSP报文信息存储到所述第一目标哈希节点;

判断是否获取到所述RTSP媒体流的所有RTSP报文信息;

若是,则保存当前的工作线程所需的所有RTSP报文信息。

4.根据权利要求3所述的数据处理方法,其特征在于,所述采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息,还包括:

若否,则返回执行所述采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理的步骤,其中每次处理的RTSP报文结构体为不同的RTSP报文结构体。

5.根据权利要求3所述的数据处理方法,其特征在于,所述采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理,包括:采用所述工作线程的第二子线程对接收到的一RTP报文结构体进行解析,得到所述RTP报文结构体的四元组信息;

根据所述RTP报文结构体的四元组信息在当前的工作线程的RTSP哈希树查找属于同一RTSP媒体流的RTSP节点,并获取该RTSP节点对应的RTSP报文信息;

根据所述RTSP报文信息以及双向链表生成第二键值对,并将所述第二键值对存储到当前工作线程的RTP哈希树,其中,所述双向链表用于存储所述RTP报文结构体;

若所述双向链表中挂载的RTP报文结构体的数量超过预设阈值,则从所述RTP报文结构体中提取出RTP报文,并根据对应的所述RTSP报文信息对所述RTP报文的有效负荷字段进行处理,直至处理完该工作线程获取的所有RTP报文结构体。

6.根据权利要求3所述的数据处理方法,其特征在于,所述采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息,包括:采用工作线程的第一子线程提取一个RTSP报文结构体的SDP信息和通告的RTP的信息;

根据所述DP信息和通告的RTP的信息得到所述RTSP报文结构体的四元组信息。

7.一种数据处理装置,其特征在于,包括:捕获模块,用于采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;

分发模块,用于将多个所述报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;基于报文结构体中的源IP地址和目的IP地址来判断RTSP报文以及RTP报文是否属于同一RTSP媒体流;

处理模块,用于采用所述工作线程对接收到的多个报文结构体进行处理;

所述处理模块具体用于:

采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息;

采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理。

8.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1‑6任一项所述的方法。

9.一种存储设备,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时运行如权利要求1‑6任一项所述的方法。

10.一种服务器,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1‑6任一项所述的方法。

说明书 :

一种数据处理方法、装置、电子设备、服务器及存储设备

技术领域

[0001] 本申请涉及计算机网络技术领域,具体而言,涉及一种数据处理方法、装置、电子设备、服务器及存储设备。

背景技术

[0002] DPDK是基于Linux系统,为数据面快速报文处理应用程序提供一个完整框架的开源开发平台。DPDK采用轮询、零拷贝、大页内存和CPU亲和等机制,大大提高了运作效率。通
过DPDK提供的网卡驱动和函数API,可以高速率处理数据包,极大的提升应用程序的工作效
率。
[0003] RTSP是用于在IP网络上传输媒体流的常用应用层协议之一。RTSP基于TCP,在媒体流中主要有两方面作用:一方面是在服务端和客户端建立连接,如客户端向服务端发起请
求(Request 报文),服务端响应和回复请求(Response 报文);另一方面是对媒体流进行控
制,如暂停播放和快进播放等控制。
[0004] 基于LibPcap数据捕获机制需额外引入频繁的中断处理以及数据拷贝,资源开销也十分庞大。而将RTSP报文和RTP报文统一处理,影响了在多线程下的处理效率,不适应于
在高带宽和高吞吐量的场景。
[0005] 针对上述问题,目前尚未有有效的技术解决方案。

发明内容

[0006] 本申请实施例的目的在于提供一种数据处理方法、装置、电子设备、服务器及存储设备,可以提高效率。
[0007] 第一方面,本申请实施例提供了一种数据处理方法,包括:
[0008] 采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以及捕获RTP报文
的RTP报文结构体;
[0009] 将所述多个报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;
[0010] 采用所述工作线程对接收到的多个报文结构体进行处理。
[0011] 可选地,在本申请实施例所述的数据处理方法中,所述将所述多个报文结构体分发至多个工作线程,包括:
[0012] 以报文结构体中的MBUF中的源IP地址和目的IP地址作为键计算第一哈希值,并将第一哈希值存储到所述MBUF的哈希字段,得到新哈希字段;
[0013] 根据所述MBUF中的新哈希字段将所述多个报文结构体分发到不同的工作线程中,其中,新哈希字段相同的报文结构体分发至同一工作线程。
[0014] 可选地,在本申请实施例所述的数据处理方法中,所述采用所述工作线程对接收到的多个报文结构体进行处理,包括:
[0015] 采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息;
[0016] 采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理。
[0017] 可选地,在本申请实施例所述的数据处理方法中,所述采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息,
包括:
[0018] 采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息;
[0019] 根据所述RTSP报文结构体的四元组信息在当前的工作线程的RTSP哈希树上的对应的第一目标哈希节点;
[0020] 若查找到所述第一目标哈希节点,则将所述RTSP报文结构体中的RTSP报文信息存储到所述第一目标哈希节点;
[0021] 若未查找到所述第一目标哈希节点,则根据所述RTSP报文结构体的四元组信息在所述RTSP哈希树上建立对应的第一目标哈希节点,并将所述RTSP报文结构体中的RTSP报文
信息存储到所述第一目标哈希节点;
[0022] 判断是否获取到所述RTSP媒体流的所有RTSP报文信息;
[0023] 若是,则保存当前的工作线程所需的所有RTSP报文信息。
[0024] 可选地,在本申请实施例所述的数据处理方法中,所述采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息,
还包括:
[0025] 若否,则返回执行所述采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理的步骤,其中每次处理的RTSP报文结构体为不同的RTSP报文结构体。
[0026] 可选地,在本申请实施例所述的数据处理方法中,所述采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理,包括:
[0027] 采用所述工作线程的第二子线程对接收到的一RTP报文结构体进行解析,得到所述RTP报文结构体的四元组信息;
[0028] 根据所述RTP报文结构体的四元组信息在当前的工作线程的RTSP哈希树查找属于同一RTSP媒体流的RTSP节点,并获取该RTSP节点对应的RTSP报文信息;
[0029] 根据所述RTSP报文信息以及双向链表生成第二键值对,并将所述第二键值对存储到当前工作线程的RTP哈希树,其中,所述双向链表用于存储所述RTP报文结构体;
[0030] 若所述双向链表中挂载的RTP报文结构体的数量超过预设阈值,则从所述RTP报文结构体中提取出RTP报文,并根据对应的所述RTSP报文信息对所述RTP报文的有效负荷字段
进行处理,直至处理完该工作线程获取的所有RTP报文结构体。
[0031] 可选地,在本申请实施例所述的数据处理方法中,所述采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息,包
括:
[0032] 采用工作线程的第一子线程提取一个RTSP报文结构体的SDP信息和通告的RTP的信息;
[0033] 根据所述DP信息和通告的RTP的信息得到所述RTSP报文结构体的四元组信息。
[0034] 第二方面,本申请实施例还提供了一种数据处理装置,包括:
[0035] 捕获模块,用于采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以
及捕获RTP报文的RTP报文结构体;
[0036] 分发模块,用于将所述多个报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;
[0037] 处理模块,用于采用所述工作线程对接收到的多个报文结构体进行处理。
[0038] 第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第
一方面提供的所述方法中的步骤。
[0039] 第四方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第
一方面提供的所述方法中的步骤。
[0040] 第五方面,本申请实施例提供一种存储设备,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。
[0041] 由上可知,本申请实施例提供的数据处理方法及装置通过采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括
捕获RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;将多个报文结构
体分发至多个工作线程,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分
发到同一所述工作线程中;采用所述工作线程对接收到的多个报文结构体进行处理;从而
实现对RTSP媒体流的快速处理,由于采用将于同一所述RTSP媒体流的RTSP报文结构体和
RTP报文结构体分发到同一所述工作线程中,从而可以提高处理效率。
[0042] 本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说
明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

[0043] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看
作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他相关的附图。
[0044] 图1为本申请实施例提供的一种数据处理方法的一种流程图。
[0045] 图2为本申请实施例提供的一种数据处理装置的第一种结构示意图。
[0046] 图3为本申请实施例提供的电子设备的结构示意图。

具体实施方式

[0047] 下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在
此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因
此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的
范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做
出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0048] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的
描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0049] 请参照图1,图1是本本申请一些实施例中的一种数据处理方法的流程图。其中,该数据处理方法包括以下步骤:
[0050] S101、采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文结构体以及捕获RTP
报文的RTP报文结构体。
[0051] S102、将多个报文结构体分发至多个工作线程,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中。
[0052] S103、采用所述工作线程对接收到的多个报文结构体进行处理。
[0053] 其中,在该步骤S101中,MBUF为存储器缓存结构体,其用于捕获RTSP媒体流中的RTSP报文以及RTP报文从而形成报文结构体。其中,该报文结构体有RTSP报文结构体以及
RTP报文结构体两种。该RTSP报文结构体为MBUF捕获RTSP报文封装形成,该RTP报文结构体
为MBUF捕获RTP报文封装形成。其中,该RTSP媒体流可以为音频流,可以为视频流,也可以为
音视频流。在本实施例中,该RTSP媒体流为音频流与视频流的结合。
[0054] 其中,在捕获RTSP报文以及RTP报文时,利用DPDK的端口RSS哈希值配置规则,将与RTSP报文以及RTP报文中的对应Mbuf中的哈希字段设置为非零,其他类型报文的对应Mbuf
的哈希字段设置为零,从而使得MBUF在捕获报文后,可以释放掉哈希字段为零的MBUF,仅仅
保留哈希字段不为零的MBUF,从而将捕获的RTSP报文以及RTP报文之外的报文去除。
[0055] 其中,采用MBUF捕获RTSP报文或RTP报文得到的报文结构体均存储在缓冲队列中,例如该缓冲队列可以为环形队列,例如Ring队列。其中,各个RTSP媒体流中的RTSP报文或
RTP报文封装得到报文结构体均存储至该一个Ring队列中。采用该种环形队列可以实现将
该环形队列中的报文结构体在不同的工作线程之间传递。
[0056] 其中,在该步骤S102中,用于分发该多个报文结构体的分发单元从该缓冲队列中获取需要进行分发的多个报文结构体进行分发。在分发报文结构体时,可以基于报文结构
体中的IP地址和目的IP地址来判断RTSP报文以及RTP报文是否属于同一RTSP媒体流,从而
使得避免属于同一RTSP媒体的报文分发到不同的工作线程中,可以提高处理效率。
[0057] 其中,在该步骤S103中,每一工作线程依次对接收到的报文结构体进行处理。处理时,先对RTSP报文结构体进行处理,然后再结合对RTSP报文结构体的处理结果来对RTP报文
结构体进行处理,例如进行检测、播放或者写入等操作。
[0058] 具体地,在一些实施例中,该步骤S102可以包括以下子步骤:S1021、以所述报文结构体中的MBUF中的源IP地址和目的IP地址作为键计算第一哈希值,并将所述第一哈希值存
储到所述MBUF的哈希字段得到新哈希字段;S1022、根据所述MBUF中的新哈希字段将所述多
个报文结构体分发到不同的工作线程中,新哈希字段相同的报文结构体分发至同一工作线
程。
[0059] 其中,在该步骤S1021中,该源IP地址为发出该RTSP媒体流的服务器的网络地址,该目的IP地址为接收该RTSP媒体流的终端设备的网络地址。其中,在该步骤S1022中,由于
在同一RTSP媒体流中的所有MBUF的哈希值是相同的,因此,采用哈希值相同的报文结构体
发送到同一个工作线程可以避免将属于同RTSP媒体流的RTSP报文和RTP报文分发到了不同
的工作线程中,导致处理效率下降。
[0060] 在一些实施例中,该步骤S103可以包括以下子步骤:a、采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息;
b、采用工作线程的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理。
[0061] 其中,在该步骤a中,该RTSP报文信息为音频和/或视频流的编码格式信息。其中,如果该RTSP多媒体流为音频和视频的结合,则该RTSP报文信息为音频和视频流的编码格式
信息。其中,在该步骤b中,对RTP报文结构体进行处理可以为检测、播放或者写入等操作。
[0062] 具体地,在一些实施例中,该步骤a包括以下子步骤:
[0063] S1031、采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息;
[0064] S1032、根据所述RTSP报文结构体的四元组信息在当前的工作线程的RTSP哈希树上的对应的第一目标哈希节点;
[0065] S1033、若查找到所述第一目标哈希节点,则将所述RTSP报文结构体中的RTSP报文信息存储到所述第一目标哈希节点;
[0066] S1034、若未查找到所述第一目标哈希节点,则根据所述RTSP报文结构体的四元组信息在所述RTSP哈希树上建立对应的第一目标哈希节点,并将所述RTSP报文结构体中的
RTSP报文信息存储到所述第一目标哈希节点;
[0067] S1035、判断是否获取到所述RTSP媒体流的所有RTSP报文信息;
[0068] S1036、若否,则返回执行所述步骤S1031。
[0069] S1037、若是,则保存当前的工作线程所需的所有RTSP报文信息。
[0070] 其中,在该步骤S1031中,由于RTSP报文的传输层为TCP,因此,可以基于此识别出TCP报文。TCP报文中包括RTSP报文以及其他类型的报文。由于,RTSP报文的服务端端口号通
常是554或8554,因此客户端接收来自服务端RTSP报文的源端口号是554或8554。需要保留
TCP报文中源端口号为554或8554的buf,释放掉其他的TCP报文对应的Mbuf。
[0071] 其中,在该步骤S1032中,对于RTSP报文结构体,主要获取RTSP报文中加载的SDP信息(如音视频的编码格式信息)和通告的RTP的信息(如RTP的源端口号、目的端口号、SSRC
等)。从而基于该SDP信息和通告的RTP的信息可以得到该RTSP报文结构体的四元组信息,也
即是源IP地址、目的IP地址、源端口号和目的端口号。
[0072] 具体地,在一些实施例中,该步骤b包括以下子步骤:
[0073] S1041、采用所述工作线程的第二子线程对接收到的RTP报文结构体进行解析,得到所述RTP报文结构体的四元组信息;
[0074] S1042、根据所述RTP报文结构体的四元组信息在当前的工作线程的RTSP哈希树查找属于同一RTSP媒体流的RTSP节点,并获取该RTSP节点对应的RTSP报文信息;
[0075] S1043、根据所述RTSP报文信息以及双向链表生成第二键值对,并将所述第二键值对存储到当前工作线程的RTP哈希树,其中,所述双向链表用于存储所述RTP报文结构体。其
中,所述RTP报文结构体的四元组信息的哈希值为第二键值对的键,所述双向链表作为第二
键值对的值;
[0076] S1044、对于所述工作线程接收到的其他RTP报文结构体,先根据所述RTP报文结构体的四元组信息计算对应的哈希值;根据所述哈希值在所述RTP哈希树中查找对应的RTP节
点;若查找到,则将对应RTP报文结构体挂载在所述双向链表中,若未查找到,则返回执行所
述步骤S1042。
[0077] S1045、若所述双向链表中挂载的RTP报文结构体的数量超过预设阈值,则从所述RTP报文结构体中提取出RTP报文,并根据对应的所述RTSP报文信息对所述RTP报文的有效
负荷字段进行处理,直至处理完该工作线程获取的所有RTP报文结构体。
[0078] 其中,在该步骤S1041中,常用RTP报文的传输层为UDP,因此可以基于此识别出UDP报文,该UDP报文中有RTP报文和其他报文。根据UDP报文的Payload(净负荷字段)起始的几
个字节,可以判断报文是否是RTP报文。释放非RTP报文对应的Mbuf,保留RTP报文结构体。
[0079] 其中,在该步骤S1042中,从RTP报文结构体的Mbuf中解析出源端口号、目的端口号、Sequence Number(TCP序列号)和SSRC信息,从而得到该RTP报文结构体的四元组信息。
[0080] 其中,在该步骤S1045中,该预设阈值可以为根据该RTSP媒体流的数据量或者码率设置的经验值,当然其并不限于此。
[0081] 各模块相互协作,保证RTSP媒体流的高效处理,且在一定线程个数内,随着工作模块个数的增加,该流程处理能力逐步提升。并且采用哈希树结构,极大的提升了在多RTSP媒
体流下的查询等处理效率;采用双向链表结构,可以动态存储不固定个数的RTP报文。增大
整个系统的吞吐量和RTSP媒体流的处理上限,提升在高带宽模式下的处理能力。
[0082] 由上可知,本申请实施例提供的数据处理方法通过采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获
RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;将多个报文结构体分
发至多个工作线程,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到
同一所述工作线程中;采用所述工作线程对接收到的多个报文结构体进行处理;从而实现
对RTSP媒体流的快速处理,由于采用将于同一所述RTSP媒体流的RTSP报文结构体和RTP报
文结构体分发到同一所述工作线程中,从而可以提高处理效率。
[0083] 如图2所示,本申请实施例还提供了一种数据处理装置的结构示意图。该装数据处理装置包括:捕获模块201、分发模块202、处理模块203。
[0084] 其中,该捕获模块201用于采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获RTSP报文得到的RTSP报文
结构体以及捕获RTP报文的RTP报文结构体;MBUF为存储器缓存结构体,其用于捕获RTSP媒
体流中的RTSP报文以及RTP报文从而形成报文结构体。其中,该报文结构体有RTSP报文结构
体以及RTP报文结构体两种。该RTSP报文结构体为MBUF捕获RTSP报文封装形成,该RTP报文
结构体为MBUF捕获RTP报文封装形成。其中,该RTSP媒体流可以为音频流,可以为视频流,也
可以为音视频流。在本实施例中,该RTSP媒体流为音频流与视频流的结合。
[0085] 其中,该分发模块202用于将所述多个报文结构体分发至多个工作线程,其中,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到同一所述工作线程中;
用于分发该多个报文结构体的分发单元从该缓冲队列中获取需要进行分发的多个报文结
构体进行分发。在分发报文结构体时,可以基于报文结构体中的IP地址和目的IP地址来判
断RTSP报文以及RTP报文是否属于同一RTSP媒体流,从而使得避免属于同一RTSP媒体的报
文分发到不同的工作线程中,可以提高处理效率。
[0086] 其中,该处理模块203用于采用所述工作线程对接收到的多个报文结构体进行处理。每一工作线程依次对接收到的报文结构体进行处理。处理时,先对RTSP报文结构体进行
处理,然后再结合对RTSP报文结构体的处理结果来对RTP报文结构体进行处理,例如进行检
测、播放或者写入等操作。
[0087] 具体地,在一些实施例中,该分发模块202用于以所述报文结构体中的MBUF中的源IP地址和目的IP地址作为键计算第一哈希值,并将所述第一哈希值存储到所述MBUF的哈希
字段得到新哈希字段;根据所述MBUF中的新哈希字段将所述多个报文结构体分发到不同的
工作线程中,新哈希字段相同的报文结构体分发至同一工作线程。
[0088] 其中,该源IP地址为发出该RTSP媒体流的服务器的网络地址,该目的IP地址为接收该RTSP媒体流的终端设备的网络地址。由于在同一RTSP媒体流中的所有MBUF的哈希值是
相同的,因此,采用哈希值相同的报文结构体发送到同一个工作线程可以避免将属于同
RTSP媒体流的RTSP报文和RTP报文分发到了不同的工作线程中,导致处理效率下降。
[0089] 在一些实施例中,该处理模块203用于采用工作线程的第一子线程对接收到的RTSP报文结构体进行处理,得到当前的工作线程所需的所有RTSP报文信息;采用工作线程
的第二子线程根据所需的所有RTSP报文信息对RTP报文结构体进行处理。
[0090] 其中,该RTSP报文信息为音频和/或视频流的编码格式信息。其中,如果该RTSP多媒体流为音频和视频的结合,则该RTSP报文信息为音频和视频流的编码格式信息。对RTP报
文结构体进行处理可以为检测、播放或者写入等操作。
[0091] 具体地,在一些实施例中,该处理模块203用于:
[0092] 采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理,得到所述RTSP报文结构体的四元组信息;
[0093] 根据所述RTSP报文结构体的四元组信息在当前的工作线程的RTSP哈希树上的对应的第一目标哈希节点;
[0094] 若查找到所述第一目标哈希节点,则将所述RTSP报文结构体中的RTSP报文信息存储到所述第一目标哈希节点;
[0095] 若未查找到所述第一目标哈希节点,则根据所述RTSP报文结构体的四元组信息在所述RTSP哈希树上建立对应的第一目标哈希节点,并将所述RTSP报文结构体中的RTSP报文
信息存储到所述第一目标哈希节点;
[0096] 判断是否获取到所述RTSP媒体流的所有RTSP报文信息;
[0097] 若否,则返回执行执行采用工作线程的第一子线程对接收到的一个RTSP报文结构体进行处理。
[0098] 若是,则保存当前的工作线程所需的所有RTSP报文信息。
[0099] 其中,由于RTSP报文的传输层为TCP,因此,可以基于此识别出TCP报文。TCP报文中包括RTSP报文以及其他类型的报文。由于,RTSP报文的服务端端口号通常是554或8554,因
此客户端接收来自服务端RTSP报文的源端口号是554或8554。需要保留TCP报文中源端口号
为554或8554的buf,释放掉其他的TCP报文对应的Mbuf。
[0100] 其中,对于RTSP报文结构体,主要获取RTSP报文中加载的SDP信息(如音视频的编码格式信息)和通告的RTP的信息(如RTP的源端口号、目的端口号、SSRC等)。从而基于该SDP
信息和通告的RTP的信息可以得到该RTSP报文结构体的四元组信息,也即是源IP地址、目的
IP地址、源端口号和目的端口号。
[0101] 具体地,在一些实施例中,该处理模块203用于:
[0102] 采用所述工作线程的第二子线程对接收到的RTP报文结构体进行解析,得到所述RTP报文结构体的四元组信息;
[0103] 根据所述RTP报文结构体的四元组信息在当前的工作线程的RTSP哈希树查找属于同一RTSP媒体流的RTSP节点,并获取该RTSP节点对应的RTSP报文信息;
[0104] 根据所述RTSP报文信息以及双向链表生成第二键值对,并将所述第二键值对存储到当前工作线程的RTP哈希树,其中,所述双向链表用于存储所述RTP报文结构体。其中,所
述RTP报文结构体的四元组信息的哈希值为第二键值对的键,所述双向链表作为第二键值
对的值;
[0105] 对于所述工作线程接收到的其他RTP报文结构体,先根据所述RTP报文结构体的四元组信息计算对应的哈希值;根据所述哈希值在所述RTP哈希树中查找对应的RTP节点;若
查找到,则将对应RTP报文结构体挂载在所述双向链表中,若未查找到,则返回执行根据所
述RTP报文结构体的四元组信息在当前的工作线程的RTSP哈希树查找属于同一RTSP媒体流
的RTSP节点.
[0106] 若所述双向链表中挂载的RTP报文结构体的数量超过预设阈值,则从所述RTP报文结构体中提取出RTP报文,并根据对应的所述RTSP报文信息对所述RTP报文的有效负荷字段
进行处理,直至处理完该工作线程获取的所有RTP报文结构体。
[0107] 其中,常用RTP报文的传输层为UDP,因此可以基于此识别出UDP报文,该UDP报文中有RTP报文和其他报文。根据UDP报文的Payload(净负荷字段)起始的几个字节,可以判断报
文是否是RTP报文。释放非RTP报文对应的Mbuf,保留RTP报文结构体。
[0108] 其中,从RTP报文结构体的Mbuf中解析出源端口号、目的端口号、Sequence Number和SSRC信息,从而得到该RTP报文结构体的四元组信息。
[0109] 其中,该预设阈值可以为根据该RTSP媒体流的数据量或者码率设置的经验值,当然其并不限于此。
[0110] 由上可知,本申请实施例提供的数据处理装置通过采用多个MBUF从至少两个RTSP媒体流中捕获RTSP报文以及RTP报文,得到对应的报文结构体;所述报文结构体包括捕获
RTSP报文得到的RTSP报文结构体以及捕获RTP报文的RTP报文结构体;将多个报文结构体分
发至多个工作线程,属于同一所述RTSP媒体流的RTSP报文结构体和RTP报文结构体分发到
同一所述工作线程中;采用所述工作线程对接收到的多个报文结构体进行处理;从而实现
对RTSP媒体流的快速处理,由于采用将于同一所述RTSP媒体流的RTSP报文结构体和RTP报
文结构体分发到同一所述工作线程中,从而可以提高处理效率。
[0111] 请参照图3,图3为本申请实施例提供的一种电子设备的结构示意图,本申请提供一种电子设备3,包括:处理器301和存储器302,处理器301和存储器302通过通信总线303
和/或其他形式的连接机构(未标出)互连并相互通讯,存储器302存储有处理器301可执行
的计算机程序,当计算设备运行时,处理器301执行该计算机程序,以执行时执行上述实施
例的任一可选的实现方式中的方法。其中,该电子设备3可以为服务器。
[0112] 本申请实施例提供一种存储设备,所述计算机程序被处理器执行时,执行上述实施例的任一可选的实现方式中的方法。其中,存储介质可以由任何类型的易失性或非易失
性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access 
Memory, 简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable 
Read‑Only Memory, 简称EEPROM),可擦除可编程只读存储器(Erasable Programmable 
Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red‑Only Memory, 
简称PROM),只读存储器(Read‑Only Memory, 简称ROM),磁存储器,快闪存储器,磁盘或光
盘。
[0113] 在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻
辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可
以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间
的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连
接,可以是电性,机械或其它的形式。
[0114] 另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多
个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的
目的。
[0115] 再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0116] 在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际
的关系或者顺序。
[0117] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的
任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。