一种视频播放的方法和装置与流程

文档序号:17299649发布日期:2019-04-03 04:49阅读:254来源:国知局
一种视频播放的方法和装置与流程

本申请涉及视频处理技术领域,特别涉及一种视频播放的方法和装置。



背景技术:

随着互联网飞速发展,网络直播迅速普及。网络直播是指多个用户可以同一时间透过网络系统通过直播平台观看视频的方式。

直播系统一般包括几个部分:客户端推流→cdn(contentdeliverynetwork,内容分发网络)接入→云端转码→cdn分发→播放器播放。

网络直播的首屏时间是指从客户点击直播间链接到看到直播间视频画面之间的时间间隔。首屏时间主要由以下几部分组成:网络消息通讯时间,服务器与播放终端之间的媒体数据传输时间,终端播放器解码与渲染时间。这里面媒体数据传输时间占了绝大部分时长。

为了减少首屏时间,现在常用的做法是:增加关键帧的密度。

一个视频流要正确解码,从idr(instantaneousdecodingrefresh,即时解码刷新)帧开始。

假设直播流的gop(groupofpictures,画面组)周期为t,idr帧分布在时间点0,t,2t,…kt,某个时刻点t0∈(0,t),如果接收到终端的播放请求,cdn分发服务器会从时刻0开始向终端发送数据,终端收到数据进行解码播放(如图1所示)。终端有两种显示方式:

一种是直接从idr帧开始播,这时候首屏时间会很短,但是直播延时会很大,直播延时是指从主播推流端录制画面到终端用户看到对应画面之间的时间间隔。图1的例子直播延时至少为t/2。也就是说如果5秒一个关键帧,则直播延时至少有2.5秒;

另一种选择是从idr帧开始解码,但是t0时刻前的帧只解码不播放,从t0时间才开始播放,这时候的首屏时间是0到t0时刻数据的下载时间。假设用户的下载速度是3mbps,直播流的码率是2mbps,那么用户下载数据用的时间就是这样,首屏时间就是直播延时也是

显然,不论是哪种显示方式,首屏时间和直播延时都随着关键帧间隔的减小而减少。但是,增加关键帧密度会破坏编码器的帧间预测过程,从而导致视频码率显著升高,比如质量相当的gop,1秒比10秒的流码率要大20%~30%。所以,增加关键帧密度对直播流量成本的代价是巨大的。

综上所述,目前无法在视频码率不显著提升的前提下,降低视频直播的首屏时间和直播延时。



技术实现要素:

本申请提供一种视频播放的方法和装置,用以解决现有技术中存在的无法在视频码率不显著提升的前提下,降低视频直播的首屏时间和直播延时的问题。

本申请实施例提供的一种视频播放的方法,该方法包括:

接收到终端的播放请求;

获取第一视频数据;

使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

向所述终端推送替换后的第一视频数据。

本申请实施例提供的另一种视频播放的方法,该方法包括:

向网络侧发送播放请求;

接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

本申请实施例提供的一种视频播放的装置,该装置包括:

请求接收模块,用于接收到终端的播放请求;

获取模块,用于获取第一视频数据;

处理模块,用于使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

推送模块,用于向所述终端推送替换后的第一视频数据。

本申请实施例提供的另一种视频播放的装置,该装置包括:

发送模块,用于向网络侧发送播放请求;

数据接收模块,用于接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

本申请实施例提供的另一种视频播放的装置,该装置包括:

至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行下列过程:

接收到终端的播放请求;

获取第一视频数据;

使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

向所述终端推送替换后的第一视频数据。

本申请实施例提供的另一种视频播放的装置,该装置包括:

至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行下列过程:

向网络侧发送播放请求;

接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

本申请实施例提供的一种存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时实现上述本申请实施例视频播放的方法。

本发明实施例的第一视频数据不用改变,通过在接收到终端的播放请求后,使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧,由于通过增加额外的目标帧的数量实现视频帧替换,这样在增加目标帧的数量的前提下也不会导致第一视频数据的码率显著提升,从而在视频码率不显著提升的前提下,降低了视频直播的首屏时间和直播延时。

附图说明

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

图1为本申请实施例直播框架示意图;

图2为本申请实施例视频播放的方法流程示意图;

图3为本申请实施例采用p帧生成目标帧的示意图;

图4为本申请实施例采用b帧生成目标帧的示意图;

图5为本申请实施例第一种帧替换的示意图;

图6为本申请实施例第二种帧替换的示意图;

图7为本申请实施例视频处理节点的框架示意图;

图8为本申请实施例视频播放的完整方法流程示意图;

图9为本申请实施例另一种视频播放的方法;

图10为本申请实施例第一种视频播放的装置结构示意图;

图11为本申请实施例第二种视频播放的装置结构示意图;

图12为本申请实施例第三种视频播放的装置结构示意图;

图13为本申请实施例第四种视频播放的装置结构示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

本申请实施例在原有第一视频数据基础上,增加了一个第二视频数据。这个第二视频数据中包括至少一个目标帧,该目标帧采用帧内独立编码。这些目标帧是根据第一视频数据上的原始帧生成的。

在用户需要观看直播时,根据收到的播放请求的时刻找到距离该时刻最近且位于该时刻之前的独立编码的视频帧,如果该独立编码的视频帧在第二视频数据中,则替换第一视频数据中对应位置上的原始帧,并从目标帧开始进行推送。

本发明实施例的第一视频数据不用改变,通过在接收到终端的播放请求后,使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧,由于通过增加额外的目标帧的数量实现视频帧替换,这样在增加目标帧的数量的前提下也不会导致第一视频数据的码率显著提升,从而在视频码率不显著提升的前提下,降低了视频直播的首屏时间和直播延时。

如图1所示,本申请实施例直播框架包括三个部分:第一部分、cdn接入节点;第二部分、视频处理节点;第三部分、cdn分发节点。

下面对各部分进行介绍。

第一部分、cdn接入节点。

这部分是cdn接入节点接收直播方发送的直播视频数据,并将收到的直播视频数据发送给视频处理节点。

第二部分、视频处理节点。

视频处理节点对收到的直播视频数据进行解包和解码得到视频帧,对视频帧进行编码得到第一视频数据。

视频处理节点根据第一视频数据中的原始帧得到目标帧,对目标帧进行编码得到第二视频数据。

视频处理节点将第一视频数据和第二视频数据打包成一个视频流,并发送给cdn分发节点。

第三部分、cdn分发节点。

cdn分发节点解析收到的视频流得到第一视频数据和第二视频数据,并进行缓存。

cdn分发节点在收到终端的播放请求后,若与收到的终端的播放请求的时刻相邻且位于所述时刻之前的独立编码的视频帧在第二视频数据中,则将所述目标帧替换所述第一视频数据中生成所述目标帧使用的原始帧;根据所述第一视频数据中的目标帧,向所述终端进行视频推送。

如图2所示,本申请实施例视频播放的方法包括:

步骤200、接收到终端的播放请求;

步骤201、获取第一视频数据;

步骤202、使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

步骤203、向所述终端推送替换后的第一视频数据。

本发明实施例的第一视频数据不用改变,通过在接收到终端的播放请求后,使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧,由于通过增加额外的目标帧的数量实现视频帧替换,这样在增加目标帧的数量的前提下也不会导致第一视频数据的码率显著提升,从而在视频码率不显著提升的前提下,降低了视频直播的首屏时间和直播延时。

其中,本发明实施例获取第一视频数据时,可以在接收到终端的播放请求后,从网络上获取;也可以提前从网络上下载,并在本地保存,在接收到终端的播放请求后,从本地获取。

可选的,本发明实施例根据下列方式确定所述原始帧:

从第二视频数据中提取出与收到的终端的播放请求的时刻相邻且位于所述时刻之前的目标帧。

本申请实施例可以采用两个流,原有的直播视频流不用改变,而另一个流的目的是增加同步帧的数量,这样在增加同步帧的数量的前提下也不会导致直播视频流的码率显著提升。

下面详细介绍下如何得到第二视频数据。

本申请实施例需要从第一视频数据中选择至少一个视频帧作为原始帧。

具体的,针对所述第一视频数据中的任意一个gop周期,在所述gop周期内选择至少一个p帧和/或b帧,并将选择的p帧和/或b帧作为原始帧;

针对任意一个原始帧,对所述原始帧进行重构得到所述目标帧。

以在所述gop周期内选择至少一个p帧为例:

如图3所示,本申请实施例采用p帧生成目标帧的示意图中,第一视频数据有多个gop周期,从每个gop周期中选择至少一个p帧;

对选择的p帧进行重构得到目标帧。

其中,在选择p帧时,每个gop周期选择的p帧的位置可以全部相同,也可以部分相同;还可以全不相同。

比如一个gop周期中可以选择第1和第2个p帧,另一个gop周期中可以选择第3和第5个p帧。

每个gop帧中选择的p帧的数量可以全部相同,也可以部分相同;还可以全不相同。

如果一个gop帧中选择的p帧的数量越多,则启播速度越快。可选的,一般可以0.5秒或者1秒选择一个p帧。

对选择的p帧进行重构得到目标帧的方式有很多,比如可以通过264编码器、265编码器实现。

以在所述gop周期内选择至少一个b帧为例:

如图4所示,本申请实施例采用b帧生成目标帧的示意图中,第一视频数据有多个gop周期,从每个gop周期中选择至少一个b帧;

对选择的b帧进行重构得到目标帧。

其中,在选择b帧时,每个gop周期选择的b帧的位置可以全部相同,也可以部分相同;还可以全不相同。

比如一个gop周期中可以选择第1和第2个b帧,另一个gop周期中可以选择第3和第5个b帧。

每个gop帧中选择的b帧的数量可以全部相同,也可以部分相同;还可以全不相同。

如果一个gop帧中选择的b帧的数量越多,则启播速度越快。可选的,一般可以0.5秒或者1秒选择一个b帧。

对选择的b帧进行重构得到目标帧的方式有很多,比如可以通过264编码器、265编码器实现。

可选的,第二视频数据和第一视频数据编码配置相同。即在重构目标帧时根据第一视频数据的编码配置进行重构。

对于选择的b帧或p帧,需要保证同一个gop周期中位于选择的b帧或p帧之后的视频帧可以根据选择的b帧或p帧重构出来的目标帧进行帧间预测编码。

在实施中,只要gop周期中目标帧后续的帧所需的前向参考帧数目不超过从目标帧到该帧之间可被参考的帧数,就可以根据选择的b帧或p帧重构出来的目标帧进行帧间预测编码。

比如一个gop周期中选择第2个p帧重构目标帧,则可以根据该目标帧对gop周期中位于第2个p帧之后的视频帧进行帧间预测编码。

在选择时还可以部分选择b帧部分选择p帧,比如一个gop周期中部分选择b帧部分选择p帧;还可以一个gop周期中选择p帧,另一个gop周期中选择b帧。

在实施中,将得到的目标帧形成第二视频数据后,将所述第二视频数据和所述第一视频数据进行封装,形成一个视频流,并将所述视频流进行装置内传输。

比如整个直播装置可以包括三部分,参见图1。视频处理节点完成上面的操作后,将所述视频流进行装置内传输发送给cdn分发节点。

相应的,cdn分发节点将接收的视频流进行解析,分离出所述第二视频数据和所述第一视频数据,并进行缓存。

目前,直播主流采用rtmp(realtimemessagingprotocol,实时消息传输协议),支持的媒体封装是flv(flashvideo,流媒体格式)封装,flv封装支持把用户自定义数据作为meta数据进行封装。

基于此,可选的,将所述第二视频数据和所述第一视频数据进行封装时,可以将第二视频数据作为meta数据或采用私有格式,与第一视频数据一起进行flv封装。

由于将所述第二视频数据和所述第一视频数据进行封装,形成一个视频流,所以后续不需要进行额外的同步过程。

如果不形成一个视频流,则可以根据帧时间或者帧数进行同步。

目前帧号从idr开始计0,后续每个被参考帧增1,在达到最大帧号后,再回到0。在实施中,如果将目标帧替换第一视频数据中生成所述目标帧使用的原始帧,目标帧的帧号是0,但是后面跟着的p帧的帧号有可能不是1,从而出现目标帧与后续视频帧的帧号不连续的情况出现。

被参考帧是能够被后面的帧参考做帧间预测的帧。在实施中,i,p和部分b帧在解码完成后会存储下来作为后面帧的参考做帧间预测。

基于此,还可以在第二视频数据中增加用于保持帧号连续的过渡帧。

这些过渡帧可以是全skip的p帧数据,即一个bit数据很小的帧。

本申请实施例向所述终端进行视频推送之前,可以将所述第二视频数据中用于保持帧号连续的过渡帧替换所述第一视频数据中位于所述原始帧之后的至少一个视频帧,以使替换后的第一视频数据帧号连续。

cdn分发节点将接收的视频流进行解析,分离出所述第二视频数据和所述第一视频数据,并进行缓存后,如果收到来自终端的播放请求,判断所述第一视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的采用帧内独立编码的视频帧是否晚于所述第二视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的目标帧;

如果不晚于,则使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

如果晚于,则不需要进行替换操作,直接从所述第一视频数据中的所述采用帧内独立编码的视频帧开始向所述终端进行推送。

以图5为例,在一个gop周期中选择两个p帧重构目标帧(即图中si帧),假设在t0时刻收到播放请求,确定相邻且位于t0时刻之前的目标帧是重构出来的第二个目标帧。

将第二个目标帧替换第一视频数据中对应位置上的p帧,并将用于保持帧号连续的过渡帧替换所述第一视频数据中第二个目标帧后面的一个b帧。

最后从第二个目标帧的位置开始向终端进行推送。

如果确定所述目标帧不在第二视频数据中,则从所述第一视频数据中的原始帧开始向所述终端进行推送。

以图6为例,在一个gop周期中选择两个p帧重构目标帧(即图中si帧),假设在t0时刻收到播放请求,确定相邻且位于t0时刻之前的目标帧是i帧,则从i帧开始向所述终端进行推送。

如图7所示,本申请实施例视频处理节点的框架示意图中,cdn接入节点将收到的直播视频数据发送给视频处理节点。

视频处理节点对收到的直播视频数据进行解包和解码得到视频帧,通过直播编码器对视频帧进行编码,从视频帧中选取至少一个视频帧作为原始帧,并将选取的原始帧通过启动编码器进行编码。

视频处理节点将第一视频数据和第二视频数据进行flv打包和rtmp打包后传输给cdn分发节点。

如图8所示,本申请实施例视频播放的完整方法包括:

步骤800、cdn接入节点接收直播方发送的直播视频数据。

步骤801、cdn接入节点将收到的直播视频数据发送给视频处理节点。

步骤802、处理节点对收到的直播视频数据进行解包和解码得到视频帧。

步骤803、处理节点通过直播编码器对视频帧进行编码,得到第一视频数据。

步骤804、处理节点从视频帧中选取至少一个视频帧作为原始帧,并将选取的原始帧通过启动编码器进行编码,得到目标帧,并组成第二视频数据。

步骤805、处理节点在第二视频数据中增加用于保持帧号连续的过渡帧。

步骤806、视频处理节点将第一视频数据和第二视频数据进行flv打包和rtmp打包后传输给cn分发节点。

步骤807、cdn分发节点将接收的视频流进行解析,分离出所述第二视频数据和所述第一视频数据,并进行缓存。

步骤808、cdn分发节点收到来自终端的播放请求后,判断第一视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的采用帧内独立编码的视频帧是否晚于所述第二视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的目标帧,如果是,则执行步骤810;否则,执行步骤809。

步骤809、cdn分发节点使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧,并向所述终端推送替换后的第一视频数据。

步骤810、cdn分发节点从所述第一视频数据中的所述采用帧内独立编码的视频帧开始向所述终端进行推送。

如图9所示,本申请实施例一种视频播放的方法,该方法包括:

步骤900、向网络侧发送播放请求;

步骤901、接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

基于同一发明构思,本申请实施例中还提供了一种视频播放的装置,由于该装置解决问题的原理与本申请实施例视频播放的方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

如图10所示,本申请实施例第一种视频播放的装置包括:

请求接收模块1000,用于接收到终端的播放请求;

获取模块1001,用于获取第一视频数据;

处理模块1002,用于使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

推送模块1003,用于向所述终端推送替换后的第一视频数据。

可选的,所述处理模块1002还用于,根据下列方式确定所述原始帧:

从第二视频数据中提取出与收到的终端的播放请求的时刻相邻且位于所述时刻之前的目标帧。

可选的,所述目标帧采用帧内独立编码。

可选的,所述装置还包括,生成模块1004用于,根据下列方式生成所述目标帧:

针对所述第一视频数据中的任意一个画面组gop周期,在所述gop周期内选择至少一个原始帧;

对选择的所述原始帧进行重构得到所述目标帧。

可选的,所述处理模块1002还用于:

使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧之后,向所述终端推送替换后的第一视频数据之前,将所述第二视频数据中用于保持帧号连续的过渡帧替换所述第一视频数据中位于所述目标帧之后的至少一个视频帧。

可选的,所述推送模块1003具体用于:

从所述第一视频数据中的所述目标帧开始向所述终端进行推送。

可选的,所述推送模块1003还用于:

若所述第一视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的采用帧内独立编码的视频帧晚于所述第二视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的目标帧,则从所述第一视频数据中的所述采用帧内独立编码的视频帧开始向所述终端进行推送。

其中,本申请实施例的请求接收模块1000、获取模块1001、处理模块1002和推送模块1003可以位于图1的cdn分发节点中;

生成模块1004可以位于图1的视频处理节点中。

如图11所示,本申请实施例第二种视频播放的装置包括:

发送模块1100,用于向网络侧发送播放请求;

数据接收模块1101,用于接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

如图12所示,本申请实施例第三种视频播放的装置包括:

至少一个处理单元1200以及至少一个存储单元1201,其中,所述存储单元1201存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元1200执行下列过程:

接收到终端的播放请求;

获取第一视频数据;

使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧;

向所述终端推送替换后的第一视频数据。

可选的,所述处理单元1200还用于,根据下列方式确定所述原始帧:

从第二视频数据中提取出与收到的终端的播放请求的时刻相邻且位于所述时刻之前的目标帧。

可选的,所述目标帧采用帧内独立编码。

可选的,所述处理单元1200还用于,根据下列方式生成所述目标帧:

针对所述第一视频数据中的任意一个画面组gop周期,在所述gop周期内选择至少一个原始帧;

对选择的所述原始帧进行重构得到所述目标帧。

可选的,所述处理单元1200还用于:

使用目标帧替换所述第一视频数据中生成所述目标帧所使用的原始帧之后,向所述终端推送替换后的第一视频数据之前,将所述第二视频数据中用于保持帧号连续的过渡帧替换所述第一视频数据中位于所述目标帧之后的至少一个视频帧。

可选的,所述处理单元1200具体用于:

从所述第一视频数据中的所述目标帧开始向所述终端进行推送。

可选的,所述处理单元1200还用于:

若所述第一视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的采用帧内独立编码的视频帧晚于所述第二视频数据中与收到的终端的播放请求对应的时刻相邻且位于所述时刻之前的目标帧,则从所述第一视频数据中的所述采用帧内独立编码的视频帧开始向所述终端进行推送。

如图13所示,本申请实施例第四种视频播放的装置包括:

至少一个处理单元1300以及至少一个存储单元1301,其中,所述存储单元1301存储有程序代码,当所述程序代码被所述处理单元1300执行时,使得所述处理单元执行下列过程:

向网络侧发送播放请求;

接收所述网络侧推送的第一视频数据,其中所述第一视频数据是所述网络侧使用原始帧替换第一视频数据中生成所述原始帧所使用的原始帧后发送的。

本申请实施例还提供一种存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时实现上述图2所述的方法或实现上述图9所述的方法。

以上参照示出根据本申请实施例的方法、装置(装置)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。

相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行装置来使用或结合指令执行装置而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行装置、装置或设备使用,或结合指令执行装置、装置或设备使用。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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