数据分发系统、方法及计算机可读存储介质转让专利

申请号 : CN201811072603.7

文献号 : CN109151491B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 庄晓川郭斌尤聚军

申请人 : 网宿科技股份有限公司

摘要 :

本发明实施例涉及流媒体分发技术领域,公开了一种数据分发系统和方法。本发明中数据分发系统包括:边缘推流服务器用于接收推流器发送的流媒体数据包,对流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;中心服务器用于对序列化的流媒体数据包进行缓存;如果接收到来自边缘拉流服务器的序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包;边缘拉流服务器用于将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端有利于避免直播画面容易出现画面重复卡顿等问题,提高了用户的使用体验。

权利要求 :

1.一种数据分发系统,其特征在于,包括:边缘推流服务器、若干个中心服务器和边缘拉流服务器;

所述边缘推流服务器,用于接收推流器发送的流媒体数据包,对所述流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给所述若干个中心服务器;

所述中心服务器,用于对所述序列化的流媒体数据包进行缓存;接收到来自所述边缘拉流服务器的序列化回源请求,根据所述序列化回源请求确定待发送的流媒体数据包的起始位置,根据所述起始位置向所述边缘拉流服务器发送缓存的流媒体数据包;

所述边缘拉流服务器,用于将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端;

所述边缘拉流服务器,还用于在接收到所述用户终端发送的拉流请求时,指定一中心服务器,并向指定的中心服务器发送普通回源请求;

所述中心服务器,还用于如果接收到所述普通回源请求,则根据所述普通回源请求确定待发送的流媒体数据包的起始位置,根据所述起始位置向所述边缘拉流服务器发送缓存的流媒体数据包;

所述边缘拉流服务器,还用于如果检测到普通回源失败,则切换所指定的中心服务器,向切换后的中心服务器发送所述序列化回源请求。

2.根据权利要求1所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于接收推流器发送的元数据数据包,对所述元数据数据包添加推流时间信息,根据所述推流时间信息对所述流媒体数据包进行序列化处理。

3.根据权利要求2所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于根据所述推流时间信息确定序列化起始点,根据所述序列化起始点对所述流媒体数据包进行序列化处理。

4.根据权利要求3所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于对每个所述流媒体数据包使用串行序列化接口生成每个所述流媒体数据包的序列号,根据所述序列化起始点和每个所述流媒体数据包的序列号将所述流媒体数据包封装为所述序列化的流媒体数据包。

5.根据权利要求4所述的数据分发系统,其特征在于,所述序列化回源请求携带序列号,所述中心服务器还用于,将所述序列化回源请求携带的序列号所属的数据包的位置确定为所述起始位置。

6.根据权利要求5所述的数据分发系统,其特征在于,所述边缘拉流服务器还用于,根据所接收的流媒体数据包的序列号,确定所述序列化回源请求携带的序列号;其中,确定的所述序列号为所述边缘拉流服务器最新接收到的流媒体数据包的序列号。

7.根据权利要求1所述的数据分发系统,其特征在于,所述中心服务器,还用于根据当前时间和快启时间查找关键帧的位置,将所述关键帧的位置作为所述根据所述普通回源请求确定的待发送的流媒体数据包的起始位置。

8.根据权利要求1所述的数据分发系统,其特征在于,所述边缘拉流服务器,还用于如果检测到序列化回源失败,则再向所述若干个中心服务器中还未发送过所述序列化回源请求和普通回源请求的中心服务器发送所述序列化回源请求,直至检测到所述序列化回源成功。

9.根据权利要求1所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于对所述序列化的流媒体数据包采用预设的加密算法进行加密,将加密后的流媒体数据包转推至所述若干个中心服务器;

所述边缘拉流服务器,还用于将接收的加密的流媒体数据包采用预设的解密算法进行解密。

10.根据权利要求9所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于将加密后的流媒体数据包通过预设的私有协议转推至所述若干个中心服务器。

11.根据权利要求1所述的数据分发系统,其特征在于,所述边缘推流服务器,还用于在检测到重新推流时,对新接收到的流媒体数据包进行序列化处理。

12.一种数据分发方法,其特征在于,包括:

边缘推流服务器接收推流器发送的流媒体数据包;

所述边缘推流服务器对所述流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;

中心服务器对所述序列化的流媒体数据包进行缓存;

所述中心服务器接收来自边缘拉流服务器的序列化回源请求,根据所述序列化回源请求确定待发送的流媒体数据包的起始位置;

所述中心服务器根据所述起始位置向所述边缘拉流服务器发送缓存的流媒体数据包;

所述边缘拉流服务器将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包;

所述边缘拉流服务器将还原后的流媒体数据包发送至用户终端;

其中,在所述边缘拉流服务器将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包之前,还包括:所述边缘拉流服务器在接收到所述用户终端发送的拉流请求时,指定一中心服务器,并向指定的中心服务器发送普通回源请求;

所述中心服务器如果接收到所述普通回源请求,则根据所述普通回源请求确定待发送的流媒体数据包的起始位置;

所述中心服务器根据所述起始位置向所述边缘拉流服务器发送缓存的流媒体数据包;

在所述中心服务器根据所述起始位置向所述边缘拉流服务器发送缓存的流媒体数据包之后,还包括:所述边缘拉流服务器如果检测到普通回源失败,则切换所指定的中心服务器,向切换后的中心服务器发送所述序列化回源请求。

13.根据权利要求12所述的数据分发方法,其特征在于,所述边缘推流服务器,通过以下方式对所述流媒体数据包进行序列化处理:接收推流器发送的元数据数据包;

对所述元数据数据包添加推流时间信息;

根据所述推流时间信息对所述流媒体数据包进行序列化处理。

14.根据权利要求13所述的数据分发方法,其特征在于,所述根据所述推流时间信息对所述流媒体数据包进行序列化处理,包括:根据所述推流时间信息确定序列化起始点;

根据所述序列化起始点对所述流媒体数据包进行序列化处理。

15.根据权利要求14所述的数据分发方法,其特征在于,所述根据所述序列化起始点对所述流媒体数据包进行序列化处理,包括:对每个所述流媒体数据包使用串行序列化接口生成每个所述流媒体数据包的序列号;

根据所述序列化起始点和每个所述流媒体数据包的序列号将所述流媒体数据包封装为所述序列化的流媒体数据包。

16.根据权利要求15所述的数据分发方法,其特征在于,所述序列化回源请求携带序列号,所述中心服务器根据所述序列化回源请求确定待发送的流媒体数据包的起始位置,包括:将所述序列化回源请求携带的序列号所属的数据包的位置确定为所述起始位置。

17.根据权利要求16所述的数据分发方法,其特征在于,所述边缘拉流服务器发送的所述序列化回源请求携带的序列号,通过以下方式确定:根据所接收的流媒体数据包的序列号,确定所述序列化回源请求携带的序列号;其中,确定的所述序列号为所述边缘拉流服务器最新接收到的流媒体数据包的序列号。

18.根据权利要求12所述的数据分发方法,其特征在于,所述根据所述普通回源请求确定待发送的流媒体数据包的起始位置,包括:根据当前时间和快启时间查找关键帧的位置;

将所述关键帧的位置作为根据所述普通回源请求确定的待发送的流媒体数据包的起始位置。

19.根据权利要求12所述的数据分发方法,其特征在于,在所述边缘拉流服务器向切换后的中心服务器发送所述序列化回源请求之后,还包括:所述边缘拉流服务器如果检测到序列化回源失败,则再向所述若干个中心服务器中还未发送过所述序列化回源请求和普通回源请求的中心服务器发送所述序列化回源请求,直至检测到所述序列化回源成功。

20.根据权利要求12所述的数据分发方法,其特征在于,在所述边缘推流服务器对所述流媒体数据包进行序列化处理之后,所述将序列化的流媒体数据包转推给若干个中心服务器之前,还包括:所述边缘推流服务器对序列化的流媒体数据包采用预设的加密算法进行加密;

所述边缘推流服务器将序列化的流媒体数据包转推给若干个中心服务器包括:所述边缘推流服务器将加密后的流媒体数据包转推至所述若干个中心服务器;

所述边缘拉流服务器将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,包括:所述边缘拉流服务器将接收的加密的流媒体数据包采用预设的解密算法进行解密,将解密后的流媒体数据包去序列化以还原所接收到的流媒体数据包。

21.根据权利要求12所述的数据分发方法,其特征在于,还包括:所述边缘推流服务器在检测到重新推流时,对新接收到的流媒体数据包进行序列化处理。

22.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求12至21中任一项所述的数据分发方法。

说明书 :

数据分发系统、方法及计算机可读存储介质

技术领域

[0001] 本发明涉及流媒体分发技术领域,特别涉及一种数据分发系统、方法及计算机可读存储介质。

背景技术

[0002] 随着PC以及移动设备广泛使用,入户带宽不断提升,互动直播类业务日趋广泛,各类互动直播类网站以及APP相继推出,带来的竞争压力也日趋激烈。目前,绝大部分的直播服务提供厂商都选择内容分发网络(Content Delivery Network,CDN)或者云服务商进行直播加速。随着科技发展,终端用户对直播质量要求不断提升,终端用户对直播质量的要求也越来越高。
[0003] 然而,发明人发现现有技术中至少存在如下问题:直播画面容易出现画面重复、卡顿和不流畅等问题,导致用户体验变差。

发明内容

[0004] 本发明实施方式的目的在于提供一种数据分发系统、方法及计算机可读存储介质,有利于避免直播画面容易出现画面重复、卡顿和不流畅等问题,提高了用户的使用体验。
[0005] 为解决上述技术问题,本发明的实施方式提供了一种数据分发系统,包括:边缘推流服务器、若干个中心服务器和边缘拉流服务器;边缘推流服务器,用于接收推流器发送的流媒体数据包,对流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;中心服务器,用于对序列化的流媒体数据包进行缓存;如果接收到来自边缘拉流服务器的序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包;边缘拉流服务器,用于将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端。
[0006] 本发明的实施方式还提供了一种数据分发方法,应用于数据分发系统,包括:边缘推流服务器,接收推流器发送的流媒体数据包,对流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;中心服务器,对序列化的流媒体数据包进行缓存;如果接收到来自边缘拉流服务器的序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包;边缘拉流服务器,将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端。
[0007] 本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时实现上述的数据分发方法。
[0008] 本发明实施方式相对于现有技术而言,发明人为了解决现有技术中的技术问题,对现有的直播流程进行了分析,经过仔细研究发现出现播放画面重复卡顿的问题的原因是:边缘推流服务器将流媒体数据包发送至不同服务器进行备份缓存时,由于不同发送链路的数据传输速率不同,导致各中心服务器实时缓存的数据不一致,快速启动以及GOP等缓存影响会导致数据重复或者数据丢失。因此,本发明实施方式中,由边缘推流服务器,对流媒体数据包进行序列化处理,使得中心服务器缓存的流媒体数据包为经过序列化的流媒体数据包,在有拉流服务器发送序列化回源请求时,中心服务器容易根据缓存的序列化处理的流媒体数据包找到要发送的流媒体数据包所在的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包,拉流服务器将接收的流媒体数据包去序列化处理后发送给用户终端,有利于提高用户终端播放的视频画面的流畅性,满足用户的观看需求,有效的避免了画面出现卡顿、重复等问题,提高用户的直播观看体验。
[0009] 另外,边缘推流服务器,还用于接收推流器发送的元数据数据包,对元数据数据包添加推流时间信息,根据推流时间信息对流媒体数据包进行序列化处理,有利于对流媒体数据包进行有效的序列化处理。
[0010] 另外,边缘推流服务器,还用于根据推流时间信息确定序列化起始点,根据序列化起始点对流媒体数据包进行序列化处理。为序列化流媒体数据包设置序列化起始点,有利于序列化处理从序列化起始点开始有序进行。
[0011] 另外,边缘推流服务器,还用于对每个流媒体数据包使用串行序列化(Serializable)接口生成每个流媒体数据包的序列号,根据序列化起始点和每个流媒体数据包的序列号将流媒体数据包封装为序列化的流媒体数据包。通过串行序列化接口生成的序列号,有利于表征不同流媒体数据包的先后顺序,方便了对流媒体数据包的序列化处理。
[0012] 另外,序列化回源请求携带序列号,中心服务器还用于,将所述序列化回源请求携带的序列号所属的数据包的位置确定为所述起始位置,有利于使中心服务器根据接收到的序列化回源请求快速确定应该发送流媒体数据包的起始位置。
[0013] 另外,边缘拉流服务器,还用于在接收到用户终端发送的拉流请求时,指定一中心服务器,向指定的中心服务器发送普通回源请求;中心服务器,还用于如果接收到普通回源请求,则根据普通回源请求确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包。
[0014] 另外,边缘拉流服务器,还用于如果检测到普通回源失败,则切换所指定的中心服务器,向切换后的中心服务器发送序列化回源请求,使得即使普通回源失败,也能有针对性的切换所指定的中心服务器,向切换的中心服务器发送序列化回源请求,有利于提高回源成功的可能性,内部链路的切换,使得可以实现精确的断点续传功能,从而进一步保证流媒体数据包发送的连续性和稳定性,确保发送至用户终端的流媒体数据包的一致性,提高用户的直播观看体验。
[0015] 另外,边缘推流服务器,还用于对序列化的流媒体数据包采用预设的加密算法进行加密,将加密后的流媒体数据包转推至若干个中心服务器;边缘拉流服务器,还用于将接收的加密的流媒体数据包采用预设的解密算法进行解密,保证流媒体数据包在传输过程中的安全性和保密性。
[0016] 另外,边缘推流服务器,还用于将加密后的流媒体数据包通过预设的私有协议转推至若干个中心服务器。通过私有协议有利于保证流媒体数据包在传输过程中的私密性和排他性。
[0017] 另外,边缘推流服务器,还用于在检测到重新推流时,对新接收到的流媒体数据包进行序列化处理。有利于保证重新推流时,新接收到的流媒体数据包也能进行序列化处理,以满足不同的推流请求下,直播画面均不会出现画面重复、卡顿等问题,提升了用户的观看体验。

附图说明

[0018] 一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
[0019] 图1是根据本发明第一实施方式中的数据分发系统的结构示意图;
[0020] 图2是根据本发明第二实施方式中的数据分发系统中的边缘推流服务器的工作流程示意图;
[0021] 图3是根据本发明第二实施方式中的数据分发系统中的中心服务器的工作流程示意图;
[0022] 图4是根据本发明第二实施方式中的数据分发系统中的边缘拉流服务器的工作流程示意图;
[0023] 图5是根据本发明第三实施方式中的数据分发系统中的边缘推流服务器的工作流程示意图;
[0024] 图6是根据本发明第三实施方式中的数据分发系统中的边缘拉流服务器的工作流程示意图;
[0025] 图7是根据本发明第四实施方式中的数据分发方法的流程示意图。

具体实施方式

[0026] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
[0027] 本发明的第一实施方式涉及一种数据分发系统,包括:边缘推流服务器、若干个中心服务器和边缘拉流服务器;边缘推流服务器,用于接收推流器发送的流媒体数据包,对流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;中心服务器,用于对序列化的流媒体数据包进行缓存;如果接收到来自边缘拉流服务器的序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包;边缘拉流服务器,用于将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端,有利于避免直播画面容易出现画面重复、卡顿、不流畅等问题,提高了用户的使用体验。下面对本实施方式的数据分发系统的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
[0028] 本实施方式中的数据分发系统,如图1所示,具体包括:边缘推流服务器101、中心服务器1021、中心服务器1022和边缘拉流服务器103,需要说明的是,本实施方式中的中心服务器的数量可以为若干个,本实施方式中只是以图中的两个为例,在实际应用中并不以此为限。
[0029] 具体的说,主播在推流时,可以由推流器104向边缘推流服务器101发送推流请求,从而在推流器104与边缘推流服务器101之间建立通信连接,推流器104将直播内容以流媒体数据包的形式发送至边缘推流服务器101,边缘推流服务器101对流媒体数据包进行序列化处理,比如说为原来不带序列号的流媒体数据包设置序列号,便于根据不同的序列号直接找到与序列号对应的流媒体数据包。边缘推流服务器101将序列化的流媒体数据包转推给若干个中心服务器,本实施方式中,以边缘推流服务器101将序列化的流媒体数据包转推给图1中的中心服务器1021和中心服务器1022为例,如果实际应用中还有其他中心服务器,那么边缘推流服务器101还将序列化后的流媒体数据包转推给其他中心服务器。
[0030] 需要说明的是,中心服务器在接收到来自边缘推流服务器101转推的序列化的流媒体数据包时,对序列化的流媒体数据包进行缓存。即若干个中心服务器对接收到的序列化的流媒体数据包进行备份缓存,使得其中一个中心服务器接收到边缘拉流服务器103发送的回源请求时,可以根据回源请求发送所缓存的流媒体数据包,即使其中一个中心服务器回源失败,由于流媒体数据包在若干个中心服务器中均有缓存,因此,可以切换中心服务器,由其他中心服务器发送缓存的流媒体数据包。比如说,本实施方式中,中心服务器1021和中心服务器1022在接收到来自边缘推流服务器101转推的序列化的流媒体数据包时,均对接收的流媒体数据包进行缓存以达到对流媒体数据包进行备份缓存的效果。
[0031] 中心服务器可能接收不同类型的回源请求,回源请求的类型可以为普通回源请求和序列化回源请求,普通回源请求可以不携带流媒体数据包的序列号,中心服务器在接收到普通回源请求时,根据快启或关键帧的方式发送缓存的流媒体数据包。序列化回源请求可以携带流媒体数据包的序列号,但在实际应用中,序列化回源请求还可能携带其他信息,对此本实施方式不做具体限定,中心服务器在接收到序列化回源请求时,从序列化回源请求携带的序列号开始,发送缓存的流媒体数据包。
[0032] 进一步说明的是,中心服务器在接收到不同类型的回源请求时,确定待发送的流媒体数据包的起始位置时,所采用的方式不同。如果接收到普通回源请求,则根据普通回源请求确定待发送的流媒体数据包的起始位置,比如说,确定起始位置的方法可以为根据当前时间和快启时间向前查找关键帧所在的位置,将关键帧所在的位置确定为起始位置。如果接收到序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置,比如说,序列化回源请求可以携带流媒体数据包的序列号,中心服务器在接收到序列化回源请求时,将识别到的序列号所属的数据包的位置作为起始位置。
[0033] 还需说明的是,中心服务器在确定了待发送的流媒体数据包的起始位置之后,可以根据起始位置向边缘拉流服务器发送缓存的流媒体数据包,即从起始位置开始发送缓存的流媒体数据包,中心服务器发送的缓存的流媒体数据包即为来自边缘推流服务器101转推的序列化的流媒体数据包。
[0034] 本实施方式中,边缘拉流服务器103在接收到用户终端105的拉流请求时,向中心服务器发送回源请求,请求中心服务器发送所缓存的流媒体数据包。在本实施方式中,边缘拉流服务器103在接收到用户终端105的拉流请求时,可以首先发送普通回源请求,又由于有若干各中心服务器因此需要指定一个中心服务器发送普通回源请求。具体的,可以根据每个中心服务器的域名,结合哈希算法指定一个中心服务器。比如说指定的中心服务器为图1中的中心服务器1022,那么边缘拉流服务器103会向中心服务器1022发送普通回源请求。
[0035] 随后,如果普通回源失败,则可以改变回源请求的类型,发送序列化回源请求,此时如果还是发送普通回源请求,那么不管是哪一个中心服务器,比如图1中的中心服务器1021和中心服务器1022,在接收到普通回源请求后,都会按照普通回源请求确定待发送的流媒体数据包的起始位置,那么边缘拉流服务器103再次接收到的流媒体数据包与第一次普通回源后接收到的流媒体数据包可能衔接不上,出现跳跃或是重复,从而导致直播画面卡顿或重复。因此,在普通回源失败后,需要改变回源请求的类型即发送序列化回源请求,使得接收到序列化回源请求的中心服务器可以根据序列化回源请求携带的序列号确定待发送的流媒体数据包的起始位置,序列化回源请求携带的序列号可以为边缘拉流服务器
103最新接收到的流媒体数据包的序列号。因此,边缘拉流服务器103接收到中心服务器根据序列化回源请求发送的流媒体数据包时,可以和第一次普通回源后接收到的流媒体数据包衔接上,避免流媒体数据包的跳跃或是重复,保障直播画面的流畅性。
[0036] 需要说明的是,由于有多个中心服务器中均缓存有流媒体数据包,因此边缘拉流服务器103,在发送序列化回源请求时,可以切换一个中心服务器,向重新指定的中心服务器发送序列化回源请求,使得可以避免由于原来发送普通回源请求的中心服务器的回源链路不通或是回源链路拥塞等原因造成的回源失败。比如说,边缘拉流服务器103首先向中心服务器1022发送普通回源请求,如果普通回源失败的原因为回源链路不通,即使再次向中心服务器1022发送序列化回源请求,边缘拉流服务器103也会因为回源链路不通无法接收到中心服务器1022发送的流媒体数据包,因此,需要切换中心服务器,向重新指定的中心服务器1021发送序列化回源请求。
[0037] 进一步说明的是,由于边缘推流服务器101一开始对流媒体数据包进行过序列化处理,因此边缘拉流服务器103在接收到流媒体数据包时需要去序列化以还原所接收到的流媒体数据包,将还原后的流媒体数据包发送至用户终端105,用户终端105播放以供用户观看。需要说明的是,边缘拉流服务器103在接收到序列化的流媒体数据包后,就会进行去序列化以还原所接收到的流媒体数据包,并将还原后的流媒体数据包发送至用户终端105。比如说,在接收到中心服务器基于普通回源请求发送的流媒体数据包后,不管普通回源成功与否,可以直接将接收的流媒体数据包还原后发送至用户终端105。而如果普通回源失败,那么边缘拉流服务器103向切换的一中心服务器发送序列化回源请求,在接收到切换的中心服务器发送的流媒体数据包后,将再次接收的流媒体数据包还原后发送至用户终端
105。
[0038] 用户终端105在接收到边缘拉流服务器103发送的序列化的流媒体数据包时进行播放,用户终端105接收到的为序列化的流媒体数据包,即使是基于不同类型的回源请求接收到的流媒体数据包,也可以很好的衔接上,保证直播画面的流畅性,不会出现重复或者卡顿。
[0039] 与现有技术相比,本实施方式中发明人为了解决现有技术中的技术问题,对现有的直播流程进行了分析,经过仔细研究发现出现播放画面重复卡顿的问题的原因是:边缘推流服务器将流媒体数据包发送至不同服务器进行备份缓存时,由于不同发送链路的数据传输速率不同,导致各中心服务器实时缓存的数据不一致,快速启动以及GOP等缓存影响会导致数据重复或者数据丢失。因此,本发明实施方式中,由边缘推流服务器,对流媒体数据包进行序列化处理,使得中心服务器缓存的流媒体数据包为经过序列化的流媒体数据包,在有拉流服务器发送序列化回源请求时,中心服务器容易根据缓存的序列化处理的流媒体数据包找到要发送的流媒体数据包所在的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包,拉流服务器将接收的流媒体数据包去序列化处理后发送给用户终端,有利于提高用户终端播放的视频画面的流畅性,满足用户的观看需求,有效的避免了画面出现卡顿、重复等问题,提高用户的直播观看体验。
[0040] 本发明的第二实施方式涉及一种数据分发系统。第二实施方式是第一实施方式的进一步改进,主要改进之处在于在本发明第二实施方式中,边缘推流服务器,还用于接收推流器发送的元数据数据包,对元数据数据包添加推流时间信息,根据推流时间信息对流媒体数据包进行序列化处理,有利于对流媒体数据包进行有效的序列化处理。
[0041] 本实施方式中边缘推流服务器的工作流程示意图,如图2所示,具体包括:
[0042] 步骤201:接收推流请求。
[0043] 具体的说,边缘推流服务器接收来自推流器的推流请求,与推流器之间建立通信连接。在实际应用中,如果建立连接后,预设时间内没有进行数据交互可以断开连接,预设时间可以由本领域技术人员根据实际需要进行设置,对此,本实施方式不做具体限定。
[0044] 步骤202:接收元数据数据包,对元数据数据包添加推流时间信息。
[0045] 具体的说,边缘推流服务器在接收来自推流器发送的数据包一般会先接收到元数据数据包,在接收到元数据数据包时,对元数据数据包添加推流信息,本实施方式中对元数据数据包添加的推流信息为推流时间信息,在实际应用中,根据需要还可以对元数据数据包添加的推流信息还可以为其他信息。
[0046] 需要说明的是,在实际应用中,推流器在进行推流时,边缘推流服务器首先接收到的数据可能不是元数据数据包,那么边缘推流服务器可以在之后接收到的数据包中识别出元数据数据包,对识别到的元数据数据包添加推流时间信息,也就是说将接收到元数据数据包的时间作为推流时间,并作为推流时间信息添加在元数据数据包中。还可以说明的是,元数据数据包之后接收到的数据包均为流媒体数据包。
[0047] 步骤203:接收流媒体数据包。
[0048] 具体的说,边缘推流服务器接收推流器发送的流媒体数据包,即实际需要在用户终端上播放的音视频数据。
[0049] 步骤204:根据推流时间信息对流媒体数据包进行序列化处理。
[0050] 具体的说,根据推流时间信息可以确定序列化起始点,序列化起始点即为一次推流开始的起始时间点,边缘推流服务器可以根据添加的推流时间信息区分不同的推流,在检测到添加的推流时间信息时,确定是一次推流开始的起始时间点,从该起始时间点开始对后面接收到的流媒体数据包开始进行序列化处理,由于添加了推流时间信息的元数据数据包之后接收的均为流媒体数据包,因此,可以在检测到元数据数据包中添加的推流时间信息时,开始对接下来接收到的流媒体数据包进行序列化处理。
[0051] 在实际应用中,对每个流媒体数据包可以使用串行序列化接口生成每个流媒体数据包的序列化信息,序列化信息可以包括数据包的序列号,系统时间戳,数据格式以及扩展信息等元素,以供后续进行其他的分析,本领域技术人员有时也将序列化信息称为MapBox信息。边缘推流服务器根据序列化起始点和每个流媒体数据包的序列号将流媒体数据包封装为序列化的流媒体数据包,比如说,边缘推流服务器接收到的数据包为50个,那么可以对50个数据包从0开始依次添加0到50的序列号,将添加了序列号的流媒体数据包封装为序列化的流媒体数据包。
[0052] 值得一提的是,在检测到重新推流时,边缘推流服务器对新接收到的流媒体数据包进行序列化处理。多次推流中对元数据数据包添加的推流时间信息可以不同,因此,就算序列化起点跟之前序列号倒退了,也可以区分出来该序列号倒退是因为重新推流导致。比如说,重新序列化的序列化起点可以从0重新开始,也可以从上一次序列化的最后一个数据包的序列号接着向后排序,如上一次序列化最后的序列号为50,那么对于新接收到的流媒体数据包进行序列化处理时,可以以51为序列化起始点开始进行序列化。有利于保证重新推流时,新接收到的流媒体数据包也能进行序列化处理,以满足不同的推流请求下,直播画面均不会出现画面重复、卡顿等问题,提升了用户的观看体验。
[0053] 步骤205:将序列化的流媒体数据包转推给若干个中心服务器。
[0054] 本实施方式中的中心服务器的工作流程示意图,如图3所示,具体包括:
[0055] 步骤301:接收请求。
[0056] 具体的说,中心服务器接收的请求可能来自边缘推流服务器或边缘拉流服务器。当接收到来自边缘推流服务器的请求时,将中心服务器与边缘推流服务器建立通信连接,当接收到来自边缘拉流服务器的请求时,将中心服务器与边缘拉流服务器建立通信连接。
[0057] 步骤302:判断请求类型。
[0058] 具体的说,请求类型可以为:来自边缘推流服务器的推流请求,或来自边缘拉流服务器的回源请求。当请求类型为推流请求时,则执行步骤303,当请求类型为回源请求时,则执行步骤304。
[0059] 步骤303:对边缘推流服务器转推的序列化的流媒体数据包进行缓存。
[0060] 步骤304:判断是否为普通回源请求。
[0061] 具体的说,由于序列化回源请求中携带有序列号,因此判断是否为普通回源请求可以为:判断回源请求中是否携带序列号,如果未携带序列号,则说明是普通回源请求,执行步骤305,否则说明是序列化回源请求,执行步骤306。
[0062] 步骤305:根据当前时间和快启时间查找关键帧的位置,根据关键帧的位置向边缘拉流服务器发送缓存的流媒体数据包。
[0063] 具体的说,在接收到普通回源请求时,与现有的方法类似,根据当前时间和快启时间向前查找关键帧所在的位置,从关键帧所在的位置开始发送缓存的流媒体数据包。
[0064] 步骤306:根据序列化回源请求携带的序列号确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包。
[0065] 具体的说,序列化回源请求可以携带流媒体数据包的序列号,中心服务器可以在序列化回源请求中提取序列号,将序列化回源请求携带的序列号所属的数据包的位置确定为待发送的流媒体数据包的起始位置。比如说,中心服务器中缓存的流媒体数据包为序列号为0到50的50个流媒体数据包,从序列化回源请求中提取的序列号为25,那么中心服务器将25号流媒体数据包确定为待发送的流媒体数据包的起始位置,将25号到50号的流媒体数据包发送至边缘拉流服务器。
[0066] 步骤307:判断请求是否断开。
[0067] 具体的说,如果中心服务器接收的是推流请求,那么判断推流请求是否断开,如果接收的是回源请求,那么判断回源请求是否断开,不论是哪一种请求,如果请求断开则该流程结束,否则执行步骤308。
[0068] 步骤308:继续缓存或发送序列化的流媒体数据包。
[0069] 具体的说,如果接收的是推流请求,那么就继续缓存序列化的流媒体数据包,如果接收的是回源请求,那么就继续发送序列化的流媒体数据。在发送或缓存流媒体数据包时,也可同时执行步骤307。
[0070] 本实施方式中的边缘拉流服务器的工作流程示意图,如图4所示,具体包括:
[0071] 步骤401:接收拉流请求。
[0072] 具体的说,边缘拉流服务器接收来自用户终端的拉流请求,用户终端可以为手机、电脑等智能设备,比如说来自用户的手机播放器发送的拉流请求。
[0073] 步骤402:指定一中心服务器,向指定的中心服务器发送普通回源请求。
[0074] 具体的说,边缘拉流服务器在接收到一普通回源请求时,首先要向指定的一个中心服务器发送普通回源请求,指定一个中心服务器的方法与现有技术中类似,可以根据每个中心服务器的域名,结合哈希算法指定一个中心服务器。
[0075] 步骤403:判断普通回源是否失败。
[0076] 具体的说,普通回源也是接收中心服务器发送的序列化的流媒体数据包,会维护最新的序列号值,当接收的流媒体数据包异常时,可认为普通回源失败,比如说回源链路不通,超过一定时间并未接收到流媒体数据包,或接收到的流媒体数据包不完整。如果判定普通回源失败,则执行步骤404,否则执行步骤405。
[0077] 步骤404:切换所指定的中心服务器,向切换后的中心服务器发送序列化回源请求。
[0078] 具体的说,边缘拉流服务器,由于一直维护着最新的序列号值,因此,在普通回源失败后,可将当前已经收到的最新的序列号作为序列化回源请求要携带的序列号,确定了要携带的序列号后,向切换的中心服务器发送携带序列号的序列化回源请求。
[0079] 在实际应用中,边缘拉流服务器如果检测到序列化回源失败,可以再次切换中心服务器,向若干个中心服务器中还未发送过序列化回源请求和普通回源请求的中心服务器发送序列化回源请求,直至检测到序列化回源成功。
[0080] 步骤405:接收中心服务器发送的流媒体数据包。
[0081] 步骤406:将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包。
[0082] 具体的说,由于接收的流媒体数据包是经过序列化的接收的流媒体数据包,即每个数据包都有对应的序列号,因此将接收的流媒体数据包去序列化可以理解为去掉每个数据包对应的序列号,以还原所接收到的流媒体数据包,以保证还原后的流媒体数据为符合播放协议的数据包。
[0083] 步骤407:将还原后的流媒体数据包发送至用户终端。
[0084] 步骤408:判断拉流请求是否断开。
[0085] 具体的说,如果在一定时间内未进行数据交互,可认为拉流请求已经断开,则断开回源连接,该流程结束,如果拉流请求未断开,则执行步骤405。
[0086] 与现有技术相比,本实施方式中,边缘推流服务器具体用于对每个流媒体数据包使用串行序列化接口生成每个流媒体数据包的序列号,根据序列化起始点和每个流媒体数据包的序列号将流媒体数据包封装为序列化的流媒体数据包。通过串行序列化接口生成的序列号,有利于表征不同流媒体数据包的先后顺序,方便了对流媒体数据包的序列化处理。另外,序列化回源请求携带序列号,中心服务器具体用于,根据序列化回源请求携带的序列号确定待发送的流媒体数据包的起始位置,根据起始位置向边缘拉流服务器发送缓存的流媒体数据包,有利于使中心服务器根据接收到的序列化回源请求快速确定应该发送流媒体数据包的起始位置。
[0087] 本发明的第三实施方式涉及一种数据分发系统。第三实施方式是第二实施方式的进一步改进,主要改进之处在于在本发明第三实施方式中,边缘推流服务器,还用于对序列化的流媒体数据包采用预设的加密算法进行加密,保证流媒体数据包在传输过程中的安全性和保密性。
[0088] 本实施方式中边缘推流服务器的工作流程示意图,如图5所示,具体包括:
[0089] 步骤501:接收推流请求。
[0090] 步骤502:接收元数据数据包,对元数据数据包添加推流时间信息。
[0091] 步骤503:接收流媒体数据包。
[0092] 步骤504:根据推流时间信息对流媒体数据包进行序列化处理。
[0093] 具体的说,本实施方式中步骤501至步骤504与第二实施方式中步骤201至步骤204大致相同,为避免重复在此不再一一赘述。
[0094] 步骤505:对序列化的流媒体数据包采用预设的加密算法进行加密。
[0095] 具体的说,边缘推流服务器中可以预先存储加密算法,在对流媒体数据包序列化处理之后,采用存储的加密算法对流媒体数据包进行加密。
[0096] 步骤506:将加密后的流媒体数据包通过预设的私有协议转推至若干个中心服务器。
[0097] 具体的说,边缘推流服务器将加密后的流媒体数据包通过预设的私有协议转推至若干个中心服务器,私有协议本质上是厂商内部发展、采用的标准,具有封闭性、垄断性、排它性等特点,保证边缘推流服务器向若干个中心服务器传输数据的私密性。一般直播流媒体数据为RTMP或者FLV格式,都是有标准的header+body数据组成,本实施方式的私有协议为将标准的header转换为私有的header,里面包括时间戳、音视频类型、数据长度、序列号信息和扩展字段信息等。
[0098] 本实施方式中边缘拉流服务器的工作流程示意图,如图6所示:
[0099] 步骤601:接收拉流请求。
[0100] 步骤602:指定一中心服务器,向指定的中心服务器发送普通回源请求。
[0101] 步骤603:判断普通回源是否失败,如果判定普通回源失败,则执行步骤604,否则执行步骤605。
[0102] 步骤604:切换所指定的中心服务器,向切换后的中心服务器发送序列化回源请求。
[0103] 具体的说,本实施方式中步骤601至步骤604与第二实施方式中步骤401至步骤404大致相同,为避免重复在此不再一一赘述。
[0104] 步骤605:接收中心服务器发送的加密的流媒体数据包。
[0105] 步骤606:将接收的加密的流媒体数据包采用预设的解密算法进行解密。
[0106] 具体的说,边缘拉流服务器采用的预设的解密算法与边缘推流服务器采用的预设的加密方法对应,可以对边缘推流服务器加密过的流媒体数据包进行解密。
[0107] 步骤607:将解密后的流媒体数据包去序列化以还原所解密的流媒体数据包。
[0108] 步骤608:将还原后的流媒体数据包发送至用户终端。
[0109] 步骤609:判断拉流请求是否断开。
[0110] 具体的说,本实施方式中步骤607至步骤609与第二实施方式中步骤406至步骤408大致相同,不同之处在于本实施方式中边缘拉流服务器接收的流媒体数据包为加密过的流媒体数据包,在第二实施方式中还原的是流媒体数据包,本实施方式中还原的是经过加密处理的流媒体数据包,为避免重复在此不再一一赘述。
[0111] 与现有技术相比,本实施方式中,边缘推流服务器,具体用于将加密后的流媒体数据包通过预设的私有协议转推至若干个中心服务器,通过私有协议有利于保证流媒体数据包在传输过程中的私密性和排他性。边缘推流服务器,还用于在检测到重新推流时,对新接收到的流媒体数据包进行序列化处理。有利于保证重新推流时,新接收到的流媒体数据包也能进行序列化处理,以满足不同的推流请求下,直播画面均不会出现画面重复、卡顿等问题,提升了用户的观看体验。
[0112] 本发明的第四实施方式涉及一种数据分发方法,本实施方式的数据分发方法包括:边缘推流服务器接收推流器发送的流媒体数据包,对流媒体数据包进行序列化处理,将序列化的流媒体数据包转推给若干个中心服务器;中心服务器序列化的流媒体数据包进行缓存;中心服务器如果接收到来自边缘拉流服务器的序列化回源请求,则根据序列化回源请求确定待发送的流媒体数据包的起始位置;中心服务器根据起始位置向边缘拉流服务器发送缓存的流媒体数据包;边缘拉流服务器将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包;边缘拉流服务器将还原后的流媒体数据包发送至用户终端。下面对本实施方式的数据分发系统的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
[0113] 本实施方式中的数据分发方法的流程示意图如图7所示,具体包括:
[0114] 步骤701:推流器向边缘推流服务器接收推流器发送的流媒体数据包。
[0115] 步骤702:边缘推流服务器对流媒体数据包进行序列化处理。
[0116] 步骤703:边缘推流服务器将序列化的流媒体数据包转推给中心服务器。
[0117] 步骤704:中心服务器对接收的流媒体数据包进行缓存。
[0118] 步骤705:用户终端向边缘拉流服务器发送拉流请求。
[0119] 步骤706:边缘拉流服务器向指定一中心服务器。
[0120] 具体的说,图7中的中心服务器下的步骤表示的是需要在中心服务器侧完成的步骤,中心服务器侧可以有若干个中心服务器,因此边缘拉流服务器需要指定其中一个中心服务器发送普通回源请求。具体的,可以根据每个中心服务器的域名,结合哈希算法指定一个中心服务器。
[0121] 步骤707:边缘拉流服务器向指定的中心服务器发送普通回源请求。
[0122] 步骤708:中心服务器根据普通回源请求发送流媒体数据包。
[0123] 具体的说,中心服务器发送的流媒体数据包被边缘拉流服务器接收,边缘拉流服务器接收到序列化的流媒体数据包后,就会执行步骤713。
[0124] 步骤709:边缘拉流服务器判断普通回源是否失败,如果是则执行步骤710,否则执行步骤713。
[0125] 步骤710:边缘拉流服务器切换中心服务器。
[0126] 具体的说,边缘拉流服务器可以在除了已经发送过普通回源请求的中心服务器之外的其他中心服务器中重新指定一个中心服务器。
[0127] 步骤711:边缘拉流服务器向切换的中心服务器发送序列化回源请求。
[0128] 步骤712:中心服务器根据序列化回源请求发送流媒体数据包。
[0129] 步骤713:边缘拉流服务器将接收的流媒体数据包去序列化以还原所接收到的流媒体数据包。
[0130] 步骤714:边缘拉流服务器将还原后的流媒体数据包发送至用户终端。
[0131] 不难发现,本实施方式为与第一实施方式相对应的方法实施例,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
[0132] 本发明的第五实施方式涉及一种数据分发方法。第五实施方式是第四实施方式的进一步改进,主要改进之处在于在本发明第二实施方式中,通过以下方式对流媒体数据包进行序列化处理:接收推流器发送的元数据数据包;对元数据数据包添加推流时间信息;根据推流时间信息对流媒体数据包进行序列化处理,有利于对流媒体数据包进行有效的序列化处理。
[0133] 不难发现,本实施方式为与第二实施方式相对应的方法实施例,本实施方式可与第二实施方式互相配合实施。第二实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第二实施方式中。
[0134] 本发明的第六实施方式涉及一种数据分发系统。第六实施方式是第五实施方式的进一步改进,主要改进之处在于在本发明第五实施方式中,边缘推流服务器对序列化的流媒体数据包采用预设的加密算法进行加密,保证流媒体数据包在传输过程中的安全性和保密性。
[0135] 不难发现,本实施方式为与第三实施方式相对应的方法实施例,本实施方式可与第三实施方式互相配合实施。第三实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第三实施方式中。
[0136] 上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0137] 本发明第七实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
[0138] 本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0139] 本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。