1.本技术涉及视频处理技术领域,尤其涉及一种基于统计的视频处理方法及设备。
背景技术:2.在视频通话过程中,视频的发送方存在于两处,一种是终端,视频流来自摄像头,另外一种是在云端,它是终端上摄像头的延伸,是为了适配不同订阅方的下行网络情况而虚拟出来的一个视频源。无论在终端,还是在云端,发送视频时的网络带宽总是存在波动,时大时小,在带宽变小时,如果不对视频进行任何处理,那么视频接收方体验到的视频就会出现卡顿、不流畅的现象。为了最大程度的避免这种现象,就需要在发送端对视频做一些自适应的处理工作,比如降低视频分辨率或者降低视频帧率之后,采用低一些的编码码率发送视频,以适应当前的带宽,保证视频的流畅性。
3.但是降低视频分辨率对于视频的清晰度有较大的损失,对于一些对清晰度要求不高的场景,比如普通的视频电话,降低分辨率带来的视觉效果可能影响不大,但是对于一些对清晰度要求很高的场景,比如视频会议中桌面共享的视频,往往共享的是注重文字细节的内容,需要较高的清晰度,这个时候就不能降低分辨率了,而只能采用降低视频帧率的方式。但是传统的降低视频帧率的方法多是采用在带宽出现波动时丢弃前面的若干个帧的策略,即碰到带宽变小的情况就连续丢帧,这样会导致带宽变小时,视频接收方呈现出来的视频有卡顿感。这种方法虽然保证了清晰度,但是会牺牲一部分的流畅性,仍旧没有解决视频卡顿的问题。
技术实现要素:4.本技术实施例提供了一种基于统计的视频处理方法及设备,用于解决如下技术问题:现有的降低视频帧率的方法对于视频帧的保留和丢弃策略不合理,不能保证视频的流畅性,可能会出现视频卡顿现象。
5.本技术实施例采用下述技术方案:
6.一方面,本技术实施例提供了一种基于统计的视频处理方法,方法包括:实时检测接收到的视频输入序列的当前输入帧率,并实时检测服务器的当前可用带宽;基于目标编码码率、所述当前输入帧率以及所述当前可用带宽,确定目标输出帧率;其中,所述目标编码码率是根据所述视频输入序列的分辨率以及最大帧率而得到的;基于所述目标输出帧率、所述当前输入帧率以及预存的抽帧因子表,确定所述视频输入序列对应的当前抽帧因子;基于所述当前抽帧因子,生成当前抽帧映射表;根据所述视频输入序列中当前视频帧的帧序号,确定所述当前视频帧在所述当前抽帧映射表中的值;基于所述当前视频帧在所述当前抽帧映射表中的值,确定所述当前视频帧是否需要保留。
7.本技术实施例根据当前的可用带宽,自适应地计算目标输出帧率,然后根据目标输出帧率生成抽帧映射表,再根据抽帧映射表确定当前视频帧序列中哪些帧要保留,哪些帧要丢弃。且要丢弃的帧是均匀分布的。通过此方案进行视频抽帧,可以使视频根据带宽的
变化进行自适应且均匀地抽帧,避免视频产生卡顿现象。
8.在一种可行的实施方式中,基于所述当前视频帧在所述当前抽帧映射表中的值,确定所述当前视频帧是否需要保留,具体包括:若所述当前视频帧在所述当前抽帧映射表中的值为1,则保留所述当前视频帧;若所述当前视频帧在所述当前抽帧映射表中的值为0,则丢弃所述当前视频帧。
9.在一种可行的实施方式中,在基于所述当前视频帧在所述当前抽帧映射表中的值,确定所述当前视频帧是否需要保留之后,所述方法还包括:将保留下来的所有视频帧按照时间顺序进行排列,得到视频输出序列;将所述视频输出序列发送到视频编码器进行编码,得到输出视频流;将所述输出视频流发送到视频接收端。
10.在一种可行的实施方式中,所述实时检测接收到的视频输入序列的当前输入帧率,具体包括:通过预创建的帧数统计脚本,统计脚本执行时间内接收到的所述视频输入序列的帧数;用接收到的所述视频输入序列的帧数除以所述脚本执行时间,得到所述视频输入序列的当前输入帧率;其中,所述帧数统计脚本每a秒执行一次,且所述a的值与所述帧数统计脚本对应的定时器触发时间有关。
11.由于在视频通话过程中,在有些场景下,需要先将视频发送方发出的视频保存在云端,然后再从云端发送到视频接收方,在传输过程中,可能会造成视频丢帧的现象,因此,需要实时检测当前的视频输入的实时帧率。
12.在一种可行的实施方式中,基于所述目标编码码率、所述当前输入帧率以及所述当前可用带宽,确定目标输出帧率,具体包括:根据n=m*b/t,得到所述目标输出帧率n;其中,m为所述当前输入帧率,b为所述当前可用带宽,t为所述目标编码码率。
13.在一种可行的实施方式中,基于所述目标输出帧率、所述当前输入帧率以及预存的抽帧因子表,确定所述视频输入序列的当前抽帧因子,具体包括:预存一张抽帧因子表;其中,所述抽帧因子表中包含索引行、分子行以及分母行,所述抽帧因子表的每一列中都有一个索引值对应一个分子值以及一个分母值;根据r=n/m,得到所述视频输入序列的抽帧比例r;在r等于1的情况下,保留所述视频输入序列中的所有视频帧;在r小于1的情况下,在r小于1的情况下,将所述抽帧因子表每一列中的分子值除以分母值,得到每一列的比值;遍历所述每一列的比值,并将r与遍历到的比值进行比较;在第一次遍历到大于r的比值后,停止遍历,并将所述比值确定为第一比值;确定所述第一比值对应的索引值;将所述索引值减一,得到目标索引值;将所述目标索引值对应的分子值与分母值的比值,确定为所述当前抽帧因子;其中,所述当前抽帧因子用分数表示。
14.本技术实施例通过计算目标输出帧率与当前输入帧率的比值,确定视频输入序列的抽帧比例,然后在提前精心设计的抽帧因子表中查找合适的抽帧因子,再根据抽帧因子对应的分子和分母生成抽帧映射表,从而确定应该抽取哪些帧,丢弃哪些帧。此方案可以根据当前的目标输出帧率,在当前输入帧率中均匀地抽取视频帧。
15.在一种可行的实施方式中,在将所述索引值减一,得到目标索引值之前,所述方法还包括:若所述第一比值对应的索引值为0,则将所述目标索引值直接设为0。
16.在一种可行的实施方式中,基于所述当前抽帧因子,生成当前抽帧映射表,具体包括:生成一个预设长度的数组;将所述数组从第一个元素起每y个元素作为一个元素组;其中,y为所述当前抽帧因子的分母值;且最后一个元素组中包含的元素个数为所述预设长度
对y求模得到的值;将每个所述元素组中,前x个元素的值设为1,剩余元素的值设为0,得到所述当前抽帧映射表;其中,x为所述当前抽帧因子的分子值。
17.在一种可行的实施方式中,根据所述视频输入序列中当前视频帧的帧序号,确定所述当前视频帧在所述当前抽帧映射表中的值,具体包括:对接收到的所述视频输入序列中的每一帧视频帧设置帧序号;确定所述当前视频帧的帧序号;通过所述当前视频帧的帧序号对所述预设长度求模,得到所述当前视频帧的元素序号;在所述当前抽帧映射表中查找所述元素序号对应的值,确定为所述当前视频帧在所述当前抽帧映射表中的值。
18.另一方面,本技术实施例还提供了一种基于统计的视频处理设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有能够被所述至少一个处理器执行的指令,以使所述至少一个处理器能够执行根据上述任一项实施方式所述的一种基于统计的视频处理方法。
19.本技术实施例提供的一种基于统计的视频处理方法及设备,设计了一个抽帧因子表,以及定义了生成抽帧映射表的方法,在视频抽帧时,能够根据视频的当前输入帧率、当前网络的可用带宽等因素,对视频帧进行均匀的抽取,比丢帧方式输出的视频更加的平滑。
附图说明
20.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:
21.图1为本技术实施例提供的一种基于统计的视频处理方法流程图;
22.图2为本技术实施例提供的一种自适应平滑抽帧模块结构示意图;
23.图3为本技术实施例提供的一种基于统计的视频处理设备结构示意图。
具体实施方式
24.为了使本技术领域的人员更好地理解本技术中的技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
25.首先,本技术实施例提供了一种基于统计的视频处理方法,如图1所示,基于统计的视频处理方法具体包括步骤101-106:
26.步骤101、实时检测视频输入序列的当前输入帧率,实时检测服务器的当前可用带宽。
27.具体地,基于统计的视频处理设备中会根据视频接收方生成自适应平滑抽帧模块。其中,基于统计的视频处理设备可以是发送视频流的终端,也可以是暂存视频流的云端服务器。例如,在一对一视频通话时,视频发送方的终端中生成一个自适应平滑抽帧模块,将视频抽帧处理后发送到视频接收方。在多人视频会议中,视频发送方将一段视频发送到云端服务器暂存,可以有多人在云端服务器中订阅该视频,此时,在云端服务器中,为每个
订阅视频的人对应生成一个自适应平滑抽帧模块,分别对该视频进行抽帧处理后发送到对应的视频订阅方。
28.进一步地,在多人视频会议时,由于在将视频发送到云端服务器这个过程中,会对视频进行编码和解码等操作,从而可能会导致视频的帧率下降或波动,这种情况下,视频接收方接收到的视频的帧率不一定是最大帧率,因此,为实现自适应平滑抽帧模块的通用性,在自适应平滑抽帧模块中实现了实时检测当前视频输入帧率的功能。此功能实现方法为:预创建一个帧数统计脚本,用于统计执行时间内接收到的视频输入序列的帧数,然后用接收到的视频输入序列的帧数除以脚本的执行时间,得到视频输入序列的当前输入帧率。在帧数统计脚本中创建一个每a秒触发一次的定时器,以使帧数统计脚本每a秒自动执行一次。
29.在一个实施例中,一般情况下,定时器为每1秒触发一次,以使帧数统计脚本每秒执行一次,以统计自适应平滑抽帧模块每秒接收到的视频输入序列的实时帧率。
30.进一步地,在实时音视频领域,视频的接收方连接着发送视频的云端服务器,云端服务器在发送视频的时候可以采用某种技术实时探测当前可发送的带宽。这个值就是当前可用带宽,超过这个值发送,视频就会卡顿,低于这个值发送,带宽就会浪费。且一般情况下,当前可用带宽小于目标编码码率。因此,自适应平滑抽帧模块可通过现有检测技术实时检测云端服务器与视频接收方之间的当前可用带宽。也是因为云端服务器与各个视频接收方之间的当前可用带宽不一定相同,而当前可用带宽又是影响自适应平滑抽帧模块抽帧数量的一个重要因素,所以需要为每个视频接收方都创建一个自适应平滑抽帧模块。
31.步骤102、基于统计的视频处理设备基于目标编码码率、当前输入帧率以及当前可用带宽,确定目标输出帧率。
32.具体地,在实时音视频领域,在进行视频编码的时候会根据视频流的分辨率和最大帧率分配一个目标编码码率:比如分辨率为1920*1080,最大帧率为30帧/秒的视频流,则分配2500kbps的目标编码码率;分辨率为1280*720,最大帧率为30帧/秒的视频流,则分配1800kbps的目标编码码率等。一般情况下,视频流的帧率不超过30帧/秒,因此大多数视频流的最大帧率均为30帧/秒。因此,基于统计的视频处理设备中的自适应平滑抽帧模块接收视频发送方发送的视频输入序列,根据视频输入序列的分辨率以及最大帧率,并根据实时音频领域的要求或技术人员的经验,为该视频输入序列分配一个目标编码码率。
33.进一步地,自适应平滑抽帧模块获取到输入视频序列的目标编码码率、当前输入帧率以及当前可用带宽后,根据公式n=m*b/t,计算出目标输出帧率n。其中,m为当前输入帧率,b为当前可用带宽,t为目标编码码率。
34.步骤103、基于统计的视频处理设备基于目标输出帧率、当前输入帧率以及预存的抽帧因子表,确定视频输入序列对应的当前抽帧因子。
35.首先,基于统计的视频处理设备中的自适应平滑抽帧模块根据计算出的目标输出帧率,求出目标输出帧率与当前输入帧率的比例,该比例即为视频输入序列在当前1秒内需要抽帧的比例。具体地,根据r=n/m,得到视频输入序列在当前1秒内的抽帧比例r。
36.需要说明的是,本技术中的“抽帧”的意思为在视频输入序列中抽取需要保留的视频帧。
37.进一步地,自适应平滑抽帧模块中预存一张抽帧因子表:
38.索引012345678910111213分子11111111323459分母301510654325345610
39.表1
40.如表1所示,抽帧因子表中包含索引行、分子行以及分母行。抽帧因子表的每一列中都有一个索引值对应一个分子值以及一个分母值。需要说明的是,如表1所示的抽帧因子表为预先设计好的固定表格,一般情况下内容不会更改。
41.在抽帧比例r等于1的情况下,说明当前带宽能够保证当前视频输入序列在不丢帧的情况下完全输出,因此不需要进行抽帧,保留视频输入序列中的所有视频帧即可。
42.在抽帧比例r小于1的情况下,说明当前带宽不能够支持当前视频输入序列在不丢帧的情况下输出,因此需要进行进一步的抽帧工作,此时,自适应平滑抽帧模块求出每一列中分子值与分母值的比值,并从左往右遍历抽帧因子表每一列中的比值。
43.进一步地,每遍历到一列,均将抽帧比例r与该列的比值作比较,直至第一次找到大于抽帧比例r的比值,这个比值即为第一比值,然后确定第一比值对应的索引值。然后将这个索引值减一,得到目标索引值。再将目标索引值对应的分子值与分母值的比值,确定为当前抽帧因子,当前抽帧因子用分数表示。
44.在一个实施例中,若计算出的r为0.8,那么将0.8依次与表1中的从左到右的分子与分母的比值:1/30、1/15、1/10、1/6、
……
、9/10进行比较,直至找到第一个大于0.8的值,由于4/5为0.8,5/6约为0.83,因此,第一个大于0.8的值为5/6,对应的索引值为12。然后用12-1=11,得到目标索引值为11。由于11对应的分子为4,分母为5,因此,当前抽帧因子为4/5。
45.作为一种可行的实施方式,在第一个大于抽帧比例r的比值的索引值为0的情况下,将目标索引值设为0。
46.例如,若r为0.01,可知0.01比1/30小,那么第一个大于r的比值即为1/30,对应的索引值为0,此时,不需要用当前的索引值0减去1,而是直接用当前的索引值0作为目标索引值,此时的当前抽帧因子即为目标索引值0对应的1/30。
47.步骤104、基于统计的视频处理设备基于当前抽帧因子,生成当前抽帧映射表。
48.具体地,自适应平滑抽帧模块在得到当前抽帧因子后,首先生成一个预设长度的数组。作为一种最优的实施方式,数组的长度为30,数组元素成员为bool类型。
49.然后,根据当前抽帧因子中的分子值x以及分母值y,将数组从第一个元素起每y个元素作为一个元素组。最后一个元素组中包含的元素个数为预设长度对y求模得到的值。然后将每个元素组中,前x个元素的值设为1,剩余元素的值设为0,得到当前抽帧映射表。
50.例如:若当前抽帧因子为2/3,由于30可以被3整除,因此,数组从左往右每3个元素为一个元素组,将每个元素组中,前2个元素的值设为1,第3个元素的值设为0,得到当前抽帧因子2/3对应的当前抽帧映射表如表2所示:
51.110110110110110110110110110110
52.表2
53.若当前抽帧因子为3/4,由于30不能被4整除,因此数组从左往右每4个元素为一个元素组,最后剩余的元素构成一个元素组,因此最后一个元素组中包含30%4=2个元素,每
个元素组中前3个元素的值为1,第4个元素的值为0。最后一个元素组中有2个元素,小于3,因此这两个元素的值都为1,得到当前抽帧因子3/4对应的当前抽帧映射表如表3所示:
54.111011101110111011101110111011
55.表3
56.步骤105、基于统计的视频处理设备根据视频输入序列中当前视频帧的帧序号,确定当前视频帧在当前抽帧映射表中的值。
57.具体地,视频处理设备生成的自适应平滑抽帧模块对当前接收到的视频输入序列中的每一帧视频帧从0开始设置帧序号。视频输入序列的第一帧视频帧的帧序号为0,第二帧视频帧的帧序号为1,以此类推。
58.进一步地,自适应平滑抽帧模块先为接收到的当前视频帧设置对应的帧序号,然后通过当前视频帧的帧序号对预设长度求模,得到当前视频帧的元素序号。然后在当前抽帧映射表中查找元素序号对应的值,确定为当前视频帧在当前抽帧映射表中的值。
59.在一个实施例中,若当前的抽帧映射表如表2所示,自适应平滑抽帧模块将当前1秒内接收到的每一帧视频帧的帧序号对30求模,得到当前1秒内每一帧视频帧的元素序号。然后在表2中查找每一帧视频帧的元素序号对应的值。例如,若某一帧视频帧的帧序号为40,那么计算40%30=10,则在表2中查找第10个元素对应的值为1,即这一帧视频帧对应的当前抽帧映射表中的值为1。其中,表2中左边起第一个元素的元素序号为1,第二个元素的元素序号为2,以此类推。
60.步骤106、基于统计的视频处理设备基于当前视频帧在当前抽帧映射表中的值,确定当前视频帧是否需要保留。
61.具体地,若当前视频帧在当前抽帧映射表中的值为1,则保留当前视频帧。若当前视频帧在当前抽帧映射表中的值为0,则丢弃当前视频帧。将保留下来的所有视频帧按照时间顺序进行排列,得到视频输出序列。将视频输出序列发送到视频编码器进行编码,得到输出视频流。将输出视频流发送到视频接收端。
62.在一个实施例中,将当前1秒内在当前抽帧映射表中对应的值为1的视频帧全部保留,对应的值为0的视频帧全部丢弃,然后重新排列编码后输出一个帧率为目标输出帧率n的视频输出序列。
63.需要说明的是,上述步骤101-106仅为1秒内进行的处理过程,由于视频流的当前输入帧率以及服务器的当前可用带宽在实时变化,因此,每一秒产生的抽帧映射表都有所不同,因此,每秒都需要重复执行上述步骤101-106所述的基于统计的视频处理方法。
64.在一个实施例中,图2为本技术实施例提供的一种自适应平滑抽帧模块结构示意图,如图2所示,自适应平滑抽帧模块包含2个自适应模块:输入帧率实时检测模块以及动态抽帧映射表生成模块。
65.在图2中,一段一秒的视频输入序列进行自适应平滑抽帧的全过程为:
66.视频输入序列持续向自适应平滑抽帧模块输入视频帧。自适应平滑抽帧模块收到视频输入序列后,通过输入帧率实时检测模块,实时检测视频输入序列的当前输入帧率,并获取目标编码码率和当前可用带宽,然后将当前输入帧率m,目标编码码率t,当前可用带宽b作为参数输入动态抽帧映射表生成模块。动态抽帧映射表生成模块通过自适应平滑抽帧函数fun(m,t,b),算出当前的目标输出帧率n后,根据目标输出帧率和当前输入帧率的比值
生成抽帧映射表。自适应平滑抽帧模块根据抽帧映射表对视频输入序列进行抽帧,留下在抽帧映射表中对应1的视频帧,丢弃在抽帧映射表中对应0的视频帧,从而输出帧率为n的视频输出序列,并发送到视频编码器进行编码。
67.另外,本技术还提供了一种基于统计的视频处理设备,如图3所示,基于统计的视频处理设备300包括:
68.至少一个处理器301;以及,与至少一个处理器301通信连接的存储器302;其中,存储器302存储有能够被至少一个处理器301执行的指令,以使至少一个处理器301能够执行:
69.实时检测接收到的视频输入序列的当前输入帧率;以及实时检测服务器的当前可用带宽;
70.基于目标编码码率、当前输入帧率以及当前可用带宽,确定目标输出帧率;其中,目标编码码率是根据视频输入序列的分辨率以及最大帧率所分配得到的;
71.基于目标输出帧率、当前输入帧率以及预存的抽帧因子表,确定视频输入序列对应的当前抽帧因子;
72.基于当前抽帧因子,生成当前抽帧映射表;
73.根据视频输入序列中当前视频帧的帧序号,确定当前视频帧在当前抽帧映射表中的值;
74.基于当前视频帧在当前抽帧映射表中的值,确定当前视频帧是否需要保留。
75.本技术实施例通过在自适应平滑抽帧模块中设计了目标输出帧率计算公式、抽帧因子表、抽帧映射表生成算法,实现了对视频流的均匀抽帧,且本技术的抽帧比例可以随着当前可用带宽和视频输入序列的当前输入帧率的变化而变化,在当前可用带宽较大的情况下,抽帧比例也会大,相对应的,丢弃帧的比例就会小,这样就能够在带宽允许的条件下输出最高质量的视频流,从而充分利用带宽资源。同时,视频均匀抽帧比连续丢帧的视觉效果更好,能够减少视频卡顿现象,提升用户体验。
76.本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备、设备、非易失性计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
77.上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
78.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术的实施例可以有各种更改和变化。凡在本技术实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。