数据合流方法、数据拆分方法、装置、设备及存储介质

文档序号:52635 发布日期:2021-09-28 浏览:34次 >En<

阅读说明:本技术 数据合流方法、数据拆分方法、装置、设备及存储介质 (Data converging method, data splitting method, device, equipment and storage medium ) 是由 董超峰 邵振军 于 2020-03-27 设计创作,主要内容包括:本说明书一个或多个实施例提供一种数据合流方法、数据拆分方法、装置、设备及存储介质,其中,数据合流方法包括:获取被拆分为多个数据块的流数据,其中,各所述数据块被指定了序号;对所述数据块进行解析,得到所述序号;根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置;将所述数据块存入所述目标位置,以将获取到的数据块合流。(One or more embodiments of the present specification provide a data merging method, a data splitting method, an apparatus, a device, and a storage medium, where the data merging method includes: acquiring stream data split into a plurality of data blocks, wherein each data block is assigned a sequence number; analyzing the data block to obtain the serial number; determining the target position of the data block in the array according to the sequence number and the length of the array for caching the streaming data; and storing the data blocks into the target position so as to merge the acquired data blocks.)

数据合流方法、数据拆分方法、装置、设备及存储介质

技术领域

本说明书一个或多个实施例涉及通信

技术领域

,尤其涉及一种数据合流方法、数据拆分方法、装置、设备及存储介质。

背景技术

在4G/5G时代,用户对流数据的及时性有了更高的要求,通常,用户推送的流数据都是几十或者百G级别的量,以现有带宽条件下,难以保证时效性,目前,较为常规的方式是多网卡分流传输数据,但是如何保证切分后的数据能够在服务端正确组装成原流数据是目前亟待解决的问题。

发明内容

有鉴于此,本说明书一个或多个实施例的提出一种数据合流方法、数据拆分方法、装置、设备及存储介质。

本说明书的一个或多个实施例提供了一种数据合流方法,包括:获取被拆分为多个数据块的流数据,其中,各所述数据块被指定了序号;对所述数据块进行解析,得到所述序号;根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置;将所述数据块存入所述目标位置,以将获取到的数据块合流。

可选的,根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置,包括:将所述序号与所述数组的长度取模得到的数值对应的所述数组中的位置作为所述目标位置。

可选的,所述数组为堆数组,所述方法还包括:将所述数据块存入所述目标位置之后,按照所述数组中各位置对应的数值从小到大的顺序依次从所述数组中取出所述数据块,其中,所述目标位置对应的变量为m+1,m取自然数;每取出一个数据块后,将m+1的值加1,将m+1与本次取出的数据块的序号进行比较,若m+1与本次取出的数据块的序号不相等,则将本次取出的数据块重新放入所述数组,等待预设时长,并在所述预设时长内继续获取所述目标位置的数据块,若等待时长超过所述预设时长或m+1与本次取出的数据块的序号相等,继续获取所述数组中对应数值为m+2位置的数据块。

可选的,所述方法还包括:在获取被拆分为多个数据块的流数据之前,接收来自设备端的多路流数据,其中,所述设备端将流数据拆分成多个数据块,各所述数据块被指定了资源标识;将接收到的具有相同资源标识的数据块分配给同一个任务处理对象,其中,一个所述任务处理对象对应一个独立的所述数组。

本说明书的一个或多个实施例还提供了一种数据拆分方法,包括:将待发送至接收端的流数据拆分为多个数据块;与所述接收端建立多路连接;通过所述多路连接将所述多个数据块打包后分多路发送至所述接收端,其中,打包后的各数据块被指定了序号。

可选的,打包后的各数据块被指定了资源标识。

本说明书的一个或多个实施例还提供了一种数据合流装置,包括:获取模块,用于获取被拆分为多个数据块的流数据,其中,各所述数据块被指定了序号;解析模块,用于对所述数据块进行解析,得到所述序号;确定模块,用于根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置;

合流模块,用于将所述数据块存入所述目标位置,以将获取到的数据块合流。

本说明书的一个或多个实施例还提供了一种数据拆分装置,包括:拆分模块,用于将待发送至接收端的流数据拆分为多个数据块;连接模块,用于与所述接收端建立多路连接;发送模块,用于通过所述多路连接将所述多个数据块打包后分多路发送至所述接收端,其中,打包后的各数据块被指定了序号。

本说明书的一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任意一种数据合流方法或任意一种数据拆分方法。

本说明书的一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述任意一种数据合流方法或上述任意一种数据拆分方法。

从上面所述可以看出,本说明书一个或多个实施例提供的数据合流方法,服务端在接收到被拆分为多个数据块的流数据后,通过对数据块进行解析,得到各数据块对应的序号,根据数据块的序号与用于缓存流数据的数组的长度确定出各数据块在数组中的位置,从而可将接收到的块数据在重新合并成原始流数据,最大限度降低延迟,保证流数据的时效性。

附图说明

为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本说明书一个或多个实施例示出的通信系统的示意图;

图2为本说明书一个或多个实施例示出的数据合流方法的流程图;

图3为本说明书一个或多个实施例示出的分流协议的数据结构示意图;

图4为本说明书一个或多个实施例示出的一种数据拆分方法的流程图;

图5为本说明书一个或多个实施例示出的服务端与设备端进行信息交互的示意图;

图6为本说明书一个或多个实施例示出的接收通道结构的示意图;

图7为本说明书一个或多个实施例示出的数据集合结构的示意图;

图8为本说明书一个或多个实施例示出的接收通道结构的示意图;

图9为本说明书一个或多个实施例示出的一种数据合流装置的框图;

图10为本说明书一个或多个实施例示出的一种数据拆分装置的框图;

图11为本说明书一个或多个实施例示出的一种更为具体的电子设备硬件结构示意图。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

本说明书一个或多个实施例提供了一种数据合流方法,该方法可基于一通信系统实现,如图1所示,该通信系统可包括设备端与服务端,其中,设备端可以是用户手持4K/8K的采集设备,例如,可以是具有采集数据功能的移动终端。采集设备在采集流数据后,可根据数据的大小或时间将流数据拆分成多个数据块,指定各数据块的序号及资源标识,采集设备可支持通过多路(图1中以三路为例)将拆分后的流媒体数据(如图1中所示的Stream1(数据流1)-Stream3(数据流3))按照约定的协议打包后,发送至服务端,服务端在接收到拆分后的流数据之后,通过同一业务线程处理资源ID(以下也称资源标识)相同的数据块,如,在图中业务线程1负责处理流数据集合1中的数据块,该集合中的数据块属于同一资源,业务线程2负责处理流程数据集合2中的数据块,该集合中的数据块同于同一资源,根据数据块的序号确定数据块在用于缓存数据块的数组中位置,将数据块放入数组中的相应的位置,从而实现对数据的合流。

图2是根据本说明书一个或多个实施例示出的一种数据合流方法的流程图,该方法可由服务端执行,如图2所示,该方法包括:

步骤202:获取被拆分为多个数据块的流数据,其中,各所述数据块被指定了序号;

可选地,流数据可以是视频流,各数据块可在发送端被指定了序号,该发送端例如可以是采集设备端。

在一个例子中,发送端将采集到的数据拆分成多个数据块后,通过分流协议将数据传输至服务端,分流协议中的字段如图3所示,其中,各字段的说明如下:

resource id(资源身份标识)用于标识当前上传的数据所归属的资源,是资源的身份证明,占7个字节。

payload protocol(有效载荷协议)用于标识payload部分数据的协议类型,占1个字节,例如,1用于标识RTP(Real-time Transport Protocol,实时传输协议),2用于标识RTMP(Real Time Messaging Protocol,实时消息传输协议)等。

serial number(序号)用于记录当前payload块的顺序,占4个字节。

Length用于记录传输payload部分的长度,占4个字节,为保证实时性,其长度可由采集端根据实际情况确定。

payload是实际传输的流数据。

采用上述分流协议可保证设备端采集到的数据能够及时正确的推送到业务服务器,以及服务器能够将接收到的块数据再重新合并成原始流数据,最大限度降低延迟,保证流数据的时效性。

步骤204:对所述数据块进行解析,得到所述序号;

沿用上述例子,服务端可利用上述分流协议对获取到的数据块进行解析,得到各数据块对应的序号。

步骤206:根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置;

可选地,在本说明书的一个或多个实施例中,根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置可包括:将所述序号与所述数组的长度取模得到的数值对应的所述数组中的位置作为所述目标位置。例如,假设数组的长度是16,对于序号为0的数据块,将0与16取模得到的值是0,则确定将当前数据块放置在数组中0对应的位置,又例如,对于序号为17的数据块,将17与16取模得到的值是1,则确定当前数据包放置在数组中1对应的位置。

在另一例子中,用于缓存上述流数据的数组的长度可以预设为固定值,例如,可以是1024。

步骤208:将所述数据块存入所述目标位置,以将获取到的数据块合流。

本说明书一个或多个实施例的数据合流方法,服务端在接收到被拆分为多个数据块的流数据后,通过对数据块进行解析,得到各数据块对应的序号,根据数据块的序号与用于缓存流数据的数组的长度确定出各数据块在数组中的位置,从而可将接收到的块数据在重新合并成原始流数据,最大限度降低延迟,保证流数据的时效性。

在本说明书的一个或多个实施例中,所述数组可为堆数组,例如,可采用最小堆存储块数据,对于堆数组来说,数组的对象是一个堆,其时间复杂度为logN,故,通过堆数据来缓存上述流数据,效率较高。

在本说明书的一个或多个实施例中,所述数据合流方法还可包括:

将所述数据块存入所述目标位置之后,按照所述数组中各位置对应的数值从小到大的顺序依次从所述数组中取出数据块,其中,所述目标位置对应的数值为m+1,其中,m为自然数;每取出一个数据块后,将m+1的值加1,将m+1与本次取出的数据块的序号进行比较,若m+1与本次取出的数据块的序号不相等,则将本次取出的数据块重新放入所述数组,等待预设时长,并在所述预设时长内继续获取所述目标位置的数据块,若等待时长超过所述预设时长或m+1与本次取出的数据块的序号相等,继续获取所述数组中对应数值为m+2位置的数据块。在一个例子中,设置变量m用于指定当前正在处理的数据块的序号,该变量用于标识当前合流后处理的数据块的序号,可按照m递增的顺序依次将找到的数据块进行合流,以保证数据块的连续性,为处理提高效率,可对该变量采用原子操作,所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何context switch(切换到另一个线程)。在该例子中,数组仍以堆数组为例,线程负责根据m+1指定的位置计算出堆数组的位置,取出该位置的堆对象并pop(出栈)一个数据块,对比该数据块的序号是否为m+1,如果是,则表明找到了堆对象的数据,否则将该数据块再push(入栈)进堆对象中,最长等待1秒钟(为上述预设时长的一个示例),在该1秒钟内每隔1毫秒再在m+1指定的堆数组的位置pop一个数据块,直至获取到序号为m+1的数据块,如果在该1秒中内一直未获取到序号为m+1的数据块,则打印日志标识该数据块已丢失,继续根据m+2指定的位置计算出数组的位置并获取该位置的数据块。

在本说明书的一个或多个实施例中,所述数据合流方法还可包括:

在获取被拆分为多个数据块的流数据之前,接收来自设备端的多路流数据,其中,所述设备端将流数据拆分成多个数据块,各所述数据块被指定了资源标识;将接收到的具有相同资源标识的数据块分配给同一个任务处理对象,其中,一个所述任务处理对象对应一个独立的所述数组。在一个例子中,假设采用分布式服务器来实现上述数据合流方法,在该方法中,设备端与索引服务器建立多路TCP(Transmission Control Protocol,传输控制协议)连接,通过该多路TCP连接将拆分后的流数据发送至索引服务器,索引服务器根据流数据中的资源ID判断是否为同一视频流,将属于同一资源ID的多路TCP连接分配给同一个合流服务器,在合流服务器上为每一个连接分配一个独立的线程进行数据接收,同时内部还会维护一个堆数组对象用于存放数据块。在另一个例子中,设备端直接与合流服务器建立多路TCP连接,通过该多路TCP连接将拆分后的流数据发送至合流服务器,合流服务器根据每个数据块中的资源ID,分配一个独立的块业务处理对象,该对象负责收集推送上来的同一资源ID的块数据。在该例子中一个任务处理对象对应一个独立的数组用于缓存某一资源ID对应的块数据,可实现数据的分流处理,提升数据处理效率。

图4是根据本说明书一个或多个实施例示出的一种数据拆分方法的流程图,该方法可由设备端执行,如图4所示,该方法包括:

步骤402:将待发送至接收端的流数据拆分为多个数据块;例如,可根据流数据大小或时间将流数据拆分为多个数据块。

步骤404:与所述接收端建立多路连接;如上文所述,例如可以与索引服务器或合流服务器建立多路TCP连接。

步骤406:通过所述多路连接将所述多个数据块打包后分多路发送至所述接收端,其中,打包后的各数据块被指定了序号。

例如,设备端可以通过上述分流协议将拆分得到的多个数据块打包及发送至服务端。其中,设备端需保证拆分数据块的唯一性和推送的及时性。

在本说明书一个或多个实施例中,打包后的各数据块被指定了资源标识,其中,具有相同资源标识的数据块属于同一资源。

以上分别从服务端执行的数据合流方法以及设备端执行的数据拆分方法进行了说明,为了体现设备端以及服务端在发送数据以及接收数据过程中,二者之间的信息交互,以下以一个例子,结合图5,进一步对数据合流方法以及数据拆分方法进行说明。

该例以4K/8K视频点播场景为例,在该场景下,用户需要查看某个直播视频,设备端以及服务端执行的操作如下:

设备端采集数据;

设备端根据一定的策略拆分流数据,将拆分后的流数据分多路,例如分为Stream1、Stream2以及Stream3推送到服务端;

设备端支持多路(三路及三路以上,图5中以三路为例)将采集到的视频流数据打包成约定的协议上传至服务端。可包括:与合流服务器建立多路TCP连接;将流数据切割成数据块并指定每个数据块的唯一ID(为上述序号的一个示例),设置必要的参数;将数据块打包成约定的协议并发送至服务端;

后端服务器根据每个数据块中的资源ID,分配一个独立的块业务处理对象,该对象负责收集推送上来的同一资源ID的块数据,如图5所示,通过不同的N个协程分别处理业务句柄1至业务句柄N(为资源ID的一个示例)对应的数据的集合;

其中,业务处理对象还需初始化内部的一些事务,例如启动协程组监听接收通道,启动独立协程监听堆数组数据等,接收通道如图6所示,通道中的数据块并无顺序,且数据量较大;

合流服务器对每个推送上来的视频流,后台都会有一个常驻线程负责监听堆数组中是否有数据存入,如果有数据,则启动线性排序检查。

排序时m从0开始计数,每获取到一个数据块,m的值加1,并将该数据块放入出口通道中;

如图7所示,业务协程从接收通道中读取数据块后,检测数据块的序号与m+1的值是否相等,若相等,则直接将该数据块放入出口通道中,若不相等,则将m+1与堆数组长度取模,将该余数作为数组下表放入块数据。

其中,出口通道为一个队列,当队列中存在数据后,启动线程将队列中的数据依次推送至远程服务器。出口通道如图8所示,该通道中的数据是序列化后的块数据。

如果出现丢包的情况,就是说无法找到某个数据块,业务协程需等待的最大超时时间为可以是1秒。

需要说明的是,图6-图8所示的结构需辅助以业务处理,例如放入入口通道中的数据需要进行效性检验,业务协程中需要在独立协程处理集合中已有的块数据等。

图9是根据本说明书一个或多个实施例示出的一种数据合流装置的框图,如图9所示,该装置90包括:

获取模块92,用于获取被拆分为多个数据块的流数据,其中,各所述数据块被指定了序号;

解析模块94,用于对所述数据块进行解析,得到所述序号;

确定模块96,用于根据所述序号以及用于缓存所述流数据的数组的长度确定出所述数据块在所述数组中的目标位置;

合流模块98,用于将所述数据块存入所述目标位置,以将获取到的数据块合流。

图10是根据本说明书一个或多个实施例示出的一种数据拆分装置的框图,如图10所示,该装置100包括:

拆分模块103,用于将待发送至接收端的流数据拆分为多个数据块;

连接模块105,用于与所述接收端建立多路连接;

发送模块107,用于通过所述多路连接将所述多个数据块打包后分多路发送至所述接收端,其中,打包后的各数据块被指定了序号。

本说明书一个或多个实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一种数据合流方法或数据拆分方法。

需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

图11示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。

另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。

尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。

本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。

16页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:空间内目标判定方法、装置、计算机设备和存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!