一种数据包管理方法及装置转让专利

申请号 : CN202011132916.4

文献号 : CN111970215B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张凯

申请人 : 武汉中科通达高新技术股份有限公司

摘要 :

本申请提供一种数据包管理方法及装置,该数据包管理方法通过在接收到RTP数据包后,获取RTP数据包的数据信息,并根据数据包的数据信息将RTP数据包缓存到缓存队列中,并对RTP数据包进行排序,使得在接收到RTP数据包后,可以根据RTP数据包的数据信息进行排序,从而使得在需要对RTP数据进行重组时,可以根据RTP数据包的顺序对RTP数据包进行重组,且在得到RTP数据包后,为了保证每一帧画面的完整性,会判断头部位置的RTP数据包是否为视频帧的开始包,并在查找到视频帧的开始包后,查找视频帧的结尾包,同时,获取到视频帧的开始包和视频帧的结尾包之间的RTP数据包,然后对RTP数据进行重组得到视频流,从而避免出现过期包时,影响RTP数据的重组。

权利要求 :

1.一种数据包管理方法,其特征在于,应用于交警系统,所述交警系统包括转码服务器和媒体服务器,所述数据包管理方法包括:所述转码服务器接收所述媒体服务器基于UDP协议发送的处理实时监控视频流得到的RTP数据包;所述RTP数据包为多个视频帧的组成部分;

对所述RTP数据包进行解析得到所述RTP数据包的数据信息;所述RTP数据包的数据信息包括RTP数据包的序列号、RTP数据包的时间戳、RTP数据包的数据量大小、RTP数据包的数据标识;

根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对多个视频帧的所述RTP数据包进行排序;包括:获取所述缓存队列中头部位置的RTP数据包的序列号,以及待插入的RTP数据包的序列号;根据所述缓存队列中头部位置的RTP数据包的序列号,以及所述待插入的RTP数据包的序列号,判断所述待插入的RTP数据包的序列号是否小于所述头部位置的RTP数据包的序列号;在所述待插入的RTP数据包的序列号小于所述头部位置的RTP数据包的序列号时,确定所述待插入的RTP数据包为过期包,并删除所述待插入的RTP数据包;在所述待插入的RTP数据包的序列号大于所述头部位置的RTP数据包的序列号时,比对所述待插入的RTP数据包与非头部位置的RTP数据包的序列号的大小,并根据比对结果,将所述待插入的RTP数据包插入所述缓存队列;

根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;

根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;

在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,包括:获取开始包的数据标识,根据所述开始包的数据标识,判断非头部位置的RTP数据包的数据标识与所述开始包的数据标识是否相同,在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识相同时,确定所述非头部位置的RTP数据包为视频帧的开始包;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识不相同时,删除所述非头部位置的RTP数据包;并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;

获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;在获取到所述视频帧的开始包、视频帧的结尾包和所述视频帧的开始包和所述视频帧的结尾包之间的RTP数据包时,查找下一视频帧的开始包、结尾包和位于开始包和结尾包之间的RTP数据包;

根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。

2.如权利要求1所述的数据包管理方法,其特征在于,所述根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序的步骤,包括:根据所述RTP数据包的数据信息,判断缓存区内的RTP数据包的数据量是否大于预设数据量;

在所述缓存区中的RTP数据包的数据量大于预设数据量时,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;

在所述缓存区中的RTP数据包的数据量小于或者等于预设数据量时,继续接收RTP数据包。

3.如权利要求1所述的数据包管理方法,其特征在于,根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包的步骤,包括:获取视频帧对应的开始包的数据标识;

获取所述头部位置的RTP数据包的数据标识;

根据所述开始包的数据标识、所述头部位置的RTP数据包的数据标识,判断所述开始包的数据标识与所述头部位置的RTP数据包的数据标识是否相同;

在所述开始包的数据标识与所述头部位置的数据包的数据标识相同时,确定所述头部位置的RTP数据包为视频帧的开始包。

4.如权利要求1所述的数据包管理方法,其特征在于,所述在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包的步骤包括:获取所述视频帧的开始包对应的视频帧的结尾包的数据标识;

根据所述视频帧的结尾包的数据标识,判断位于所述视频帧的开始包后的RTP数据包的数据标识与所述视频帧的结尾包的数据标识是否相同;

在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识相同时,确定所述RTP数据包为所述视频帧的结尾包;

在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识不相同时,继续查找所述视频帧的结尾包。

5.如权利要求4所述的数据包管理方法,其特征在于,所述在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识不相同时,继续查找所述视频帧的结尾包的步骤,包括:获取所述RTP数据包的序列号;

根据所述RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续;

在所述RTP数据包的序列号与上一RTP数据包的序列号连续时,继续查找所述视频帧的结尾包;

在所述RTP数据包的序列号与上一RTP数据包的序列号不连续时,查找下一视频帧的开始包。

6.如权利要求5所述的数据包管理方法,其特征在于,所述根据所述RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续的步骤,包括:获取预设排列表;

根据所述预设排列表、所述RTP数据包的序列号、上一RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续。

7.如权利要求1所述的数据包管理方法,其特征在于,所述查找下一视频帧的开始包、结尾包和位于开始包和结尾包之间的RTP数据包的步骤,包括:将上一视频帧的结尾包作为下一视频帧的开始包。

8.一种数据包管理装置,其特征在于,应用于交警系统,所述交警系统包括转码服务器和媒体服务器,所述数据包管理装置包括:接收模块,用于接收所述媒体服务器基于UDP协议发送的处理实时监控视频流得到的RTP数据包;所述RTP数据包为多个视频帧的组成部分;

解析模块,用于对所述RTP数据包进行解析得到所述RTP数据包的数据信息;所述RTP数据包的数据信息包括RTP数据包的序列号、RTP数据包的时间戳、RTP数据包的数据量大小、RTP数据包的数据标识;

排序模块,用于根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对多个视频帧的所述RTP数据包进行排序;包括:获取所述缓存队列中头部位置的RTP数据包的序列号,以及待插入的RTP数据包的序列号;根据所述缓存队列中头部位置的RTP数据包的序列号,以及所述待插入的RTP数据包的序列号,判断所述待插入的RTP数据包的序列号是否小于所述头部位置的RTP数据包的序列号;在所述待插入的RTP数据包的序列号小于所述头部位置的RTP数据包的序列号时,确定所述待插入的RTP数据包为过期包,并删除所述待插入的RTP数据包;在所述待插入的RTP数据包的序列号大于所述头部位置的RTP数据包的序列号时,比对所述待插入的RTP数据包与非头部位置的RTP数据包的序列号的大小,并根据比对结果,将所述待插入的RTP数据包插入所述缓存队列;

获取模块,用于根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;

判断模块,用于根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;

查找模块,用于在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,包括:获取开始包的数据标识,根据所述开始包的数据标识,判断非头部位置的RTP数据包的数据标识与所述开始包的数据标识是否相同,在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识相同时,确定所述非头部位置的RTP数据包为视频帧的开始包;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识不相同时,删除所述非头部位置的RTP数据包;并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;

重组模块,用于获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;在获取到所述视频帧的开始包、视频帧的结尾包和所述视频帧的开始包和所述视频帧的结尾包之间的RTP数据包时,查找下一视频帧的开始包、结尾包和位于开始包和结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。

9.如权利要求8所述的数据包管理装置,其特征在于,排序模块用于获取所述缓存队列中头部位置的RTP数据包的序列号,以及待插入的RTP数据包的序列号;根据所述缓存队列中头部位置的RTP数据包的序列号,以及所述待插入的RTP数据包的序列号,判断所述待插入的RTP数据包的序列号是否小于所述头部位置的RTP数据包的序列号;在所述待插入的RTP数据包的序列号小于所述头部位置的RTP数据包的序列号时,确定所述待插入的RTP数据包为过期包,并删除所述待插入的RTP数据包;在所述待插入的RTP数据包的序列号大于所述头部位置的RTP数据包的序列号时,比对所述待插入的RTP数据包与非头部位置的RTP数据包的序列号的大小,并根据比对结果,将所述待插入的RTP数据包插入所述缓存队列。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有多条指令,指令适于处理器进行加载,以执行如权利要求1至7所述的数据包管理方法中的步骤。

说明书 :

一种数据包管理方法及装置

技术领域

[0001] 本申请涉及智慧交通技术领域,尤其是涉及一种数据包管理方法及装置。

背景技术

[0002] 在数据的传输过程中,为了加快数据的传输效率,会基于UDP(User Datagram Protocol,用户数据报协议)传输数据,但在基于UDP协议传输RTP(Real-time Transport Protocol,实时传输协议)数据时,由于传输的过程中存在MTU(Maximum Transmission Unit,最大传输单元)的限制,导致在数据传输过程中,需要将数据切分为多个小于MTU的数据包,但由于在基于UDP协议传输数据时,接收到的数据包并不是按照顺序排列,导致在接收到数据包后,需要按照数据包的顺序查找每个数据包,然后根据数据包的顺序对数据包进行重组,但由于数据包处于乱序,每个位置的数据包都需要从乱序中的数据包中查找,查找过程效率较低,导致重组数据包的效率较低。
[0003] 所以,现有的基于UDP协议传输的数据存在重组数据包的过程效率较低的技术问题。

发明内容

[0004] 本申请实施例提供一种数据包管理方法,用于缓解现有的基于UDP协议传输的数据存在重组数据包的过程效率较低的技术问题。
[0005] 本申请实施例提供一种数据包管理方法,该数据包管理方法应用于交警系统,所述交警系统包括转码服务器和媒体服务器,所述数据包管理方法包括:
[0006] 所述转码服务器接收所述媒体服务器基于UDP协议发送的RTP数据包;所述RTP数据包为视频帧的组成部分;
[0007] 根据所述RTP数据包,对所述RTP数据包进行解析得到所述RTP数据包的数据信息;
[0008] 根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;
[0009] 根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;
[0010] 根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;
[0011] 在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;
[0012] 获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0013] 同时,本申请实施例提供一种数据包管理装置,该数据包管理装置应用于交警系统,所述交警系统包括转码服务器和媒体服务器,所述数据包管理装置包括:
[0014] 接收模块,用于接收所述媒体服务器基于UDP协议发送的RTP数据包;所述RTP数据包为视频帧的组成部分;
[0015] 解析模块,用于根据所述RTP数据包,对所述RTP数据包进行解析得到所述RTP数据包的数据信息;
[0016] 排序模块,用于根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;
[0017] 获取模块,用于根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;
[0018] 判断模块,用于根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;
[0019] 查找模块,用于在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;
[0020] 重组模块,用于获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0021] 同时,本申请实施例提供一种用于交警系统的服务器,所述服务器包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行程序时实现上述数据包管理方法中的步骤。
[0022] 同时,本申请实施例还提供一种用于交警系统的计算机可读存储介质,计算机可读存储介质中存储有多条指令,指令适于处理器进行加载,以执行上述数据包管理方法中的步骤。
[0023] 有益效果:本申请实施例提供一种数据包管理方法及装置,该数据包管理方法应用于交警系统,该交警系统包括转码服务器和媒体服务器,该数据包管理方法包线接收媒体服务器基于UDP协议发送的RTP数据包,然后根据RTP数据包,对RTP数据包进行解析得到RTP数据包的数据信息,然后根据RTP数据包的数据信息,将RTP数据包加入至缓存队列,并对RTP数据包进行排序,然后根据RTP数据包的排序顺序,获取缓存队列中头部位置的RTP数据包,然后根据头部位置的RTP数据包,判断头部位置的RTP数据包是否为视频帧的开始包,在头部位置的RTP数据包为视频帧的开始包时,查找视频帧的开始包对应的视频帧的结尾包,在头部位置的RTP数据包不是视频帧的开始包时,查找视频帧的开始包,并在查找到视频帧的开始包时,查找视频帧的开始包对应的视频帧的结尾包,然后获取位于视频帧的开始包和视频帧的结尾包之间的RTP数据包,根据视频帧的开始包、视频帧的开始包和视频帧的结尾包之间的RTP数据包和视频帧的结尾包,对RTP数据包进行重组得到视频流;本申请实施例通过在接收到RTP数据包后,获取RTP数据包的数据信息,并根据数据包的数据信息将RTP数据包缓存到缓存队列中,并对RTP数据包进行排序,使得在接收到RTP数据包后,可以根据RTP数据包的数据信息进行排序,从而使得在需要对RTP数据进行重组时,可以根据RTP数据包的顺序对RTP数据包进行重组,且在得到RTP数据包后,为了保证每一帧画面的完整性,会判断头部位置的RTP数据包是否为视频帧的开始包,并在查找到视频帧的开始包后,查找视频帧的结尾包,同时,获取到视频帧的开始包和视频帧的结尾包之间的RTP数据包,然后根据视频帧的开始包、视频帧的开始包和视频帧的结尾包之间的RTP数据包和视频帧的结尾包,对RTP数据进行重组得到视频流,从而避免出现过期包时,影响RTP数据的重组。

附图说明

[0024] 下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其它有益效果显而易见。
[0025] 图1为本申请实施例提供的智慧交通系统的场景示意图。
[0026] 图2为本申请实施例提供的数据包管理方法的流程示意图。
[0027] 图3为本申请实施例提供的数据包管理方法中的缓存队列的第一种示意图。
[0028] 图4为本申请实施例提供的数据包管理方法中的缓存队列的第二种示意图。
[0029] 图5为本申请实施例提供的数据包管理方法中的缓存队列的第三种示意图。
[0030] 图6为本申请实施例提供的数据包管理装置的结构示意图。
[0031] 图7为本申请实施例提供的服务器的结构示意图。

具体实施方式

[0032] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0033] 请参阅图1,图1为本申请实施例提供的智慧交通系统的场景示意图,该系统可以包括设备和服务器、服务器和服务器之间通过各种网关组成的互联网等方式连接通信,不再赘述,其中,设备包括前端设备11等,服务器包括媒体服务器12、转码服务器13以及通信服务器,图1中未示出通信服务器等,其中:
[0034] 前端设备11包括但不局限于嵌入式高清摄像机、工控机、高清相机等,用于对通过前端设备的车辆、行人进行数据采集,数据采集包括但不局限于对车辆的车牌号码(号码可以是假牌或者套牌)、车牌类型(私家车的蓝底车牌、货车的黄底车牌等)、行人的违法行为。
[0035] 服务器包括本地服务器和/或远程服务器等。媒体服务器12、转码服务器13以及通信服务器都可以部署在本地服务器,也可以部分或者全部部署在远程服务器上。
[0036] 转码服务器13接收媒体服务器12基于UDP协议发送的RTP数据包;根据所述RTP数据包,对所述RTP数据包进行解析得到所述RTP数据包的数据信息;根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0037] 需要说明的是,图1所示的系统场景示意图是一个示例,本申请实施例描述的服务器以及场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样使用,以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
[0038] 图2为本申请实施例提供的数据包管理方法的流程示意图,请参阅图2,该数据包管理方法包括以下步骤:
[0039] 201:转码服务器接收媒体服务器基于UDP协议发送的RTP数据包。
[0040] 在一种实施例中,在转码服务器接收媒体服务器发送的RTP数据包前,需要从前端设备中获取到实时监控视频流,然后才能从媒体服务器中获取到处理实时监控视频流后得到的RTP数据包,在转码服务器接收媒体服务器发送的RTP数据包时,可以是转码服务器向媒体服务器发送数据获取指令,使得媒体服务器根据数据获取指令,发送对应的RTP数据包。
[0041] 在一种实施例中,实时监控视频流包括前端设备、例如高清摄像机拍摄的视频,该实时监控视频流包括对通过前端设备的车辆的实时监控、对通过前端设备的行人的实时监控,同时,在实时监控视频流中,可以记录对应的时间、对应前端设备的地址的信息,便于在实时监控视频流中出现违法行为时,可以对违法行为发生的时间、地址进行对应的记录,以便于后续处理违法行为时可以依据对应的记录进行处理。
[0042] 在一种实施例中,RTP数据包可以根据MTU和实时监控视频流获取,根据MTU的大小,确定每个RTP数据包的大小,在设置RTP数据包时,可以使得每个RTP数据包的大小一致,便于对实时监控视频流进行切分,也可以使得RTP数据包的大小不一致,使得信息更加连贯,例如,同一帧的同一部分的信息能够被切分在同一RTP数据包中,在得到实时监控视频流后,可以将实时监控视频流划分为多个视频帧,然后将每个视频帧划分为RTP数据包,从而使得RTP数据包的数据量小于MTU。
[0043] 202:根据RTP数据包,对RTP数据包进行解析得到RTP数据包的数据信息。
[0044] 在一种实施例中,在得到RTP数据包后,对RTP数据包进行解析,从而使得得到RTP数据包的数据信息,从而使得在后续对RTP数据包进行排序时,可以根据RTP数据包的数据信息,对RTP数据包进行排序,从而避免在接收到RTP数据包后,RTP数据包处于乱序。
[0045] 在一种实施例中,RTP数据包的数据信息包括RTP数据包的序列号、RTP数据包的时间戳、RTP数据的数据量的大小,RTP数据包的数据标识等,在将视频帧拆分为多个RTP数据包时,为了保证能够查找到每个RTP数据包,可以对每个RTP数据包赋予对应的数据标识,且为了能够确定每个RTP数据包在视频帧中的位置,可以对每个RTP数据包赋予序列号,从而使得在对RTP数据包进行重组时,可以根据序列号重组视频帧,且为了确定每个RTP数据包的信息,还可以使RTP数据包的数据信息包括RTP数据包的时间戳,例如该RTP数据包记录的内容为第1秒至第2秒的内容,RTP数据的数据量的大小,例如RTP数据中包含有1000字节的数据。
[0046] 203:根据RTP数据包的数据信息,将RTP数据包加入至缓存队列,并对RTP数据包进行排序。
[0047] 在一种实施例中,在得到RTP数据包后,会获取到RTP数据包的数据信息,然后可以根据RTP数据包的数据信息将RTP数据包加入至缓存队列,并对RTP数据包进行排序,使得在重组RTP数据包时,可以根据RTP数据包的顺序对RTP数据包进行重组,避免在对RTP数据包重组时,RTP数据包处于乱序,需要按序从所有RTP数据包中依次查找对应的RTP数据包,然后对RTP数据包进行重组。
[0048] 在一种实施例中,在获取到RTP数据包的数据信息时,可以根据RTP数据包的数据信息,获取到RTP数据包的序列号,使得RTP数据包可以按照RTP数据包的序列号进行排序,从而使得缓存队列中的RTP数据包按序排列,在后续对RTP数据包进行重组时,可以根据RTP数据包的顺序进行重组;如图3所示,在接收到RTP数据包后,会将RTP数据包缓存到缓存区31中,缓存区31中缓存有RTP数据包一301、RTP数据包二302、RTP数据包三303、RTP数据包四
304、RTP数据包五305,但RTP数据包处于乱序,因此,需要根据RTP数据包的序列号对RTP数据包进行排序,RTP数据包一301的序列号为1、RTP数据包二302的序列号为2、RTP数据包三
303的序列号为3、RTP数据包四304的序列号为4、RTP数据包五305的序列号为5,则可以按照各RTP数据包的序列号对RTP数据包进行排序,使得缓存队列32中的RTP数据包按序排列。
[0049] 204:根据RTP数据包的排序顺序,获取缓存队列中的头部位置的RTP数据包。
[0050] 在一种实施例中,在将RTP数据包加入缓存队列时,考虑到会存在待插入的RTP数据包,可以对比待插入的RTP数据包和头部位置的RTP数据包的序列号的大小,从而判断待插入的RTP数据包是否为过期包,在待插入的RTP数据包为过期包时,将RTP数据包删除,在待插入的RTP数据包不是过期包时,将RTP数据包插入对应位置,此步骤包括:获取所述缓存队列中头部位置的RTP数据包的序列号,以及待插入的RTP数据包的序列号;根据所述缓存队列中头部位置的RTP数据包的序列号,以及所述待插入的RTP数据包的序列号,判断所述待插入RTP数据包的序列号是否小于所述头部位置的RTP数据包的序列号;在所述待插入的RTP数据包的序列号小于所述头部位置的RTP数据包的序列号时,确定所述待插入的RTP数据包为过期包,并删除所述待插入的RTP数据包;在所述待插入的RTP数据包的序列号大于所述头部位置的RTP数据包的序列号时,比对所述待插入的RTP数据包与非头部位置的RTP数据包的序列号的大小,并根据比对结果,将所述待插入的RTP数据包插入所述缓存队列;具体的,如图4所示,假设此时缓存队列42中包括依序排列的RTP数据包一401、RTP数据包二
402、RTP数据包三403、RTP数据包四404、RTP数据包五405,其序列号分别为1、2、3、4、5,此时获取头部位置的RTP数据包,及RTP数据包一401的序列号1,并获取待插入RTP数据包六406的序列号6,并根据RTP数据包六406的序列号6、RTP数据包一401的序列号1,判断RTP数据包六406的序列号6与RTP数据包一401的序列号1的大小,由于RTP数据包六406的序列号6大于RTP数据包一401的序列号1,则比对RTP数据包六406的序列号6与RTP数据包二402、RTP数据包三403、RTP数据包四404、RTP数据包五405的序列号的大小,并根据比对结果,由于RTP数据包六406的序列号6大于RTP数据包五405的序列号5,使得RTP数据包六406排列在RTP数据包五405后,假设RTP数据包六的序列号小于RTP数据包一的序列号,则表示RTP数据包六为过期数据,从而使得可以删除或者将RTP数据存储到无效数据存储区域,从而使得过期包不会影响到数据包的重组过程。
[0051] 在一种实施例中,在对RTP数据包进行排序时,考虑到数据量较少时,为避免过多的消耗资源,不需要对RTP数据包进行排序,因此,设置一个预设数据量,使得在缓存区内的RTP数据包的数据量大于预设数据量时,对RTP数据包进行排序,此步骤包括:根据所述RTP数据包的数据信息,判断缓存区内的RTP数据包的数据量是否大于预设数据量;在所述缓存区中的RTP数据包的数据量大于预设数据量时,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;在所述缓存区中的RTP数据包的数据量小于预设数据量时,继续接收RTP数据包;具体的,例如预设数据量为2兆,在缓存区内的RTP数据包的数据量大于2兆时,对RTP数据包进行排序,在RTP数据包小于或者等于2兆时,继续接收RTP数据包。
[0052] 在一种实施例中,考虑到在接收RTP数据包时,会出现视频帧的开始包,例如序列号为1的RTP数据包的发送过程中,发送较慢,使得在接收RTP数据包时,会导致缓存区中RTP数据包的数据量大于预设数据量,但此时未接收到视频帧的开始包,会导致将视频帧的开始包确定为过期包,并删除视频帧的开始包的问题,因此,在将RTP数据包进行缓存,并对比待插入的RTP数据包时,首先需要确定缓存区中存在视频帧的开始包,才能对RTP数据包进行排列,基于上述考量,在发送RTP数据包时,可以使得视频帧的开始包发送的时间较早,例如第一个或者第一批发送视频帧的开始包,或者使得视频帧的开始包的数据量较小,使得能够较早的接收到视频帧的开始包。
[0053] 205:根据头部位置的RTP数据包,判断头部位置的RTP数据包是否为视频帧的开始包。
[0054] 206:在头部位置的RTP数据包为视频帧的开始包时,查找视频帧的开始包对应的视频帧的结尾包,在头部位置的RTP数据包不是视频帧的开始包时,查找视频帧的开始包,并在查找到视频帧的开始包时,查找视频帧的开始包对应的视频帧的结尾包。
[0055] 在一种实施例中,为了重组RTP数据包,需要首先获取到视频帧的开始包,使得可以根据视频帧的开始包查找到视频帧对应的RTP数据包,从而可以重组RTP数据包得到视频帧,可以通过头部位置的RTP数据包的数据标识和视频帧的开始包的数据标识,判断头部位置的RTP数据包是否为视频帧的开始包,此步骤包括:获取视频帧对应的开始包的数据标识;获取所述头部位置的RTP数据包的数据标识;根据所述开始包的数据标识、所述头部位置的RTP数据包的数据标识,判断所述开始包的数据标识、所述头部位置的RTP数据包的数据标识,判断所述开始包的数据标识与所述头部位置的RTP数据包的数据标识是否相同;在所述开始包的数据标识与所述头部位置的数据包的数据标识相同时,确定所述头部位置的RTP数据包为视频帧的开始包;具体的,例如视频帧的开始包会携带“开始包”字样,在解析RTP数据包得到RTP数据包的数据信息时,会得到每个RTP数据包的数据标识,例如开始包的数据标识为“开始包”、非开始包的数据标识为“非开始包”或者“第二数据包”或者“空”,则可以根据视频帧的开始包的数据标识,与头部位置的RTP数据包的数据标识,例如头部位置的RTP数据包的数据标识为“开始包”,则可以确定头部位置的RTP数据包为视频帧的开始包。
[0056] 在一种实施例中,在缓存队列的头部位置的RTP数据包不是视频帧的开始包时,可以比对非头部位置的RTP数据包的数据标识与视频帧的开始包的数据标识,并在非头部位置的RTP数据包的数据标识与视频帧的开始包的数据标识相同时,确定该RTP数据包为视频帧的开始包,此步骤包括:根据所述开始包的数据标识,判断非头部位置的RTP数据包的数据标识与所述开始包的数据标识是否相同;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识相同时,确定所述非头部位置的RTP数据包为视频帧的开始包;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识不相同时,删除所述非头部位置的RTP数据包;具体的,在头部位置的RTP数据包的数据标识不是视频帧的开始包的数据标识时,删除头部位置的RTP数据包,然后比对头部位置的RTP数据包的下一RTP数据包的数据标识与视频帧的开始包的数据标识,如果该RTP数据包的数据标识,例如为“开始包”,与视频帧的开始包的数据标识(例如为“开始包”)相同,则可以确定该RTP数据包为开始包,如果该RTP数据包的数据标识,例如为“非开始包”,与视频帧的开始包的数据标识(例如为“开始包”)不同,则删除该RTP数据包,并比对下一RTP数据包的数据标识与视频帧的开始包的数据标识,直至找到视频帧的开始包,使得视频帧会从开始包即该帧的开始数据开始重组,从而使得视频帧为完整视频帧,且避免过期包对视频帧产生影响。
[0057] 在一种实施例中,在查找到视频帧的开始包后,需要查找到视频帧的结尾包,才能重组形成视频帧,在查找视频帧的结尾包时,可以根据结尾包的数据标识,判断RTP数据包是否为结尾包,此步骤包括:获取所述视频帧的开始包对应的视频帧的结尾包的数据标识;根据所述视频帧的结尾包的数据标识,判断位于所述视频帧的开始包后的RTP数据包的数据标识与所述视频帧的结尾包的数据标识是否相同;在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识相同时,确定所述RTP数据包为所述视频帧的结尾包;在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识不相同时,继续查找所述视频帧的结尾包;具体的,在查找视频帧的结尾包时,需要确认该结尾包是与开始包作为同一视频帧的组成部分,因此,首先需要确认视频帧的结尾包与视频帧的开始包对应,例如两者同属于第一视频帧,在数据标识上会携带有“第一帧”的标识,使得在判断RTP数据包是否为视频帧的结尾包时,可以根据视频帧的数据标识进行判断,例如某一RTP数据包上携带有“第一帧结尾包”的数据标识,此时该数据标识与视频帧的结尾包的数据标识“第一帧结尾包”相同,则可以确定该RTP数据包为视频帧的结尾包,如果在视频帧的开始包后的RTP数据包的数据标识为“第一帧非结尾包”,则可以确定该RTP数据包不是视频帧的结尾包,从而需要继续查找下一RTP数据包,并判断下一RTP数据包是否为视频帧的结尾包,直至找到视频帧的结尾包。
[0058] 在一种实施例中,在查找视频帧的结尾包时,需要确定RTP数据包是否为连续的RTP数据包,从而避免RTP数据包不连续,在视频帧播放时,出现花屏的问题,因此,在视频帧不是连续的时,需要删除整个视频帧,并寻找下一视频帧,此步骤包括:获取所述RTP数据包的序列号;根据所述RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续;在所述RTP数据包的序列号与上一RTP数据包的序列号连续时,继续查找所述视频帧的结尾包;在所述RTP数据包的序列号与上一RTP数据包的序列号不连续时,查找下一视频帧的开始包;具体的,如图5所示,假设缓存队列51中设有RTP数据包一511、RTP数据包二512、RTP数据包四513、RTP数据包五514,且此时确定序列号为1的RTP数据包一511为视频帧的开始包,需要查找视频帧的结尾包,但在判断RTP数据包是否为视频帧的结尾包时,RTP数据包二512的序列号为2,RTP数据包四513的序列号为4,RTP数据包五514的序列号为5,此时,RTP数据包二512的序列号2与RTP数据包四513的序列号4不连续,表示视频帧中存在数据包丢失的问题,此时,为了避免在播放视频帧时,出现花屏的问题,将该视频帧删除,并查找下一视频帧的开始包,即重新开始判断RTP数据包是否为开始包。
[0059] 在一种实施例中,在判断RTP数据包的序列号与上一RTP数据包的序列号是否连续时,可以通过预设排列表,然后根据预设排列表来判断RTP数据包的序列号与上一RTP数据包的序列号是否连续,此步骤包括:获取预设排列表;根据所述预设排列表、所述RTP数据包的序列号、上一RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续;例如,预设排列表为1、2、3、4、5、6、7、…,则可以根据预设排列表和相邻的RTP数据包的序列号判断相邻的RTP数据包的序列号是否连续,从而可以判断视频帧中是否存在RTP数据包的丢失。
[0060] 207:获取位于视频帧的开始包和视频帧的结尾包之间的RTP数据包;根据视频帧的开始包、视频帧的开始包与视频帧的结尾包之间的RTP数据包和视频帧的结尾包,对RTP数据包进行重组得到视频流。
[0061] 在一种实施例中,在得到视频帧的开始包、视频帧的结尾包后,还需要获取到开始包与结尾包之间的RTP数据包,从而对RTP数据包进行重组,具体的,在查找到视频帧的开始包和视频帧的结尾包后,会判断位于开始包和结尾包之间的RTP数据包是否连续,如果RTP数据包连续,表示得到了视频帧的所有RTP数据包,可以对RTP数据包进行重组得到该视频帧,在得到每个视频帧后,可以得到视频流。
[0062] 在一种实施例中,在查找下一视频帧的开始包时,可以将上一视频帧的结尾包作为下一视频帧的开始包,表示视频流中的相邻视频帧为连续的视频帧,无需为每个视频帧设置单独的开始包和结尾包,整个视频流为连续的视频流,相邻视频帧可以使得采用同一RTP数据包分别作为开始包和结尾包,从而降低了查找的时间,提高了重组效率。
[0063] 本申请实施例提供一种数据包管理方法,该数据包管理方法通过在接收到RTP数据包后,对RTP数据包进行解析,并根据解析得到的数据现象对RTP数据包进行排序,在得到RTP数据包的排序后,查找视频帧的开始包和结尾包,且可以通过序列号对RTP数据包进行排序,避免了过期包对RTP数据包的影响,并通过在查找视频帧的开始包时,避免过期包影响显示,直接删除视频帧的开始包之前的过期包,且为了避免视频帧中出现RTP数据包的丢失产生花屏的问题,会对RTP数据包的序列号进行判断,并在RTP数据包的序列号不连续时,确定出现RTP数据包的丢失,则删除该视频帧,避免播放过程中出现花屏。
[0064] 相应的,图6为本申请实施例提供的数据包管理装置的结构示意图;请参阅图6,该数据包管理装置包括以下模块:
[0065] 接收模块601,用于接收所述媒体服务器基于UDP协议发送的RTP数据包;所述RTP数据包为视频帧的组成部分;
[0066] 解析模块602,用于根据所述RTP数据包,对所述RTP数据包进行解析得到RTP数据包的数据现象;
[0067] 排序模块603,用于根据所述RTP数据包的数据现象,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;
[0068] 获取模块604,用于根据所述RTP数据包的排序顺序,获取所述缓存队列中头部位置的RTP数据包;
[0069] 判断模块605,用于根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;
[0070] 查找模块606,用于在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;
[0071] 重组模块607,用于获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0072] 在一种实施例中,排序模块603用于获取所述缓存队列中头部位置的RTP数据包的序列号,以及待插入的RTP数据包的序列号;根据所述缓存队列中头部位置的RTP数据包的序列号,以及所述待插入的RTP数据包的序列号,判断所述待插入的RTP数据包的序列号是否小于所述头部位置的RTP数据包的序列号;在所述待插入的RTP数据包的序列号小于所述头部位置的RTP数据包的序列号时,确定所述待插入的RTP数据包为过期包,并删除所述待插入的RTP数据包;在所述待插入的RTP数据包的序列号大于所述头部位置的RTP数据包的序列号时,比对所述待插入的RTP数据包与非头部位置的RTP数据包的序列号的大小,并根据比对结果,将所述待插入的RTP数据包插入所述缓存队列。
[0073] 在一种实施例中,排序模块603用于根据所述RTP数据包的数据信息,判断缓存区内的RTP数据包的数据量是否大于预设数据量;在所述缓存区中的RTP数据包的数据量大于预设数据量时,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;在所述缓存区中的RTP数据包的数据量小于或者等于预设数据量时,继续接收RTP数据包。
[0074] 在一种实施例中,判断模块605用于获取视频帧对应的开始包的数据标识;获取所述头部位置的RTP数据包的数据标识;根据所述开始包的数据标识、所述头部位置的RTP数据包的数据标识,判断所述开始包的数据标识与所述头部位置的RTP数据包的数据标识是否相同;在所述开始包的数据标识与所述头部位置的数据包的数据标识相同时,确定所述头部位置的RTP数据包为视频帧的开始包。
[0075] 在一种实施例中,查找模块606用于根据所述开始包的数据标识,判断非头部位置的RTP数据包的数据标识与所述开始包的数据标识是否相同;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识相同时,确定所述非头部位置的RTP数据包为视频帧的开始包;在所述非头部位置的RTP数据包的数据标识与所述开始包的数据标识不相同时,删除所述非头部位置的RTP数据包。
[0076] 在一种实施例中,查找模块606用于获取所述视频帧的开始包对应的视频帧的结尾包的数据标识;根据所述视频帧的结尾包的数据标识,判断位于所述视频帧的开始包后的RTP数据包的数据标识与所述视频帧的结尾包的数据标识是否相同;在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识相同时,确定所述RTP数据包为所述视频帧的结尾包;在所述RTP数据包的数据标识与所述视频帧的结尾包的数据标识不相同时,继续查找所述视频帧的结尾包。
[0077] 在一种实施例中,查找模块606用于获取所述RTP数据包的序列号;根据所述RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续;在所述RTP数据包的序列号与上一RTP数据包的序列号连续时,继续查找所述视频帧的结尾包;在所述RTP数据包的序列号与上一RTP数据包的序列号不连续时,查找下一视频帧的开始包。
[0078] 在一种实施例中,查找模块606用于获取预设排列表;根据所述预设排列表、所述RTP数据包的序列号、上一RTP数据包的序列号,判断所述RTP数据包的序列号与上一RTP数据包的序列号是否连续。
[0079] 相应的,本申请实施例还提供一种服务器,如图7所示,该服务器可以包括射频(RF,Radio Frequency)电路701、包括有一个或一个以上计算机可读存储介质的存储器702、输入单元703、显示单元704、传感器705、音频电路706、无线保真(WiFi,Wireless Fidelity)模块707、包括有一个或者一个以上处理核心的处理器708、以及电源709等部件。
本领域技术人员可以理解,图7中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部分,或者不同的部件布置。其中:
[0080] RF电路701可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器708处理;另外,将涉及上行的数据发送给基站。存储器702可用于存储软件程序以及模块,处理器708通过运行存储在存储器702的软件程序以及模块,从而执行各种功能应用以及数据处理。输入单元703可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0081] 显示单元704可用于显示由用户输入的信息或提供给用户的信息以及服务器的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。
[0082] 服务器还可包括至少一种传感器705,比如光传感器、运动传感器以及其他传感器。音频电路706包括扬声器,扬声器可提供用户与服务器之间的音频接口。
[0083] WiFi属于短距离无线传输技术,服务器通过WiFi模块707可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图7示出了WiFi模块707,但是可以理解的是,其并不属于服务器的必须构成,完全可以根据需要在不改变申请的本质的范围内而省略。
[0084] 处理器708是服务器的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行服务器的各种功能和处理数据,从而对手机进行整体监控。
[0085] 服务器还包括给各个部件供电的电源709(比如电池),优选的,电源可以通过电源管理系统与处理器708逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
[0086] 尽管未示出,服务器还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,服务器中的处理器708会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器702中,并由处理器708来运行存储在存储器702中的应用程序,从而实现以下功能:
[0087] 接收媒体服务器基于UDP协议发送的RTP数据包;根据所述RTP数据包,对所述RTP数据包进行解析得到所述RTP数据包的数据信息;根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0088] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文的详细描述,此处不再赘述。
[0089] 本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0090] 为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以实现以下功能:
[0091] 接收媒体服务器基于UDP协议发送的RTP数据包;根据所述RTP数据包,对所述RTP数据包进行解析得到所述RTP数据包的数据信息;根据所述RTP数据包的数据信息,将所述RTP数据包加入至缓存队列,并对所述RTP数据包进行排序;根据所述RTP数据包的排序顺序,获取所述缓存队列中的头部位置的RTP数据包;根据所述头部位置的RTP数据包,判断所述头部位置的RTP数据包是否为视频帧的开始包;在所述头部位置的RTP数据包为视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包,在所述头部位置的RTP数据包不是视频帧的开始包时,查找所述视频帧的开始包,并在查找到所述视频帧的开始包时,查找所述视频帧的开始包对应的视频帧的结尾包;获取位于所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包;根据所述视频帧的开始包、所述视频帧的开始包与所述视频帧的结尾包之间的RTP数据包和所述视频帧的结尾包,对所述RTP数据包进行重组得到视频流。
[0092] 以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0093] 其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
[0094] 由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种方法中的步骤,因此,可以实现本申请实施例所提供的任一种方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0095] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0096] 以上对本申请实施例所提供的一种数据包管理方法及装置、服务器及计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例的技术方案的范围。