一种直播数据传输的方法、服务器及系统与流程

文档序号:16632903发布日期:2019-01-16 06:44阅读:394来源:国知局
一种直播数据传输的方法、服务器及系统与流程

本发明涉及信息处理领域,尤其涉及一种直播数据传输的方法、服务器及系统。



背景技术:

随着互联网络技术的发展,越来越多的网站通过对网络直播节目的整合,最大限度去满足受众的观看需求。直播视频的特点是具有实时性,所以针对直播视频的音画连贯性要求很高,而服务器故障是不可避免的。在故障切换的过程中,画面和声音会有几秒停顿,恢复后的直播视频有可能后退或者快进,导致错过重要的信息,这往往是无法被接受的。

为了使得直播视频具有较好的连贯性,目前可以采用流媒体直播超文本传输协议(hypertexttransferprotocollivestreaming,hls),hls协议核心分为两部分,一部分是m3u8文件,该m3u8文件里是直播视频流的切片列表信息。另一个是视频的传输流(transportstream,ts)切片文件。hls协议在服务器端将直播数据流存储为连续的,客户端不断地下载并播放服务器端存储的直播数据流,用户就可以看到连贯的直播视频。

然而,采用hls协议虽然可以连贯地播放直播视频,但是需要考虑一个重要的前提,也就是ts切片文件在传输过程中不能出现丢失。在实际应用中,可能会因为网络质量不稳定等问题导致ts切片文件在传输的过程中发生丢失,从而造成直播视频播放不顺畅。



技术实现要素:

本发明实施例提供了一种直播数据传输的方法、服务器及系统,当第一服务器出现故障时,可以切换至第二服务器继续发送直播数据包,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

有鉴于此,本发明第一方面提供了一种直播数据传输的方法,该方法应用于直播数据传输系统,所述直播数据传输系统包含第一服务器以及第二服务器,其中,所述第一服务器与所述第二服务器分别用于存储待发送的直播数据包,所述方法包括:

当所述第一服务器发生故障时,获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

向所述客户端发送所述第二直播数据包。

本发明第二方面提供了一种服务器,所述服务器应用于直播数据传输系统,所述直播数据传输系统还包括第一服务器,其中,所述第一服务器与所述服务器分别用于存储待发送的直播数据包,所述服务器包括:

第一获取模块,用于当所述第一服务器发生故障时,获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

第一确定模块,用于根据所述第一获取模块获取的所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

发送模块,用于向所述客户端发送所述第一确定模块确定的所述第二直播数据包。

本发明第三方面提供了一种服务器,所述服务器应用于直播数据传输系统,所述直播数据传输系统还包括第一服务器,其中,所述第一服务器与所述服务器分别用于存储待发送的直播数据包,所述服务器包括:存储器、处理器以及总线系统;

其中,所述存储器用于存储程序;

所述处理器用于执行所述存储器中的程序,包括如下步骤:

当所述第一服务器发生故障时,获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

向所述客户端发送所述第二直播数据包;

所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。

本发明第四方面提供了一种直播数据传输系统,所述直播数据传输系统包含第一服务器以及第二服务器,其中,所述第一服务器与所述第二服务器分别用于存储待发送的直播数据包,所述直播数据传输系统包括:

当所述第一服务器发生故障时,所述第二服务器获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

所述第二服务器根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

所述第二服务器向所述客户端发送所述第二直播数据包。

本发明的第五方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中,提供了一种直播数据传输的方法,该方法应用于直播数据传输系统,直播数据传输系统包含第一服务器以及第二服务器,第一服务器与第二服务器分别用于存储待发送的直播数据包,当第一服务器发生故障时,获取第一服务器的第一直播数据包,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号,根据第一直播数据包中携带的第一序号确定第二直播数据包,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号,向客户端发送第二直播数据包。通过上述方式,在第一服务器向客户端传输直播数据包的过程中,如果因为网络质量不稳定等因素导致第一服务器出现故障,则可以切换至第二服务器继续进行直播数据包的发送,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

附图说明

图1为本发明实施例中直播数据传输系统的架构图;

图2为本发明实施例中直播数据传输的方法一个交互实施例示意图;

图3为本发明实施例中直播数据传输的方法一个实施例示意图;

图4为现有技术中直播数据包的结构示意图;

图5为本发明实施例中直播数据包的结构示意图;

图6为本发明实施例中信号源转码的一个流程示意图;

图7为本发明实施例中关键帧拼接的一个实施例示意图;

图8为本发明应用场景中切换服务器的一个拓扑示意图;

图9为本发明实施例中服务器一个实施例示意图;

图10为本发明实施例中服务器另一个实施例示意图;

图11为本发明实施例中服务器另一个实施例示意图;

图12为本发明实施例中服务器另一个实施例示意图;

图13为本发明实施例中服务器另一个实施例示意图;

图14为本发明实施例中服务器另一个实施例示意图;

图15为本发明实施例中服务器一个结构示意图;

图16为本发明实施例中直播数据传输系统一个实施例示意图。

具体实施方式

本发明实施例提供了一种直播数据传输的方法、服务器及系统,当第一服务器出现故障时,可以切换至第二服务器继续发送直播数据包,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

应理解,本发明实施例主要应用于视频直播的场景,直播平台目前已经承担了内部直播和云直播等众多直播产品,内部直播主要包括体育节目直播、阅兵式直播、春节联欢晚会直播、空间直播以及现场直播等。云直播包括“快手”直播、“斗鱼”直播以及“熊猫”直播等。本发明可以应用于直播平台的所有业务上,在观看体验上得到大幅度的提升,而且能够覆盖个人计算机(personalcomputer,pc)、安卓系统终端、苹果公司移动操作系统(iphoneoperationsystem,ios)终端、电视以及超级文本标记语言(hypertextmarkuplanguage,html)5的终端等。

请参阅图1,图1为本发明实施例中直播数据传输系统的架构图,如图所示,收流服务器、转码机、出流服务器以及边缘节点可以集成于同一台服务器,这里拆分为多个服务器便于进行功能介绍,但并不应构成对本发明的限定。其中,收流服务器、转码机、出流服务器以及边缘节点均有互备设备。具体地,收流服务器1的互备设备为收流服务器2,收流服务器为接收主播推流的上传服务器。转码机1的互备设备为转码机2,转码机用于对直播数据流进行转码,可以得到多个图像帧,直播数据流包含多个直播数据包。出流服务器1的互备设备为出流服务器2,出流服务器提供给边缘节点由转码机转发后得到的数据。边缘节点1的互备设备为边缘节点2,边缘节点是离用户最近的一个节点,进行“最后一公里”加速。

为了便于理解,请参阅图2,图2为本发明实施例中直播数据传输的方法一个交互实施例示意图,如图所示,具体为:

步骤101中,第一服务器向客户端发送第一直播数据包,在第一服务器和第二服务器侧均存储了一致的直播数据包,然而,第一直播数据包存储在第一服务器中,第二直播数据包存储在第二服务器中,且两个服务器分别存储了至少一个直播数据包;

步骤102中,当第一服务器出现故障时,也就意味着第一服务器不能再向客户端继续发送直播数据包,于是,需要由第二服务器来代替第一服务器进行直播数据包的传输;

步骤103中,当第一服务器出现问题时,另第二服务器可以根据预设规则立即发现故障,并切换至第二服务器进行直播数据包的传输。第二服务器需要先获取第一服务器发送的第一直播数据包,这样才能实现无缝拼接;

步骤104中,第二服务器可以根据第一直播数据包的序号确定第二直播数据包,其中,第二直播数据包是第一直播数据包之后的一个相邻直播数据包,此外,第二直播数据包的第一帧图像需要与第一直播数据包的最后一帧图像具有连贯性,通常情况下,第二直播数据包的第一帧图像为关键帧,第一直播数据包的最后一帧图像也为关键帧;

步骤105中,第二服务器向客户端发送第二直播数据包。

下面将从第二服务器的角度,对本发明中直播数据传输的方法进行介绍,请参阅图3,图3为本发明实施例中直播数据传输的方法一个实施例包括:

201、当第一服务器发生故障时,获取第一服务器的第一直播数据包,其中,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号;

本实施例中,主要应用于直播数据传输系统,该直播数据传输系统包含第一服务器以及第二服务器,两者互为备份设备,其中,第一服务器与第二服务器分别用于存储待发送的直播数据包。

在第一服务器发生故障时,可以向第二服务器发送故障消息,也可以由第二服务器主动探测到第一服务器出现故障,然后第二服务器将获取第一服务器发送的第一直播数据包,这里的第一直播数据包可以认为是第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带了第一序号。通常情况下,存储于第一服务器和第二服务器中的各个数据包都分别具有一个序号,且这些序号具有连续性,例如,序号1、序号2…序号n。

202、根据第一直播数据包中携带的第一序号确定第二直播数据包,其中,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号;

本实施例中,第二服务器根据第一序号找到与之连续的第二序号,将携带第二序号的直播数据包确定为第二直播数据包。可以理解的是,第一服务器与第二服务器对直播数据包的编号都是一致的,这样才能准确地定位到第二服务器中的第二直播数据包。

203、向客户端发送第二直播数据包,其中,第二直播数据包为第二服务器发送至客户端的第一个直播数据包。

本实施例中,第二服务器代替第一服务器继续向客户端发送第二直播数据包,第二直播数据包为第二服务器发送至客户端的第一个直播数据包。以此,实现第一直播数据包与第二直播数据包的拼接。

本发明实施例中,提供了一种直播数据传输的方法,该方法应用于直播数据传输系统,直播数据传输系统包含第一服务器以及第二服务器,第一服务器与第二服务器分别用于存储待发送的直播数据包,当第一服务器发生故障时,获取第一服务器的第一直播数据包,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号,根据第一直播数据包中携带的第一序号确定第二直播数据包,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号,向客户端发送第二直播数据包,第二直播数据包为第二服务器发送至客户端的第一个直播数据包。通过上述方式,在第一服务器向客户端传输直播数据包的过程中,如果因为网络质量不稳定等因素导致第一服务器出现故障,则可以切换至第二服务器继续进行直播数据包的发送,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

可选地,在上述图3对应的实施例的基础上,本发明实施例提供的直播数据传输的方法第一个可选实施例中,根据第一直播数据包中携带的第一序号确定第二直播数据包,可以包括:

根据第一序号确定第二序号,其中,第一序号为n,第二序号为(n+1),n为正数;

获取第二序号所对应的第二直播数据包。

本实施例中,第二服务器获取第一直播数据包中携带的第一序号,第一序号为n,n为正数,根据第一序号获取第二序号,第二序号可以是(n+1),也可以理解为第二序号就是紧接着第一序号的后一个序号。第二服务器获取第二序号所对应的第二直播数据包。

为了便于说明,下面将通过表1来介绍第一服务器与第二服务器分别存储的直播数据包编号方式。

表1

若第一服务器的第一直播数据包序号为3,则第二服务器的第二直播数据包序号为4。然而,需要说明的是,表1中对直播数据包的编号仅为一个示意,在实际应用中,还可以有其他的编号方式,此处不作限定。

在本发明中,第一直播数据包与第二直播数据包的结构相同,而与现有的直播数据包结构不同,请参阅图4,图4为现有技术中直播数据包的结构示意图,如图所示,图4为普通流媒体格式(flashvideo,flv)视频协议的包结构,包括flv头部和多个标签(tag),在flv头部包含了flv标识、版本标识、视音频标识以及包头大小。标签中包括标签类、数据大小、时间戳和数据流标识号(identification,id)。tag是视频或音频的内容,无法通过现有的信息置顶每个帧的连续性,在发生故障切换时,系统不知道视频流该从什么地方开始拼接。

而本发明中的直播数据包具有不同的结构,请参阅图5,图5为本发明实施例中直播数据包的结构示意图,如图所示,我们通过自定义的私有协议头,打包视频分片,在每一个视频帧或音频帧前面加上自定义的协议头部,并进行标号,以便接收端可以进行有序的拼接,序列号要严格递增。可以理解的是,不从0开始。

其次,本发明实施例中,服务器可以根据第一序号确定第二序号,且第二序号为第一序号之后的一个序号,由于直播数据包是按照序号从小到大的顺序进行排列的,因此根据序号的大小就能准确地找到第一直播数据包之后的一个数据包,即获取第二直播数据包。通过上述方式,可以更准确地定位第二直播数据包,并且捕捉到距离第一直播数据包最近的下一个直播数据包,从而能够在视频直播的过程中防止直播数据包丢失,提升视频播放的流畅度。

可选地,在上述图3以及图3对应的第一个实施例的基础上,本发明实施例提供的直播数据传输的方法第二个可选实施例中,获取第一服务器的第一直播数据包,可以包括:

获取第一直播数据包中最后一帧图像所对应的第一时间戳;

根据第一直播数据包中携带的第一序号确定第二直播数据包之前,还可以包括:

根据第一时间戳计算第二时间戳,其中,第二时间戳用于确定第二直播数据包的第一帧图像;

根据第一直播数据包中携带的第一序号确定第二直播数据包,可以包括:

根据第二时间戳获取第二直播数据包的第一帧图像;

根据第一序号以及第二直播数据包的第一帧图像,确定第二数据包。

本实施例中,第二服务器首先获取来自第一服务器的第一直播数据包,并从第一直播数据包中提取最后一帧图像所对应的第一时间戳,与第一时间戳相邻的时间戳即为第二时间戳。第二服务器根据第二时间戳确定第二直播数据包中的第一帧图像。假设第一直播数据包的序号为n号,且第一直播数据包最后一帧的时间戳为a,那么首先需要找到序号为(n+1)号的第二直播数据包,然后根据第一时间戳a确定第二时间戳为b,于是,第二服务器将第二时间戳对应的图像帧作为第二直播数据包的第一帧。

其次,本发明实施例中,服务器首先获取第一直播数据包中最后一帧图像所对应的第一时间戳,进而可以根据第一时间戳计算第二时间戳,再根据第二时间戳获取第二直播数据包的第一帧图像,最后服务器可以根据第一序号以及第二直播数据包的第一帧图像,确定第二数据包。通过上述方式,可以利用相邻时间戳实现无缝拼接,而相邻时间戳往往间隔非常短的时间,因此可以提升直播视频的流畅度,增强方案的实用性。

可选地,在上述图3、图3对应的第一个或第二个实施例的基础上,本发明实施例提供的直播数据传输的方法第三个可选实施例中,根据第一时间戳计算第二时间戳,可以包括:

按照如下公式计算第二时间戳:

t2=t1±a;

其中,t2表示第二时间戳,t1表示第一时间戳,a表示时间戳间隔常数。

本实施例中,将具体介绍根据第一时间戳计算第二时间戳的方式,目前存在两种可行的方式:

第一种方式,计算第一时间戳的后一个相邻时间戳;

采用如下公式可以计算第一时间戳的后一个相邻时间戳:

t2=t1+a;

其中,t2表示第二时间戳,t1表示第一时间戳,a表示时间戳间隔常数。a为大于0的正数,假设a为0:00:033,t1为1:00:000,那么t2为1:00:033。

第二种方式,计算第一时间戳的前一个相邻时间戳;

采用如下公式可以计算第一时间戳的前一个相邻时间戳:

t2=t1+a;

其中,t2表示第二时间戳,t1表示第一时间戳,a表示时间戳间隔常数。a为大于0的正数,假设a为0:00:033,t1为1:00:099,那么t2为1:00:066。

再次,本发明实施例中,限定了计算第二时间戳的方式,第二时间戳是距离第一时间戳最近的一个时间戳,既可以是第一时间戳的前一个时间戳,也可以是第一时间戳的后一个时间戳。通过上述方式,服务器能够更准确的捕捉第二时间戳,从而获取到第二时间戳对应的目标图像帧,由此提升方案的实用性和可行性。

可选地,在上述图3以及图3对应的第一个至第三个中任一项实施例的基础上,本发明实施例提供的直播数据传输的方法第四个可选实施例中,根据第一直播数据包中携带的第一序号确定第二直播数据包之前,还可以包括:

获取第二时间戳对应的目标图像帧,其中,目标图像帧携带帧类标识;

若帧类标识指示目标图像帧为关键帧,则确定目标图像帧为第二直播数据包中的第一帧图像。

本实施例中,第二服务器在确定第二直播数据包之前,需要先根据第一时间戳计算第二时间戳,然后找出第二时间戳所对应的图像帧,该图像帧即为目标图像帧,其中,目标图像帧中携带了帧类标识,帧类标识用于指示目标图像帧的帧类型,帧类型包括关键帧类型和非关键帧类型。如果帧类标识指示目标图像帧为关键帧,则将该目标图像帧作为第二直播数据包的第一帧图像,从而实现关键帧的无缝拼接。

关键帧通常采用i帧来表示,关键帧可以理解为这一帧画面的完整保留,解码时只需要关键帧数据就可以完成(因为包含完整画面)。而非关键帧通常采用p帧来表示,非关键帧只需要解码器把前一个画面缓存一下,遇到非关键帧时就使用之前缓存的画面即可,如果视频流只有i帧和p帧,解码器可以不管后面的数据边读边解码,线性前进,非常流畅。

进一步地,本发明实施例中,服务器在根据第一直播数据包中携带的第一序号确定第二直播数据包之前,还需要先取第二时间戳对应的目标图像帧,如果该目标图像帧为关键帧,则服务器便可以确定目标图像帧为第二直播数据包中的第一帧图像。通过上述方式,能够按照时间戳找到最近的关键帧进行拼接,以此实现视频关键帧的无缝拼接,减少直播视频的卡顿,大幅度地提升了直播视频的流畅度。

可选地,在上述图3以及图3对应的第一个至第四个中任一项实施例的基础上,本发明实施例提供的直播数据传输的方法第五个可选实施例中,获取第二时间戳对应的目标图像帧之后,还可以包括:

若帧类标识指示目标图像帧为非关键帧,则根据第二时间戳计算第三时间戳;

若第三时间戳对应的图像帧为关键帧,则确定第三时间戳对应的图像帧为第二直播数据包中的第一帧图像。

本实施例中,第二服务器在获取第二时间戳所对应的目标图像帧之后,首先需要得到该目标图像帧的帧类标识,如果该帧类标识指示目标图像帧为非关键帧,则根据第二时间戳计算第三时间戳,再继续监测第三时间戳对应的图像帧是否为关键帧,如果是,则将这一关键帧作为第二直播数据包的第一帧图像。

请参阅图6,图6为本发明实施例中信号源转码的一个流程示意图,在对信号源进行转码后分别得到两路直播视频流,本方案需要将这两路直播视频流进行对接,具体地,请继续参阅图7,图7为本发明实施例中关键帧拼接的一个实施例示意图,如图所示,从转码机1转码得到的i帧时间戳为1:00:000,而最后一帧i帧时间戳为1:05:000,而从转码机2转码得到的i帧时间戳为1:05:033,而最后一帧i帧时间戳为1:10:033,拼接后最接近的两个关键帧连接在一起。一路视频流通常需要主备两台转码机,但是即使输入同一路视频,通过不同转码机后,出来的视频流时间序列也是不能保证一致的,比如相同画面的时间戳不同,或者同一画面转码机1出来的是关键帧,转码机2出来的是非关键帧。这种情况下,需要按照时间戳找到最近的关键帧进行拼接。

更进一步地,本发明实施例中,还介绍了另一种情况,即在服务器获取第二时间戳对应的目标图像帧之后,若该目标图像帧为非关键帧,则需要进一步根据第二时间戳计算第三时间戳,若第三时间戳对应的图像帧为关键帧,则确定第三时间戳对应的图像帧为第二直播数据包中的第一帧图像。通过上述方式,即便距离第一时间戳最近的第二时间戳所对应的图像帧为非关键帧,也可以继续查找距离第一时间戳最接近的关键帧,从而实现视频关键帧的无缝拼接,减少直播视频的卡顿,大幅度地提升了直播视频的流畅度。

为便于理解,下面可以以一个具体应用场景对本发明中直播数据传输的过程进行详细描述,请参阅图8,图8为本发明应用场景中切换服务器的一个拓扑示意图,具体为:

源站1可以认为是第一服务器,源站2可以认为是第二服务器,假设检测到源站1发生了故障,则系统将自动切换到备份服务器,即切换到源站2进行直播数据包的传输。源站1已经发送两个分片(即直播数据包),包括数据1和对应的私有协议头序列号1,以及数据2和对应的私有协议头序列号2,这个时候,源站1出现故障,于是源站2将接着序列号2的数据继续发送下一个分片,即选择数据3和对应的私有协议头序列号3作为后一个分片,从而实现无缝拼接的过程。

下面对本发明中的服务器进行详细描述,请参阅图9,本发明实施例中的服务器应用于直播数据传输系统,该直播数据传输系统还包括第一服务器,其中,第一服务器与服务器分别用于存储待发送的直播数据包,服务器30包括:

第一获取模块301,用于当所述第一服务器发生故障时,获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

第一确定模块302,用于根据所述第一获取模块301获取的所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

发送模块303,用于向所述客户端发送所述第一确定模块302确定的所述第二直播数据包。

本实施例中,当第一服务器发生故障时,第一获取模块301获取第一服务器的第一直播数据包,其中,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号,第一确定模块302根据第一获取模块301获取的第一直播数据包中携带的第一序号确定第二直播数据包,其中,第二直播数据包中携带第二序号,第二序号为所述第一序号之后连续的一个序号,发送模块303向客户端发送第一确定模块302确定的第二直播数据包。

本发明实施例中,提供了一种服务器,具体为第二服务器,当第一服务器发生故障时,获取第一服务器的第一直播数据包,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号,根据第一直播数据包中携带的第一序号确定第二直播数据包,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号,向客户端发送第二直播数据包。通过上述方式,在第一服务器向客户端传输直播数据包的过程中,如果因为网络质量不稳定等因素导致第一服务器出现故障,则可以切换至第二服务器继续进行直播数据包的发送,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

可选地,在上述图9所对应的实施例的基础上,请参阅图10,本发明实施例提供的服务器30的另一实施例中,

所述第一确定模块302包括:

第一确定单元3021,用于根据所述第一序号确定所述第二序号,其中,所述第一序号为n,所述第二序号为(n+1),所述n为正数;

第一获取单元3022,用于获取所述第一确定单元3021确定的所述第二序号所对应的所述第二直播数据包。

其次,本发明实施例中,服务器可以根据第一序号确定第二序号,且第二序号为第一序号之后的一个序号,由于直播数据包是按照序号从小到大的顺序进行排列的,因此根据序号的大小就能准确地找到第一直播数据包之后的一个数据包,即获取第二直播数据包。通过上述方式,可以更准确地定位第二直播数据包,并且捕捉到距离第一直播数据包最近的下一个直播数据包,从而能够在视频直播的过程中防止直播数据包丢失,提升视频播放的流畅度。

可选地,在上述图9所对应的实施例的基础上,请参阅图11,本发明实施例提供的服务器30的另一实施例中,

所述第一获取模块301包括:

第二获取单元3011,用于获取所述第一直播数据包中最后一帧图像所对应的第一时间戳;

所述服务器30还包括:

第一计算模块304,用于在所述第一确定模块302根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包之前,根据所述第一时间戳计算第二时间戳,其中,所述第二时间戳用于确定所述第二直播数据包的第一帧图像;

所述第一确定模块302包括:

第三获取单元3023,用于根据所述第一计算模块304计算得到的所述第二时间戳,获取所述第二直播数据包的第一帧图像;

第二确定单元3024,用于根据所述第一序号以及所述第三获取单元3023获取的所述第二直播数据包的第一帧图像,确定所述第二数据包。

其次,本发明实施例中,服务器首先获取第一直播数据包中最后一帧图像所对应的第一时间戳,进而可以根据第一时间戳计算第二时间戳,再根据第二时间戳获取第二直播数据包的第一帧图像,最后服务器可以根据第一序号以及第二直播数据包的第一帧图像,确定第二数据包。通过上述方式,可以利用相邻时间戳实现无缝拼接,而相邻时间戳往往间隔非常短的时间,因此可以提升直播视频的流畅度,增强方案的实用性。

可选地,在上述图11所对应的实施例的基础上,请参阅图12,本发明实施例提供的服务器30的另一实施例中,

所述第一计算模块304包括:

计算单元3041,用于按照如下公式计算所述第二时间戳:

t2=t1±a;

其中,所述t2表示所述第二时间戳,所述t1表示所述第一时间戳,所述a表示时间戳间隔常数。

再次,本发明实施例中,限定了计算第二时间戳的方式,第二时间戳是距离第一时间戳最近的一个时间戳,既可以是第一时间戳的前一个时间戳,也可以是第一时间戳的后一个时间戳。通过上述方式,服务器能够更准确的捕捉第二时间戳,从而获取到第二时间戳对应的目标图像帧,由此提升方案的实用性和可行性。

可选地,在上述图9至图12中任一项所对应的实施例的基础上,请参阅图13,本发明实施例提供的服务器30的另一实施例中,

所述服务器30还包括:

第二获取模块305,用于在所述第一确定模块302根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包之前,获取所述第二时间戳对应的目标图像帧,其中,所述目标图像帧携带帧类标识;

第二确定模块306,用于若所述帧类标识指示所述第二获取模块305获取的所述目标图像帧为关键帧,则确定所述目标图像帧为所述第二直播数据包中的第一帧图像。

进一步地,本发明实施例中,服务器在根据第一直播数据包中携带的第一序号确定第二直播数据包之前,还需要先取第二时间戳对应的目标图像帧,如果该目标图像帧为关键帧,则服务器便可以确定目标图像帧为第二直播数据包中的第一帧图像。通过上述方式,能够按照时间戳找到最近的关键帧进行拼接,以此实现视频关键帧的无缝拼接,减少直播视频的卡顿,大幅度地提升了直播视频的流畅度。

可选地,在上述图13所对应的实施例的基础上,请参阅图14,本发明实施例提供的服务器30的另一实施例中,

所述服务器30还包括:

第二计算模块307,用于在所述第二获取模块305获取所述第二时间戳对应的目标图像帧之后,若所述帧类标识指示所述目标图像帧为非关键帧,则根据所述第二时间戳计算第三时间戳;

第三确定模块308,用于若是第二计算模块307计算得到的所述第三时间戳对应的图像帧为关键帧,则确定所述第三时间戳对应的图像帧为所述第二直播数据包中的第一帧图像。

更进一步地,本发明实施例中,还介绍了另一种情况,即在服务器获取第二时间戳对应的目标图像帧之后,若该目标图像帧为非关键帧,则需要进一步根据第二时间戳计算第三时间戳,若第三时间戳对应的图像帧为关键帧,则确定第三时间戳对应的图像帧为第二直播数据包中的第一帧图像。通过上述方式,即便距离第一时间戳最近的第二时间戳所对应的图像帧为非关键帧,也可以继续查找距离第一时间戳最接近的关键帧,从而实现视频关键帧的无缝拼接,减少直播视频的卡顿,大幅度地提升了直播视频的流畅度。

图15是本发明实施例提供的一种服务器结构示意图,该服务器400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)422(例如,一个或一个以上处理器)和存储器432,一个或一个以上存储应用程序442或数据444的存储介质430(例如一个或一个以上海量存储设备)。其中,存储器432和存储介质430可以是短暂存储或持久存储。存储在存储介质430的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器422可以设置为与存储介质430通信,在服务器400上执行存储介质430中的一系列指令操作。

服务器400还可以包括一个或一个以上电源426,一个或一个以上有线或无线网络接口450,一个或一个以上输入输出接口458,和/或,一个或一个以上操作系统441,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

上述实施例中由服务器所执行的步骤可以基于该图15所示的服务器结构。

其中,cpu422用于执行如下步骤:

当所述第一服务器发生故障时,获取所述第一服务器的第一直播数据包,其中,所述第一直播数据包为所述第一服务器发送至客户端的最后一个直播数据包,所述第一直播数据包中携带第一序号;

根据所述第一直播数据包中携带的所述第一序号确定第二直播数据包,其中,所述第二直播数据包中携带第二序号,所述第二序号为所述第一序号之后连续的一个序号;

向所述客户端发送所述第二直播数据包。

可选地,cpu422具体用于执行如下步骤:

根据所述第一序号确定所述第二序号,其中,所述第一序号为n,所述第二序号为(n+1),所述n为正数;

获取所述第二序号所对应的所述第二直播数据包。

可选地,cpu422具体用于执行如下步骤:

获取所述第一直播数据包中最后一帧图像所对应的第一时间戳;

根据所述第一时间戳计算第二时间戳,其中,所述第二时间戳用于确定所述第二直播数据包的第一帧图像;

根据所述第二时间戳获取所述第二直播数据包的第一帧图像;

根据所述第一序号以及所述第二直播数据包的第一帧图像,确定所述第二数据包。

可选地,cpu422具体用于执行如下步骤:

按照如下公式计算所述第二时间戳:

t2=t1±a;

其中,所述t2表示所述第二时间戳,所述t1表示所述第一时间戳,所述a表示时间戳间隔常数。

可选地,cpu422还用于执行如下步骤:

获取所述第二时间戳对应的目标图像帧,其中,所述目标图像帧携带帧类标识;

若所述帧类标识指示所述目标图像帧为关键帧,则确定所述目标图像帧为所述第二直播数据包中的第一帧图像。

可选地,cpu422还用于执行如下步骤:

若所述帧类标识指示所述目标图像帧为非关键帧,则根据所述第二时间戳计算第三时间戳;

若所述第三时间戳对应的图像帧为关键帧,则确定所述第三时间戳对应的图像帧为所述第二直播数据包中的第一帧图像。

请参阅图16,图16为本发明实施例中直播数据传输系统一个实施例示意图,直播数据传输系统包含第一服务器501以及第二服务器502,其中,第一服务器501与第二服务器502分别用于存储待发送的直播数据包,直播数据传输系统包括:

当第一服务器501发生故障时,第二服务器502获取第一服务器501的第一直播数据包,其中,第一直播数据包为第一服务器501发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号;

第二服务器502根据第一直播数据包中携带的第一序号确定第二直播数据包,其中,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号;

第二服务器502向客户端发送第二直播数据包,其中,第二直播数据包为第二服务器502发送至客户端的第一个直播数据包。

本发明实施例中,提供了一种直播数据传输系统,该系统包含第一服务器以及第二服务器,第一服务器与第二服务器分别用于存储待发送的直播数据包,当第一服务器发生故障时,获取第一服务器的第一直播数据包,第一直播数据包为第一服务器发送至客户端的最后一个直播数据包,第一直播数据包中携带第一序号,根据第一直播数据包中携带的第一序号确定第二直播数据包,第二直播数据包中携带第二序号,第二序号为第一序号之后连续的一个序号,向客户端发送第二直播数据包,第二直播数据包为第二服务器发送至客户端的第一个直播数据包。通过上述方式,在第一服务器向客户端传输直播数据包的过程中,如果因为网络质量不稳定等因素导致第一服务器出现故障,则可以切换至第二服务器继续进行直播数据包的发送,且第二服务器发送的第一个直播数据包与第一服务器发送的最后一个直播数据包是连续的,使得客户端接收到直播数据包也是连续的,从而大幅提升了直播视频的播放流畅度。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1