视频推送方法、装置、电子设备及计算机可读存储介质与流程

文档序号:20211495发布日期:2020-03-31 11:06阅读:105来源:国知局
视频推送方法、装置、电子设备及计算机可读存储介质与流程

本发明涉及数据处理领域,特别是涉及一种视频推送方法、装置、电子设备及计算机可读存储介质。



背景技术:

视频制作方制作的视频,通常需要推送至视频播放端进行播放,进而实现视频的传播。

目前视频制作方主要采用实时推送实时编码后的编码流的方式,向视频播放端推送视频,以避免视频泄露。

但是,现有技术中实时编码后的编码流存在较大的码率波动,然而,播放端对码流波动较为敏感,使得实时推送的编码流容易在播放端中出现播放异常。



技术实现要素:

本发明实施例的目的在于提供一种视频推送方法、装置、电子设备及计算机可读存储介质,以解决实时推送的编码流容易在播放端播放异常的问题。具体技术方案如下:

在本发明实施的第一方面,首先提供了一种视频推送方法,应用于视频推送端,所述方法包括:

对视频流进行视频编码,得到编码流;

在所述编码流中确定待填充帧;

确定所述待填充帧需要填充的第一字节数;

在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同;

将填充后的编码流封装,并推送至视频播放端。

可选的,所述在所述编码流中确定待填充帧,包括:

获取所述编码流中每一帧的第二字节数;

在所述第二字节数小于预设字节数的情况下,将所述第二字节数对应的帧,确定为所述编码流中的待填充帧;

所述确定所述待填充帧需要填充的第一字节数,包括:

用所述预设字节数减去所述第二字节数,得到所述待填充帧需要填充的第一字节数。

可选的,所述在所述编码流中确定待填充帧,包括:

获取预设时段内的所述编码流中每一帧的第三字节数;

确定所述预设时段内的所述编码流中当前帧对应的累积剩余字节数;所述当前帧对应的所述累积剩余字节数为:所述预设时段内,所述当前帧时序之前的所有帧剩余的字节数;

将所述当前帧对应的所述第三字节数与所述当前帧对应的所述累积剩余字节数求和,得到第一和值;

在所述第一和值小于预设字节数的情况下,将所述第三字节数对应的当前帧确定为待填充帧;

所述确定所述待填充帧需要填充的第一字节数,包括:

用所述预设字节数减去所述第一和值,得到所述待填充帧需要填充的第一字节数。

可选的,所述确定所述预设时段内的所述编码流中当前帧对应的累积剩余字节数,包括:

确定所述预设时段内,所述当前帧时序之前的所有帧的第三字节数的总和;

确定所述预设时段内,所述当前帧时序之前的所有待填充帧分别需要填充的第一字节数的总和;

用所述预设字节数,乘以所述预设时段内所述当前帧时序之前的所有帧的总帧数,得到总预设字节数;

将所述当前帧对应的第三字节数的总和与所述当前帧对应的第一字节数的总和求和,得到第二和值;

用所述当前帧对应的第二和值减去所述当前帧对应的总预设字节数,得到所述当前帧对应的所述累积剩余字节数。

可选的,所述在所述编码流中确定待填充帧,包括:

获取预设时段内的所述编码流的第四总字节数;

用预设字节数乘以所述预设时段内的所述编码流的总帧数,得到第五总字节数;

在所述第五总字节数大于所述第四总字节数的情况下,将所述预设时段内所述编码流中的一帧或多帧,确定为待填充帧;

所述确定所述待填充帧需要填充的第一字节数,包括:

用所述第五总字节数减去所述第四总字节数,得到所述预设时段内的所述编码流需要填充的第六总字节数;

将所述预设时段内的所述编码流需要填充的第六总字节数,分配给所述预设时段内的所述编码流中的所有待填充帧,得到所述预设时段内的所述编码流中所述待填充帧需要填充的第一字节数。

在本发明实施的第二方面,还提供了一种视频推送装置,应用于视频推送端,所述装置包括:

视频编码模块,用于对视频流进行视频编码,得到编码流;

待填充帧确定模块,用于在所述编码流中确定待填充帧;

第一字节数确定模块,用于确定所述待填充帧需要填充的第一字节数;

填充模块,用于在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同;

推送模块,用于将填充后的编码流封装,并推送至视频播放端。

可选的,所述待填充帧确定模块,包括:

第二字节数获取单元,用于获取所述编码流中每一帧的第二字节数;

待填充帧第一确定单元,用于在所述第二字节数小于预设字节数的情况下,将所述第二字节数对应的帧,确定为所述编码流中的待填充帧;

所述第一字节数确定模块,包括:

第一字节数第一确定单元,用于用所述预设字节数减去所述第二字节数,得到所述待填充帧需要填充的第一字节数。

可选的,所述待填充帧确定模块,包括:

第三字节数获取单元,用于获取预设时段内的所述编码流中每一帧的第三字节数;

累积剩余字节数确定单元,用于确定所述预设时段内的所述编码流中当前帧对应的累积剩余字节数;所述当前帧对应的所述累积剩余字节数为:所述预设时段内,所述当前帧时序之前的所有帧剩余的字节数;

第一和值确定单元,用于将所述当前帧对应的所述第三字节数与所述当前帧对应的所述累积剩余字节数求和,得到第一和值;

待填充帧第二确定单元,用于在所述第一和值小于预设字节数的情况下,将所述第三字节数对应的当前帧确定为待填充帧;

所述第一字节数确定模块,包括:

第一字节数第二确定单元,用于用所述预设字节数减去所述第一和值,得到所述待填充帧需要填充的第一字节数。

可选的,所述累积剩余字节数确定单元,包括:

第三字节数的总和确定子单元,用于确定所述预设时段内,所述当前帧时序之前的所有帧的第三字节数的总和;

第一字节数的总和确定子单元,用于确定所述预设时段内,所述当前帧时序之前的所有待填充帧分别需要填充的第一字节数的总和;

总预设字节数确定子单元,用于用所述预设字节数,乘以所述预设时段内所述当前帧时序之前的所有帧的总帧数,得到总预设字节数;

第二和值确定子单元,用于将所述当前帧对应的第三字节数的总和与所述当前帧对应的第一字节数的总和求和,得到第二和值;

累积剩余字节数确定子单元,用于用所述当前帧对应的第二和值减去所述当前帧对应的总预设字节数,得到所述当前帧对应的所述累积剩余字节数。

可选的,所述待填充帧确定模块,包括:

第四总字节数获取单元,用于获取预设时段内的所述编码流的第四总字节数;

第五总字节数确定单元,用于用预设字节数乘以所述预设时段内的所述编码流的总帧数,得到第五总字节数;

待填充帧第三确定单元,用于在所述第五总字节数大于所述第四总字节数的情况下,将所述预设时段内所述编码流中的一帧或多帧,确定为待填充帧;

所述第一字节数确定模块,可以包括:

第六总字节数确定单元,用于用所述第五总字节数减去所述第四总字节数,得到所述预设时段内的所述编码流需要填充的第六总字节数;

第一字节数第三确定单元,用于将所述预设时段内的所述编码流需要填充的第六总字节数,分配给所述预设时段内的所述编码流中的所有待填充帧,得到所述预设时段内的所述编码流中所述待填充帧需要填充的第一字节数。

在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的视频推送方法。

在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的视频推送方法。

本发明实施例提供的视频推送方法和装置,应用于视频推送端,对视频流进行视频编码,得到编码流;在所述编码流中确定待填充帧;确定所述待填充帧需要填充的第一字节数;在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同;将填充后的编码流封装,并推送至视频播放端。本发明实施例可以从很大程度上解决实时推送的编码流容易在播放端中出现播放异常的问题。

本发明实施例在视频编码后,在编码流中确定待填充帧,在待填充帧的起始码之前,填充与上述起始码的值不同的填充字节,进而从很大程度上避免了实时推送的编码流因为码率波动较大,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从很大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与上述起始码不同的填充字节,由于填充字节位于起始码之前,且与起始码不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例中一种视频推送方法的步骤流程图;

图2是本发明实施例中另一种视频推送方法的步骤流程图;

图3是本发明实施例中又一种视频推送方法的步骤流程图;

图4是本发明实施例中一种确定累积剩余字节数的步骤流程图;

图5是本发明实施例中再一种视频推送方法的步骤流程图;

图6是本发明实施例中一种视频推送装置;

图7是本发明实施例中另一种视频推送装置;

图8是本发明实施例中又一种视频推送装置;

图9是本发明实施例中还一种视频推送装置;

图10是本发明实施例中一种电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

参照图1,图1是本发明实施例中一种视频推送方法的步骤流程图,该方法可以应用于视频推送端。视频推送端可以为视频制作方等。例如,视频推送端可以为视频互联网公司等。在本发明实施例中,对此不作具体限定。在本发明实施例中,该方法主要包括如下步骤:

步骤101:对视频流进行视频编码,得到编码流。

本发明实施例中,对视频流视频编码的方式不作具体限定。如,可以采用h264、h265等编码方式对视频流进行视频编码,得到编码流。

步骤102:在所述编码流中确定待填充帧。

在本发明实施例中,编码流可以包括多帧。该待填充帧可以为编码流中的每一帧,或者,该待填充帧可以为编码流中的部分帧等,在本发明实施例中,对此不作具体限定。具体可以根据实际需要进行设定等。

在本发明实施例中,在上述步骤101或上述步骤102之前,视频推送端可以和视频播放端提前约定码率。例如,可以提前将视频播放端设置的缓存空间的大小转换为该视频播放端设置的码率,进而将该码率确定为视频推送端和视频播放端约定的码率。以该码率为基准,在编码流中确定待填充帧。

在本发明实施例中,在编码流中确定待填充帧的过程中可以从帧级别出发。可以用上述视频播放端设置的码率除以每秒的帧数,得到上述视频播放端设置的每帧的字节数大小。将编码流以帧为单位计算每帧编码流的字节数,将上述视频播放端设置的每帧的字节数大小,与每帧编码流的字节数比较大小。在上述视频播放端设置的每帧的字节数大于1帧编码流的字节数的情况下,该帧编码流即可以为待填充帧。

在编码流中确定待填充帧的过程中也可以从秒级别出发,确定编码流中的每一秒的总字节数,是否小于提前约定的码率。在编码流中的一秒的总字节数小于提前约定的码率的情况下,可以将上述一秒内的一帧或多帧,确定为待填充帧。在本发明实施例中,对此不作具体限定。

具体的,可以将编码流以秒为单位划分为多段,每段编码流的播放时长可以为1秒。计算每段编码流的总字节数。将一段编码流的总字节数与上述视频播放端提前设置的码率比较大小。在该段编码流的总字节数小于上述视频播放端设置的码率的情况下,将该1秒内的一帧或多帧,确定为待填充帧。或者,在确定编码流中的某一帧是否为待填充帧的过程中,还可以在考虑1秒内,该帧之前的其余帧的填充情况的基础上,进一步确定该帧是否为待填充帧。

需要说明的是,在将编码流划分为多段的过程中,时间粒度可以小于或等于1秒。需要注意的是,在时间粒度小于1秒的情况下,此处可以将上述提前设置的码率也转换为小于1秒的总字节数,用时间粒度小于1秒的编码流的总字节数,与转换为小于1秒的总字节数进行比对。在转换为小于1秒的总字节数大于时间粒度小于1秒的编码流的总字节数的情况下,将时间粒度小于1秒的编码流内的一帧或多帧,确定为待填充帧。

例如,可以将编码流以0.5秒为单位划分为多段,每段编码流的播放时长可以为0.5秒,将提前设置的码率除以2,再用播放时长为0.5秒的编码流的总字节数,与提前设置的码率除以2对应的总字节数比较大小。再例如,可以将编码流以0.1秒为单位划分为多段,每段编码流的播放时长可以为0.1秒,将提前设置的码率除以10,再用播放时长为0.1秒的编码流的总字节数,与提前设置的码率除以10对应的总字节数比较大小。

步骤103:确定所述待填充帧需要填充的第一字节数。

具体的,该第一字节数可以为大于或等于0的整数。可以将编码流以秒为单位划分为多段,每段编码流的播放时长可以为1秒。计算每段编码流的总字节数。将一段编码流的总字节数与上述视频播放端设置的码率比较大小。在该段编码流的总字节数小于上述视频播放端设置的码率的情况下,可在将上述视频播放端设置的码率与该段编码流的总字节数的差值,确定为该段编码流中的所有待填充帧中需要填充的总的字节数。在该段编码流中待填充帧的数量为1的情况下,可以将该段编码流中需要填充的总的字节数,确定为该段编码流中该待填充帧需要填充的第一字节数。在该段编码流中待填充帧的数量为n的情况下,可以将该段编码流中需要填充的总的字节数分配给n个待填充帧中,1个待填充帧中分配的待填充字节数,即为该段编码流中该个待填充帧需要填充的第一字节数。n可以为大于1的自然数。

或者,可以用上述视频播放端设置的码率除以每秒的帧数,得到上述视频播放端设置的每帧的字节数大小。将编码流以帧为单位计算每帧编码流的字节数,将上述视频播放端设置的每帧的字节数大小,与每帧编码流的字节数比较大小。在上述视频播放端设置的每帧的字节数大于1帧编码流的字节数的情况下,该帧编码流即可以为待填充帧。可以将上述视频播放端设置的每帧的字节数与该帧编码流的字节数的差值,确定为该帧编码流需要填充的第一字节数。或者,在确定编码流中的某一帧是否为待填充帧的过程中,还可以在考虑1秒内,该帧之前的其余帧的填充情况的基础上,进一步确定该帧是否为待填充帧。在该帧为待填充帧的情况下,进一步确定该待填充帧需要填充的第一字节数。在本发明实施例中,对此均不作具体限定。

例如,视频播放端设置的码率若为204800比特/秒,若编码流中某1秒的编码流的总字节数若为25300字节。204800/8=25600字节。则,视频播放端设置的码率为25600字节/秒。将该段编码流的总字节数25300与上述视频播放端设置的码率25600字节比较大小。该段编码流的总字节数小于上述视频播放端设置的码率,将上述视频播放端设置的码率与该段编码流的总字节数的差值25600-25300=300字节,确定为该段编码流中的所有待填充帧中需要填充的总的字节数。若该段编码流中待填充帧的数量为1的情况下,且该段编码流中待填充帧为该段编码流中的最后一帧,则,可以将300字节,确定为该段编码流中最后一帧需要填充的第一字节数。

在本发明实施例中,码率对应的单位通常情况下为比特/秒。在用上述视频播放端设置的码率除以每秒的帧数,确定视频播放端设置的每帧的字节数的过程中,需要注意,比特与字节之间的单位换算。

例如,视频播放端设置的码率若为204800比特/秒,1字节=8比特。若每秒的帧数为25帧,则,视频播放端设置的每帧的字节数可以为:204800/25/8=1024字节。

步骤104:在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同。

在本发明实施例中,可以在上述编码流中上述待填充帧的起始码之前,填充数量为上述第一字节数的填充字节。上述填充字节的值与上述起始码的值不同,由于填充字节位于起始码之前,且与起始码的值不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而填充了上述填充字节的编码流,后续播放的内容与未填充上述填充字节的编码流播放内容相同。也就是说在上述编码流中待填充帧的起始码之前,在填充了上述填充字节后,对后续的播放效果并不影响。该充字节的值可以具体根据编码或解码协议的规定等进行确定,在本发明实施例中,对此不作具体限定。

例如,若h264编码及解码协议中,若规定1为起始码,则,0可以为与上述起始码1不同的值。则,针对应用h264编码及解码协议的视频播放端,填充字节的值可以为0。

在本发明实施例中,在上述编码流中上述待填充帧的起始码之前,填充数量为上述第一字节数的填充字节,进而使得填充后的编码流的码率与视频播放端设置的码率基本持平。进而视频播放端接收到编码流的码率,与视频播放端设置的码率基本持平,进而从很大程度上减少了码率的波动。也就是说,基本解决了由于视频播放端接收到编码流的码率小于视频播放端设置的码率的情况下,导致的视频播放异常的问题,进而从很大程度上改善了编码流在视频播放端的播放效果。

例如,针对上述例子,视频播放端设置的码率若为204800比特/秒,若编码流中某1秒的编码流的总字节数若为25300字节。若该段编码流中待填充帧的数量为1的情况下,且该段编码流中待填充帧为该段编码流中的最后一帧,则,可以在该1秒的编码流中的最后一帧的起始码之前,填充300字节的填充字节。填充字节的值与起始码的值不同。则,填充后该1秒的编码流的总字节数为25600字节,与视频播放端设置的码率25300字节基本持平。相对于填充前,该1秒的编码流的总字节数为25300字节而言,视频播放端接收到编码流的码率与视频播放端设置的码率差距更小,基本解决了由于视频播放端接收到编码流的码率小于视频播放端设置的码率的情况下,导致的视频播放异常的问题,进而从很大程度上改善了编码流在视频播放端的播放效果。

步骤105:将填充后的编码流封装,并推送至视频播放端。

在本发明实施例中,可以将填充后的编码流封装,并推送至视频播放端。上述封装可以基于ts(transportstream,传输流协议)、flv(flashvideo、流媒体协议)、mp4、mkv(multimediacontainer,多媒体容器协议)等进行封装,在本发明实施例中,对此不作具体限定。视频推送端将封装后的编码流推送至视频播放端。视频播放端可以接收、并解码、播放上述封装后的编码流。该视频播放终端可以包括:电视台、直播终端等。在本发明实施例中,对此不作具体限定。进而视频播放端接收到编码流的码率与视频播放端设置的码率差距更小,基本解决了由于视频播放端接收到编码流的码率小于视频播放端设置的码率的情况下,导致的视频播放异常的问题,进而从很大程度上改善了编码流在视频播放端的播放效果。

现有技术中,实时推送的视频流容易在播放端中出现播放异常,主要原因是在实时编码后,视频流的码率会出现较大波动。而视频播放端通常会设定相对固定的码率,若视频播放端接收的推送的视频流的码率与该视频播放端设置的码率差距较大,容易导致视频流在视频播放端播放异常。而在本发明实施例中,对视频流进行视频编码,得到编码流,在编码流中待填充帧的起始码之前,填充与上述起始码不同的填充字节。本发明实施例从很大程度上避免了实时推送的编码流因为码率波动较大,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从很大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与上述起始码的值不同的填充字节,由于填充字节位于起始码之前,且与起始码不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而填充后的编码流不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

参照图2,图2是本发明实施例中另一种视频推送方法的步骤流程图,该方法同样可以应用于视频推送端,该视频推送端参照前述记载。该方法可以包括:

步骤201:对视频流进行视频编码,得到编码流。

本发明实施例中,该步骤可以参照前述步骤101,为了避免重复,此处不再赘述。

步骤202:获取所述编码流中每一帧的第二字节数。

本发明实施例中,获取编码流中每一帧的第二字节数。例如,若该编码流具有300帧。则,可以获取该编码流中第1帧的第二字节数、第2帧的第二字节数、第3帧的第二字节数……第298帧的第二字节数、第299帧的第二字节数、第300帧的第二字节数。

步骤203:在所述第二字节数小于预设字节数的情况下,将所述第二字节数对应的帧,确定为所述编码流中的待填充帧。

在本发明实施例中,该预设字节数可以由前述的视频播放端设置的码率计算得到。具体的,可以用上述视频播放端设置的码率除以每秒的帧数,得到视频播放端设置的每帧的字节数,即为该预设字节数。需要注意的是,码率的单位通常为比特,应该将比特与字节进行单位换算。

例如,视频播放端设置的码率若为204800比特/秒,1字节=8比特。若每秒的帧数为25帧,则,该预设字节数可以为:204800/25/8=1024字节。

在编码流中的某一帧的第二字节数小于上述预设字节数的情况下,说明从帧的层级来看,编码后的该帧编码流的字节数与视频播放端对应的预设字节数不一致,容易导致码率不一致。因此,在编码流中的某一帧的第二字节数小于上述预设字节数的情况下,可以将该帧确定为待填充帧。

例如,针对上述例子,若编码流中的第1帧的第二字节数为1024字节,若编码流中的第2帧的第二字节数为920字节,若编码流中的第2帧的第二字节数为1030字节,若编码流中的第4帧的第四总字节数为990字节。第1帧的字节数1024等于该视频播放端对应的预设字节数1024字节,从帧级别来看,第1帧可能不会导致码率不一致。则,该编码流中的第1帧可以不是待填充帧。第2帧的字节数920小于该视频播放端对应的预设字节数1024字节,从帧级别来看,第2帧可能会导致码率不一致。则,该编码流中的第2帧可以是待填充帧。第3帧的字节数1030大于该视频播放端对应的预设字节数1024字节,超过了预设字节数,因此,该第3帧可以不作为待填充帧。第4帧的字节数990小于该视频播放端对应的预设字节数1024字节,从帧级别来看,第4帧可能会导致码率不一致。则,该编码流中的第4帧可以是待填充帧。以此类推,确定每一帧是否为待填充帧,在某一帧为待填充帧的情况下,进一步将上述预设字节数与该帧的第二字节数之差,确定为该待填充帧需要填充的第一字节数。

步骤204:用所述预设字节数减去所述第二字节数,得到所述待填充帧需要填充的第一字节数。

在本发明实施例中,用上述预设字节数减去上述第二字节数,得到该待填充帧需要填充的第一字节数,进而从帧级别,尽可能地避免了编码流的字节数小于视频播放端设置的码率的可能性,能够从很大程度上避免编码流在视频播放端的播放异常,进而从很大程度上改善了编码流在视频播放端的播放效果。

例如,针对上述例子,若编码流中的第2帧的第二字节数为920字节,小于该视频播放端对应的预设字节数1024字节,从帧级别来看,第2帧可能会导致码率不一致。因此,第2帧可以为待填充帧。用预设字节数1024减去第2帧的第二字节数为920,得到第2帧需要填充的第一字节数可以为:1024-920=104字节。第4帧的字节数990小于该视频播放端对应的预设字节数1024字节,从帧级别来看,第4帧可能会导致码率不一致。则,该编码流中的第4帧可以是待填充帧。用预设字节数1024减去第4帧的第二字节数为990,得到第4帧需要填充的第一字节数可以为:1024-990=34字节。

步骤205:在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同。

例如,针对上述例子,在若编码流中的第2帧的起始码之前,填充104字节的填充字节。在第4帧的起始码之前,填充34字节的填充字节。

步骤206:将填充后的编码流封装,并推送至视频播放端。

在本发明实施例中,该步骤205至步骤206可以分别参照前述步骤103至步骤104,为了避免重复,此处不再赘述。

在本发明实施例中,对视频流进行视频编码,得到编码流,在编码流中某一帧的第二字节数小于预设字节数的情况下,说明从帧的层级来看,编码后的该帧编码流的字节数与视频播放端对应的预设字节数不一致,容易导致码率不一致。因此,在编码流中的某一帧的第二字节数小于上述预设字节数的情况下,可以将该帧确定为待填充帧。在待填充帧中填充空值的填充字节。本发明实施例从很大程度上避免了实时推送的编码流因为码率波动较大,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从很大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与起始码不同的填充字节,由于填充字节位于起始码之前,且与起始码不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而填充后的编码流不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

参照图3,图3是本发明实施例中又一种视频推送方法的步骤流程图,该方法同样可以应用于视频推送端,该视频推送端参照前述记载。该方法可以包括:

步骤301:对视频流进行视频编码,得到编码流。

本发明实施例中,该步骤可以参照前述步骤101,为了避免重复,此处不再赘述。

步骤302:获取预设时段内的所述编码流中每一帧的第三字节数。

在本发明实施例中,因为码率对应的时间长度通常为1秒,因此,该预设时段可以小于等于1秒。或者,该预设时段可以根据实际需要进行设定。在本发明实施例中,对此不作具体限定。

在本发明实施例中,获取预设时段内的编码流中每一帧的第三字节数。例如,若预设时段为1秒,该1秒内的编码流具有25帧。则,可以获取该1秒内的编码流中第1帧的第三字节数、第2帧的第三字节数、第3帧的第三字节数……第23帧的第三字节数、第24帧的第三字节数、第25帧的第三字节数。再例如,该预设时段还可以为0.1秒。

步骤303:确定所述预设时段内的所述编码流中当前帧对应的累积剩余字节数;所述当前帧对应的所述累积剩余字节数为:所述预设时段内,所述当前帧时序之前的所有帧剩余的字节数。

在本发明实施例中,预设时段内的编码流中当前帧,可以为预设时段内的编码流中的每一帧。

在本发明实施例中,获取该预设时段内的该编码流中当前帧对应的累积剩余字节数。该预设时段内的该编码流中当前帧对应的累积剩余字节数可以为:该预设时段内,该编码流中该当前帧时序之前的所有帧剩余的字节数。具体是在考虑了该预设时段内该编码流中该当前帧时序之前的所有帧在满足视频播放端需求的码率的前提下,累积剩余的字节数。

在本发明实施例中,该预设时段内的该编码流中第1帧由于在该预设时段内不存在时序之前的帧,因此,在该预设时段内,该第1帧可以没有累积剩余字节数。第1帧对应的累积剩余字节数可以认为为0。在该预设时段内,第2帧对应的累积剩余字节数可以为:第1帧的第三字节数与前述预设字节数的差值。后面各帧对应的累积剩余字节数均需要考虑该1秒内的编码流中该帧时序之前一帧是否填充,即该帧的前一帧是否为填充帧。若为非填充帧,则,确定该帧的前一帧对应的累积剩余字节数。以此类推,确定各帧分别对应的累积剩余字节数。在本发明实施例中,对此不作具体限定。

在本发明实施例中,参照图4,图4是本发明实施例中一种确定累积剩余字节数的步骤流程图,可选的,该步骤303可以包括:

步骤3031:确定所述预设时段内,所述当前帧时序之前的所有帧的第三字节数的总和。

步骤3032:确定所述预设时段内,所述当前帧时序之前的所有待填充帧分别需要填充的第一字节数的总和。

步骤3033:用所述预设字节数,乘以所述预设时段内所述当前帧时序之前的所有帧的总帧数,得到总预设字节数。

步骤3034:将所述当前帧对应的第三字节数的总和与所述当前帧对应的第一字节数的总和求和,得到第二和值。

步骤3035:用所述当前帧对应的第二和值减去所述当前帧对应的总预设字节数,得到所述当前帧对应的所述累积剩余字节数。

具体的,该预设字节数与前述记载一致,此处不再赘述。该预设时段的当前帧可以为该预设时段内的任意一帧。该预设时段内编码流的第1帧时序之前由于没有帧,因此,该预设时段内编码流的第1帧时序之前的所有帧的第三字节数的总和可以为0。同样的,该预设时段内编码流的第1帧时序之前由于没有帧,因此,该预设时段内编码流的第1帧时序之前的所有待填充帧分别需要填充的第一字节数的总和也可以为0。除了该第1帧之外,预设时段内,某一帧时序之前的所有帧的第三字节数的总和为:预设时段内,某一帧时序之前的各个帧的各个第三字节数求和得到的和值。除了该第1帧之外,预设时段内,某一帧时序之前的所有待填充帧分别需要填充的第一节数的总和为:预设时段内,某一帧时序之前的各个待填充帧分别需要填充的各个第一字节数求和得到的和值。

用该预设字节数,乘以该预设时段内当前帧时序之前的所有帧的总帧数,得到总预设字节数。将当前帧对应的第三字节数的总和与该当前帧对应的第一字节数的总和求和,得到第二和值。用当前帧对应的第二和值减去该当前帧对应的总预设字节数,得到该当前帧对应的累积剩余字节数。

可选的,在预设时段内当前帧的前一帧若为填充帧的情况,则,说明预设时段内当前帧的前一帧需要经过填充第一字节数的填充字节才能够满足视频播放端设定的码率标准,则,在预设时段内该当前帧的前一帧若为填充帧的情况,预设时段内该当前帧的前一帧没有多余的字节数盈余,则,该当前帧对应的累积剩余字节数可以为0。在预设时段内当前帧的前一帧为非填充帧的情况,说明该预设时段内该当前帧的前一帧,相对于上述预设字节数有盈余的字节数或正好与预设字节数相等。则,预设时段内该当前帧的前一帧若为非填充帧的情况,该当前帧对应的累积剩余字节数大于或等于0。无论预设时段内当前帧的前一帧为非填充帧或者为填充帧,均可以前述步骤3031至3035的步骤,计算当前帧对应的累积剩余字节数。

例如,针对上述例子,若预设时段为1秒,该1秒内的编码流具有25帧。该1秒内的编码流中第1帧的第三字节数为1100、第2帧的第三字节数为990、第3帧的第三字节数为1000、第4帧的第三字节数为960、第5帧的第三字节数为999……。则,针对该1秒内的编码流中的第1帧对应的累积剩余字节数为0。针对该1秒内的编码流中的第2帧时序之前所有帧的第三字节数的总和,即为该1秒内的编码流中的第1帧的第三字节数1100。若预设字节数为1024,由于该1秒内的编码流中的第1帧的第三字节数为1100,大于预设字节数1024,则,该1秒内的编码流中的第1帧不是待填充帧。则,该1秒内的编码流中的第2帧时序之前所有待填充帧分别需要填充的第一字节数的总和为0。该1秒内的编码流中的第2帧时序之前所有帧的总帧数为1。若预设字节数为1024,则,该1秒内的编码流中的第2帧对应的总预设字节数可以为:1024×1=1024。将该1秒内的编码流中的第2帧对应的第三字节数的总和1100,与该1秒内的编码流中的第2帧对应的第一字节数的总和0,求和得到的第二和值为0+1100=1100,该1秒内的编码流中的第2帧对应的第二和值1100,减去该1秒内的编码流中的第2帧对应的总预设字节数1024:1100-1024=76。则,该1秒内的编码流中的第2帧对应的累积剩余字节数为:76。

针对该1秒内的编码流中的第3帧时序之前所有帧的第三字节数的总和,即为该1秒内的编码流中的第1帧的第三字节数1100和第2帧的第三字节数990,求和,得到:1100+990=2090。若预设字节数为1024,该1秒内的编码流中的第1帧不是待填充帧,该第2帧不是待填充帧。则,该1秒内的编码流中的第3帧时序之前所有待填充帧分别需要填充的第一字节数的总和为0。该1秒内的编码流中的第3帧时序之前所有帧的总帧数为2。若预设字节数为1024,则,该1秒内的编码流中的第3帧对应的总预设字节数可以为:1024×2=2048。将该1秒内的编码流中的第3帧对应的第三字节数的总和2090,与该1秒内的编码流中的第3帧对应的第一字节数的总和0,求和得到的第二和值为0+2090=2090。该1秒内的编码流中的第3帧对应的第二和值2090,减去该1秒内的编码流中的第3帧对应的总预设字节数2048:2090-2048=42。则,该1秒内的编码流中的第3帧对应的累积剩余字节数为:42。将该1秒内的编码流中的第3帧对应的第三字节数1000,与该1秒内的编码流中的第3帧对应的累积剩余字节数42求和,得到第一和值为:42+1000=1042。第一和值1042大于预设字节数1024,因此,该1秒内的编码流中的第3帧也不是待填充帧。

针对该1秒内的编码流中的第4帧时序之前所有帧的第三字节数的总和,即为该1秒内的编码流中的第1帧的第三字节数1100、第2帧的第三字节数990和第3帧的第三字节数1000,求和,得到:1100+990+1000=3090。若预设字节数为1024,该1秒内的编码流中的第1帧不是待填充帧,该第2帧不是待填充帧、该第3帧不是待填充帧。则,该1秒内的编码流中的第4帧时序之前所有待填充帧分别需要填充的第一字节数的总和为0。该1秒内的编码流中的第4帧时序之前所有帧的总帧数为3。若预设字节数为1024,则,该1秒内的编码流中的第4帧对应的总预设字节数可以为:1024×3=3072。将该1秒内的编码流中的第4帧对应的第三字节数的总和3090,与该1秒内的编码流中的第4帧对应的第一字节数的总和0,求和得到的第二和值为0+3090=3090。该1秒内的编码流中的第4帧对应的第二和值3090,减去该1秒内的编码流中的第4帧对应的总预设字节数3072:3090-3072=18。则,该1秒内的编码流中的第4帧对应的累积剩余字节数为:18。将该1秒内的编码流中的第4帧对应的第三字节数960,与该1秒内的编码流中的第4帧对应的累积剩余字节数18求和,得到第一和值为:18+960=978,小于上述预设字节数1024,则,该1秒内的编码流中的第4帧为填充帧。以此类推,得到该1秒内的编码流中当前帧对应的累积剩余字节数。

需要说明的是,在预设时段内的编码流中,在执行上述步骤303之前,可以先判断一帧时序之前的一帧是否为待填充帧。若,一帧时序之前的一帧为待填充帧。则,说明,该帧时序之前的一帧需要填充后,才可能满足视频播放端预设的码率要求。而通常情况下,填充后,该帧时序之前的一帧基本与预设字节数相同,因此,该预设时段内,该帧时序之前的所有帧剩余的字节数可能为0。则,该帧对应的累积剩余字节数可以为0。例如,针对前述例子,第3帧时序之前的第2帧为待填充帧,第3帧对应的累积剩余字节数可以为0。在判断一帧时序之前的一帧不是待填充帧的情况下再执行上述步骤303,可以从一定程度上提升确定一帧对应的累积剩余字节数的效率。

步骤304:将所述当前帧对应的所述第三字节数与所述当前帧对应的所述累积剩余字节数求和,得到第一和值。

在本发明实施例中,将当前帧对应的第三字节数与该当前帧对应的累计剩余字节数求和,得到第一和值。该第一和值可以表征:预设时段内,在考虑了该当前帧时序之前的所有帧,在可能满足视频播放端提前设定的码率的前提下,剩余的字节数,累加在该当前帧原有的第三字节数上的字节数。

例如,针对上述例子,将该1秒内的编码流中的第2帧对应的第三字节数990,与该1秒内的编码流中的第2帧对应的累积剩余字节数76求和,得到第一和值为:76+990=1066。第一和值1066大于预设字节数1024,因此,该1秒内的编码流中的第2帧不是待填充帧。

步骤305:在所述第一和值小于预设字节数的情况下,将所述第三字节数对应的当前帧确定为待填充帧。

在本发明实施例中,在上述一当前帧对应的第三字节数与上述该当前帧对应的累积剩余字节数的第一和值小于预设字节数的情况下,将该第三字节数对应的当前帧确定为待填充帧。即,在同一当前帧对应的第三字节数与该帧对应的累积剩余字节数的第一和值小于预设字节数的情况下,将该当前帧确定为待填充帧。

例如,针对上述例子,若预设时段为1秒,该1秒内的编码流具有25帧。该1秒内的编码流中第1帧的第三字节数为1100、第2帧的第三字节数为990、第3帧的第三字节数为1000、第4帧的第三字节数为960、第5帧的第三字节数为999……。该1秒内的编码流中第1帧对应的累积剩余字节数为0、第2帧对应的累积剩余字节数为76、第3帧的对应的累积剩余字节数为42、第4帧对应的累积剩余字节数为18、第5帧对应的累积剩余字节数为0……。针对该1秒内的编码流的第1帧,第1帧的第三字节数为1100与第1帧对应的累积剩余节数0的第一和值为1100。第1帧的第一和值1100大于预设字节数1024,则,第1帧可以不是待填充帧。针对该1秒内的编码流的第2帧,第2帧的第三字节数为990与第2帧对应的累积剩余节数76的第一和值为990+76=1066。第2帧的第一和值1066大于预设字节数1024,则,第2帧也可以不是待填充帧。针对该1秒内的编码流的第3帧,第3帧的第三字节数为1000与第3帧对应的累积剩余节数42的第一和值为1000+42=1042。第3帧的第一和值1042大于预设字节数1024,则,第3帧也可以不是待填充帧。针对该1秒内的编码流的第4帧,第4帧的第三字节数为960与第4帧对应的累积剩余节数18的第一和值为960+18=978。第4帧的第一和值978小于预设字节数1024,则,第4帧可以是待填充帧。针对该1秒内的编码流的第5帧,第5帧的第三字节数为999与第5帧对应的累积剩余节数0的第一和值为999+0=999。第5帧的第一和值999小于预设字节数1024,则,第5帧可以是待填充帧。以此类推,得到该1秒内的编码流中每一帧是否为待填充帧。

在本发明实施例中,通过考虑预设时段内的编码流中当前帧对应的累积剩余字节数,相当于从一定程度上考虑了该预设时段内的各帧盈余的字节数,进而在确定的待填充帧中填充上述第一字节数的填充字节后,该预设时段内的编码流的总字节数与视频播放端设置的码率更为接近,从更大程度上避免了实时推送的编码流因为码率不稳定,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从更大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与该起始码的值不同的填充字节,由于填充字节位于起始码之前,且与起始码的值不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

步骤306:用所述预设字节数减去所述第一和值,得到所述待填充帧需要填充的第一字节数。

在本发明实施例中,用上述预设字节数减去待填充帧的第三字节数与对应的累积剩余字节数的第一和值,得到该待填充帧需要填充的第一字节数。也就是在充分考虑该预设时段内的待填充帧之前的所有帧盈余的字节数的基础上,进一步确定该待填充帧需要填充的第一字节数。进而在确定的待填充帧中填充上述第一字节数的填充字节后,该预设时段内的编码流的总字节数与视频播放端设置的码率更为接近。

例如,针对上述例子,若预设时段为1秒,该1秒内的编码流具有25帧。该1秒内的编码流中第1帧的第三字节数为1100、第2帧的第三字节数为990、第3帧的第三字节数为1000、第4帧的第三字节数为960、第5帧的第三字节数为999……。该1秒内的编码流中第1帧对应的累积剩余字节数为0、第2帧对应的累积剩余字节数为76、第3帧的对应的累积剩余字节数为42、第4帧对应的累积剩余字节数为18、第5帧对应的累积剩余字节数为0……。针对该1秒内的编码流的待填充帧如:第4帧,第4帧的第三字节数为960与第4帧对应的累积剩余节数18的第一和值为960+18=978。用预设字节数1024减去第4帧的第一和值978,得到该1秒内的编码流的待填充帧:第4帧需要填充的第一字节数为:1024-978=46。针对该1秒内的编码流的待填充帧如:第5帧,第5帧的第三字节数为999与第5帧对应的累积剩余节数0的第一和值为999+0=999。用预设字节数1024减去第5帧的第一和值999,得到该1秒内的编码流的待填充帧:第5帧需要填充的第一字节数为:1024-999=25。以此类推,得到该1秒内的编码流中每个待填充帧分别需要填充的第一字节数。

步骤307:在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同。

步骤308:将填充后的编码流封装,并推送至视频播放端。

在本发明实施例中,上述步骤307和步骤308可以分别参照前述步骤104和步骤105,为了避免重复,此处不再赘述。

在本发明实施例中,对视频流进行视频编码,得到编码流,在预设时段内的编码流中某一帧的第三字节数,和该帧对应的累积剩余字节数的第一和值小于预设字节数的情况下,说明在考虑在该预设时段内,在考虑该帧之前的所有帧的盈余字节的基础上,该帧可能仍然达不到播放端的码率要求,可以将该帧确定为待填充帧,然后用预设字节数减去第一和值,得到填充帧需要填充的第一字节数。本发明实施例从一定程度上考虑了该预设时段内的各帧盈余的字节数,进而在确定的待填充帧的起始码之前,填充上述第一字节数的填充字节后,该预设时段内的编码流的总字节数与视频播放端设置的码率更为接近,从更大程度上避免了实时推送的编码流因为码率不稳定,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从更大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与该起始码的值不同的填充字节,由于填充字节位于起始码之前,且与起始码不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

参照图5,图5是本发明实施例中再一种视频推送方法的步骤流程图,该方法同样可以应用于视频推送端,该视频推送端可以参照前述记载。该方法可以包括:

步骤401:对视频流进行视频编码,得到编码流。

本发明实施例中,该步骤可以参照前述步骤101,为了避免重复,此处不再赘述。

步骤402:获取预设时段内的所述编码流的第四总字节数。

在本发明实施例中,因为码率对应的时间长度通常为1秒,因此,该预设时段可以小于等于1秒。或者,该预设时段可以根据实际需要进行设定。在本发明实施例中,对此不作具体限定。

在本发明实施例中,获取预设时段内的编码流的第四总字节数,即获取预设时段内的码流的总字节数。例如,若预设时段为1秒,该1秒内的编码流具有25帧。则,可以获取该1秒内的编码流中25帧的所有字节数的和,即得到了该1秒内的编码流的第四总字节数。

步骤403:用预设字节数乘以所述预设时段内的所述编码流的总帧数,得到第五总字节数。

在本发明实施例中,该预设字节数可以参照前述相关记载,为了避免重复,此处不再赘述。可以用上述预设字节数乘以该预设时段内的该编码流的总帧数,得到第五总字节数,也就是得到了视频播放端在该预设时段内的编码流所需的总字节数。

例如,若预设字节数为1024。针对上述例子,该1秒内的编码流具有25帧。则,可以用1024×25=25600。

步骤404:在所述第五总字节数大于所述第四总字节数的情况下,将所述预设时段内所述编码流中的一帧或多帧,确定为待填充帧。

在本发明实施例中,在视频播放端在该预设时段内的编码流所需的总字节数即第五总字节数,大于该预设时段内的编码流的第四总字节数的情况下,说明,该预设时段内的编码流的总字节数,小于视频播放端在该预设时段所需的总字节数。则,需要在该预设时段内的编码流中填充一些填充字节,才可能满足视频播放端的码率要求,可以将该预设时段内的编码流中的一帧或多帧,确定为待填充帧。该待填充帧可以为该预设时段内的编码流中任意一帧,或任意多帧。

例如,针对上述例子,若该1秒内的编码流具有25帧,该1秒内的编码流的总字节数即第四总字节数为24900。若,视频播放端在该1秒内的编码流所需的总字节数25600大于第四总字节数24900,则,可以将该1秒内的编码流中的一帧或多帧,确定为待填充帧。如,可以将该1秒内的编码流中的第1帧确定为待填充帧。或者,可以将该1秒内的编码流中的第1帧、第3帧,均确定为待填充帧

步骤405:用所述第五总字节数减去所述第四总字节数,得到所述预设时段内的所述编码流需要填充的第六总字节数。

可以用视频播放端在该预设时段内的编码流所需的总字节数即第五总字节数减去该预设时段内的编码流的第四总字节数,得到该预设时段内的编码流需要填充的总字节数。

例如,针对上述例子,若该1秒内的编码流具有25帧,该1秒内的编码流的总字节数即第四总字节数为24900。则,可以用视频播放端在该1秒内的编码流所需的总字节数即第五总字节数减去该预设时段内的编码流的第四总字节数,得到该1秒内的编码流需要填充的第六总字节数为:25600-24900=700。

步骤406:将所述预设时段内的所述编码流需要填充的第六总字节数,分配给所述预设时段内的所述编码流中的所有待填充帧,得到所述预设时段内的所述编码流中所述待填充帧需要填充的第一字节数。

在本发明实施例中,该编码流中的待填充帧可以提前设定或随意设定。其数量也可以随意设定。在本发明实施例中,对此不作具体限定。例如,可以将该预设时段的编码流的最后一帧设定为待填充帧。或者,可以将该预设时段的编码流的第1帧、最后一帧均设定为待填充帧。

在本发明实施例中,可以将该预设时段内的该编码流需要填充的第六总字节数,分配给该预设时段内的该编码流中的所有待填充帧,得到该预设时段内的该编码流中每个待填充帧需要填充的第一字节数。在该预设时段内的该编码流中的所有待填充帧的数量为1的情况下,则,该预设时段内的该编码流需要填充的总字节数均会分配给该待填充帧。则,在该预设时段内的该编码流中的所有待填充帧的数量为1的情况下,该预设时段内的该编码流中唯一一个待填充帧需要填充的第一字节数即为该预设时段内的该编码流需要填充的第六总字节数。在该预设时段内的该编码流中的所有待填充帧的数量大于1的情况下,该分配可以为平均分配或随意分配,只需要使得各个待填充帧分配的第一字节数的总和等于该预设时段内的该编码流需要填充的第六总字节数即可。在本发明实施例中,对此不作具体限定。

例如,针对上述例子,若该1秒内的编码流具有25帧,该1秒内的编码流的总字节数即第四总字节数为24900。视频播放端在该1秒内的编码流所需的总字节数即第五总字节数为25600。得到该1秒内的编码流需要填充的第六总字节数为:25600-24900=700。若该1秒内的编码流中的待填充帧为第25帧仅一帧,则,分配给待填充帧第25帧的第一字节数即为700。若该1秒内的编码流中的待填充帧为第1帧、第25帧共2帧,则,若平均分配,则分配给待填充帧第1帧和第25帧的第一字节数均可以为700/2=350。若该1秒内的编码流中的待填充帧为第1帧、第13帧、第25帧共3帧,则,若随机分配,分配给待填充帧第1帧的第一字节数可以为100,分配给待填充帧第13帧的第一字节数可以为300,分配给待填充帧第25帧的第一字节数可以为300,3个待填充帧分别分配的第一字节数求和:100+300+300=700。

在本发明实施例中,通过确定预设时段内的编码流的总字节数即第四总字节数,以及播放端在预设时段内所需要的编码流的总字节数即第五总字节数,在第五总字节数大于第四总字节数的情况下,将该预设时段内编码流中的一帧或多帧,确定为待填充帧。用第五总字节数减去第四总字节数,得到该播放端在该预设时段内所需要填充的第六总字节数,将需要填充的第六总字节数在该预设时段内的所有待填充帧中进行分配,能够从更大程度上保证后续视频推送端推送给视频播放端的编码流的码率与视频播放端所需要或所设定的码率基本持平,从更大程度上避免了实时推送的编码流因为码率不稳定,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从更大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与起始码的值不同的填充字节,由于填充字节位于起始码之前,且与起始码的值不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

步骤407:在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同。

步骤408:将填充后的编码流封装,并推送至视频播放端。

在本发明实施例中,上述步骤407和步骤408可以分别参照前述步骤104和步骤105,为了避免重复,此处不再赘述。

在本发明实施例中,对视频流进行视频编码,得到编码流,确定预设时段内的编码流的总字节数即第四总字节数,以及播放端在预设时段内所需要的编码流的总字节数即第五总字节数,在第五总字节数大于第四总字节数的情况下,将该预设时段内编码流中的一帧或多帧,确定为待填充帧。用第五总字节数减去第四总字节数,得到该播放端在该预设时段内所需要填充的第六总字节数,将需要填充的第六总字节数在该预设时段内的所有待填充帧中进行分配,能够从更大程度上保证后续视频推送端推送给视频播放端的编码流的码率与视频播放端所需要或所设定的码率基本持平,从更大程度上避免了实时推送的编码流因为码率不稳定,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从更大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与起始码不同的填充字节,由于填充字节位于起始码之前,且与起始码不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定都是本申请实施例所必须的。

图6是本发明实施例中一种视频推送装置,应用于视频推送端,关于该视频推送端参照前述记载,所述装置500可以包括:

视频编码模块501,用于对视频流进行视频编码,得到编码流;

待填充帧确定模块502,用于在所述编码流中确定待填充帧;

第一字节数确定模块503,用于确定所述待填充帧需要填充的第一字节数;

填充模块504,用于在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同;

推送模块505,用于将填充后的编码流封装,并推送至视频播放端。

可选的,在上述图6的基础上,参照图7所示,图7是本发明实施例中另一种视频推送装置。所述待填充帧确定模块502,可以包括:

第二字节数获取单元5021,用于获取所述编码流中每一帧的第二字节数;

待填充帧第一确定单元5022,用于在所述第二字节数小于预设字节数的情况下,将所述第二字节数对应的帧,确定为所述编码流中的待填充帧;

所述第一字节数确定模块503,可以包括:

第一字节数第一确定单元5031,用于用所述预设字节数减去所述第二字节数,得到所述待填充帧需要填充的第一字节数。

可选的,在上述图6的基础上,参照图8所示,图8是本发明实施例中又一种视频推送装置。所述待填充帧确定模块502,可以包括:

第三字节数获取单元5023,用于获取预设时段内的所述编码流中每一帧的第三字节数;

累积剩余字节数确定单元5024,用于确定所述预设时段内的所述编码流中当前帧对应的累积剩余字节数;所述当前帧对应的所述累积剩余字节数为:所述预设时段内,所述当前帧时序之前的所有帧剩余的字节数;

第一和值确定单元5025,用于将所述当前帧对应的所述第三字节数与所述当前帧对应的所述累积剩余字节数求和,得到第一和值;

待填充帧第二确定单元5026,用于在所述第一和值小于预设字节数的情况下,将所述第三字节数对应的当前帧确定为待填充帧;

所述第一字节数确定模块503,可以包括:

第一字节数第二确定单元5032,用于用所述预设字节数减去所述第一和值,得到所述待填充帧需要填充的第一字节数。

可选的,所述累积剩余字节数确定单元5024可以包括:

第三字节数的总和确定子单元50241,用于确定所述预设时段内,所述当前帧时序之前的所有帧的第三字节数的总和;

第一字节数的总和确定子单元50242,用于确定所述预设时段内,所述当前帧时序之前的所有待填充帧分别需要填充的第一字节数的总和;

总预设字节数确定子单元50243,用于用所述预设字节数,乘以所述预设时段内所述当前帧时序之前的所有帧的总帧数,得到总预设字节数;

第二和值确定子单元50244,用于将所述当前帧对应的第三字节数的总和与所述当前帧对应的第一字节数的总和求和,得到第二和值;

累积剩余字节数确定子单元50245,用于用所述当前帧对应的第二和值减去所述当前帧对应的总预设字节数,得到所述当前帧对应的所述累积剩余字节数。

可选的,在上述图6的基础上,参照图9所示,图9是本发明实施例中还一种视频推送装置。所述待填充帧确定模块502,可以包括:

第四总字节数获取单元5027,用于获取预设时段内的所述编码流的第四总字节数;

第五总字节数确定单元5028,用于用预设字节数乘以所述预设时段内的所述编码流的总帧数,得到第五总字节数;

待填充帧第三确定单元5029,用于在所述第五总字节数大于所述第四总字节数的情况下,将所述预设时段内所述编码流中的一帧或多帧,确定为待填充帧;

所述第一字节数确定模块503,可以包括:

第六总字节数确定单元5033,用于用所述第五总字节数减去所述第四总字节数,得到所述预设时段内的所述编码流需要填充的第六总字节数;

第一字节数第三确定单元5034,用于将所述预设时段内的所述编码流需要填充的第六总字节数,分配给所述预设时段内的所述编码流中的所有待填充帧,得到所述预设时段内的所述编码流中所述待填充帧需要填充的第一字节数。

综上所述,在本发明实施例中,在视频编码后,在编码流中待填充帧需要填充的情况下,在待填充帧中填充空值的填充字节,进而从很大程度上避免了实时推送的编码流因为码率波动较大,导致的在播放端上播放异常的问题,能够从很大程度上避免编码流在视频播放端的播放异常,进而从很大程度上改善了编码流在视频播放端的播放效果。同时,在编码流中待填充帧的起始码之前,填充与起始码的值不同的填充字节,由于填充字节位于起始码之前,且与起始码的值不同,而播放端是从起始码开始,才解码作为播放内容,上述填充字节不会被解码为播放内容,进而上述填充字节不会改变播放内容,也无需更改编码协议、封装协议等,适用范围广,且操作简便快捷。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本发明实施例还提供了一种电子设备,如图10所示,包括处理器91、通信接口92、存储器93和通信总线94,其中,处理器91,通信接口92,存储器93通过通信总线94完成相互间的通信,

存储器93,用于存放计算机程序;

处理器91,用于执行存储器93上所存放的程序时,实现如下步骤:

对视频流进行视频编码,得到编码流;

在所述编码流中确定待填充帧;

确定所述待填充帧需要填充的第一字节数;

在所述待填充帧的起始码之前,填充数量为所述第一字节数的填充字节;所述填充字节的值与所述起始码的值不同;

将填充后的编码流封装,并推送至视频播放端。

上述终端提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的视频推送方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的视频推送方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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