一种视频中的弹幕防遮挡方法、计算设备及可读存储介质与流程

文档序号:25490769发布日期:2021-06-15 21:56阅读:144来源:国知局
一种视频中的弹幕防遮挡方法、计算设备及可读存储介质与流程

本发明涉及计算机领域,尤其涉及一种视频中的弹幕防遮挡方法、装置、视频播放器、计算设备及可读存储介质。



背景技术:

近年来,随着网络5g技术、视频直播技术的蓬勃发展,视频不再简单的只由视频和音频这两种流组成。为了增强互动性和趣味性,往往会在视频中加入一些字幕流。但是,字幕在呈现时其是覆盖在原视频上的,因此会导致覆盖区域里某些重要的视频信息无法被用户看到,影响用户体验。

针对于此,现有技术提出了一种基于c/s架构的防弹幕处理技术。具体的实现方式为:服务器解析待处理视频的每一帧图像数据时,利用图像识别技术获取每一帧图像数据中目标对象的掩膜。然后,将掩膜进行二值化处理得到二值化掩膜图像或目标对象的轮廓的坐标。最后,将所有的二值化掩膜图像按照视频帧图像顺序合成一个二值化掩膜视频或将所有的坐标合成一个轮廓坐标数据包,发送给客户端。客户端接收到的是二值化掩膜视频时,将二值化图像与解码出的帧图像进行逻辑与操作,实现防遮挡效果;接收到的是轮廓坐标数据包时,利用遮罩层对轮廓坐标内的帧内容进行防遮挡处理。

然而,这种防弹幕处理技术存在三方面的问题:1)服务器需使用图像识别技术(如ai,opencv等)来提取每一帧图像数据中的目标对象的位置信息掩膜或轮廓坐标,图像识别技术训练时会占用大量cpu/gpu资源,且不同的目标对象通常得使用不同的识别算法,因此成本非常高。2)利用图像识别技术检测目标非常复杂。3)服务器需将获取到目标对象的位置信息掩膜或轮廓坐标随着视频数据一并发送至客户端,因此需占用额外的带宽。

为此,噬需一种弹幕防遮挡方法来解决上述技术方案中存在的问题。



技术实现要素:

为此,本发明提供了一种视频中的弹幕防遮挡方法、装置、视频播放器、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供一种视频中的弹幕防遮挡方法,适于在计算设备中执行,该方法包括:根据视频中视频帧的编码信息,确定视频帧的类型;当视频帧为非关键帧时,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量;基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分;根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染,以实现弹幕的防遮挡。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,基于视频中各编码块的运动矢量,确定视频帧中的运动部分的步骤,包括:根据视频帧中各编码块的运动矢量,计算每个编码块的运动幅度;将运动幅度大于第一预定值的编码块作为有效编码块;根据有效编码块的坐标,确定视频帧中的运动部分。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,在根据有效编码块的坐标,确定视频帧中的运动部分的步骤中,根据有效编码块的坐标,将所有的有效编码块划分为若干个运动部分。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,根据有效编码块的坐标,将所有的有效编码块划分为若干个运动部分的步骤,包括:根据有效编码块的坐标,获取基准编码块,其中,基准编码块为纵坐标最小的有效编码块中横坐标最小的编码块;根据有效编码块的坐标,获取满足预设条件的有效编码块,其中,预设条件为横坐标大于等于基准编码块的横坐标且小于等于基准编码块的横坐标与第二预定值之和、纵坐标大于等于基准编码块的纵坐标且小于等于基准编码块的纵坐标与第二预定值之和;将满足预设条件的有效编码块所在的区域处理为一个矩形;基于剩余的有效编码块的坐标,重复上述步骤,直至将所有的有效编码块划分为若干个矩形为止;将每个矩形作为一个运动部分。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,在基于剩余的有效编码块的坐标,重复上述步骤,直至将所有的有效编码块被划分为若干个矩形为止的步骤之后,还包括:根据每个矩形的坐标,将相邻的矩形合并为一个矩形。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染的步骤,包括:根据视频对应的弹幕流数据,获取视频帧中每条弹幕的每个字体的坐标;根据视频帧中每条弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的弹幕与运动部分是否有交集;若有交集,将与运动部分有交集的字体进行不显示处理。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染的步骤,包括:根据视频对应的弹幕流数据,获取视频帧中每条弹幕的类型,其中,弹幕的类型包括动态弹幕和静态弹幕;对于视频帧中的动态弹幕,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的首字体坐标;获取视频帧中动态弹幕的首字体坐标和位置存储器中存储的动态弹幕的首字体坐标的差值;当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值大于等于第三预定值时,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的每个字体的坐标,并将获取到的动态弹幕的首字体坐标写入位置存储器;根据视频帧中动态弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的动态弹幕与运动部分是否有交集;若有交集,将与运动部分有交集的字体进行不显示处理。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,还包括:当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值小于第三预定值时,继续保持动态弹幕的显示形式。

可选地,在根据本发明的视频中的弹幕防遮挡方法中,在将与运动部分有交集的字体进行不显示处理的步骤中,通过将与运动部分有交集的字体的透明度设置为全透明,来将与运动部分有交集的字体进行不显示处理。

根据本发明的又一个方面,提供一种视频中的弹幕防遮挡装置,驻留在计算设备中,该装置包括:第一确定模块,适于根据视频中视频帧的编码信息,确定视频帧的类型;获取模块,适于当视频帧为非关键帧时,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量;第二确定模块,适于基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分;渲染模块,适于根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染,以实现弹幕的防遮挡。

可选地,在根据本发明的视频中的弹幕防遮挡装置中,第二确定模块,包括:计算子模块,适于根据视频帧中各编码块的运动矢量,计算每个编码块的运动幅度;筛选子模块,适于将运动幅度大于第一预定值的编码块作为有效编码块;确定子模块,适于根据有效编码块的坐标,确定视频帧中的运动部分。

可选地,在根据本发明的视频中的弹幕防遮挡装置中,确定子模块通过如下方式来确定视频帧中的运动部分:根据有效编码块的坐标,将所有的有效编码块划分为若干个运动部分。

可选地,在根据本发明的视频中的弹幕防遮挡装置中,渲染模块通过如下方式来对视频帧中的弹幕进行渲染:根据视频对应的弹幕流数据,获取视频帧中每条弹幕的每个字体的坐标;根据视频帧中每条弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的弹幕与运动部分是否有交集;若有交集,将与运动部分有交集的字体进行不显示处理。

可选地,在根据本发明的视频中的弹幕防遮挡装置中,渲染模块通过如下方式来对视频帧中的弹幕进行渲染:根据视频对应的弹幕流数据,获取视频帧中每条弹幕的类型,其中,弹幕的类型包括动态弹幕和静态弹幕;对于视频帧中的动态弹幕,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的首字体坐标;获取视频帧中动态弹幕的首字体坐标和位置存储器中存储的动态弹幕的首字体坐标的差值;当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值大于等于第三预定值时,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的每个字体的坐标,并将获取到的动态弹幕的首字体坐标写入位置存储器;根据视频帧中动态弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的动态弹幕与运动部分是否有交集;若有交集,将与运动部分有交集的字体进行不显示处理。

根据本发明的又一个方面,提供一种视频播放器,包括:解码装置、播放装置以及根据本发明的弹幕防遮挡装置。

根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行根据本发明的视频中的弹幕防遮挡方法的指令。

根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行根据本发明的视频中的弹幕防遮挡方法。

根据本发明的视频中的弹幕防遮挡方法,首先根据视频中视频帧的编码信息,确定视频帧的类型。对于视频帧中的非关键帧,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量。然后,基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分。最后,根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染。可见,本发明是利用帧间预测信息来获取运动部分,简便快捷、成本低。

并且,本发明是在客户端侧根据帧间的编码信息来获取运动部分,这样服务器将视频数据发送给客户端时无需再携带目标对象的相关信息,减少了对带宽的消耗。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的计算设备100的结构框图;

图2示出了根据本发明一个实施例的视频中的弹幕防遮挡方法200的流程图;

图3示出了根据本发明一个实施例的某一帧视频画面中运动部分的示意图;

图4示出了根据本发明一个实施例的视频中的弹幕防遮挡装置400的结构图;

图5示出了根据本发明一个实施例的视频播放器500的结构图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

针对前文所述的目前的防弹幕处理技术存在的问题,本发明提出了一种新的防弹幕处理方法,在客户端侧利用帧间编码的预测信息来获取视频帧中的运动部分,然后对运动部分区域的弹幕进行不显示处理。利用帧间预测信息获取到的运动部分其很大可能代表的是运动目标,因此对运动部分区域中的字幕进行不显示处理,便可实现弹幕的防遮挡效果。本发明利用帧间预测信息获取运动部分相比于利用目标检测技术来识别目标区域简便快捷、成本低。并且,本发明在客户端侧根据帧间的编码信息便可获得运动部分,从而服务器只需将视频数据发送给客户端即可,减少了对带宽的消耗。

图1示出了根据本发明一个实施例的计算设备100的结构框图。需要说明的是,图1所示的计算设备100仅为一个示例,在实践中,用于实施本发明的视频中的弹幕防遮挡方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图1所示的计算设备100相同,也可以与图1所示的计算设备100不同。实践中用于实施本发明的视频中的弹幕防遮挡方法的计算设备可以对图1所示的计算设备100的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。

如图1所示,在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(µp)、微控制器(µc)、数字信息处理器(dsp)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器ram,磁盘中的数据需要加载至物理内存中才能够被处理器104读取。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。操作系统120例如可以是linux、windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用122包括用于实现各种用户期望的功能的程序指令,应用122例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境ide、编译器等)等,但不限于此。当应用122被安装到计算设备100中时,可以向操作系统120添加驱动模块。

在计算设备100启动运行时,处理器104会从存储器106中读取操作系统120的程序指令并执行。应用122运行在操作系统120之上,利用操作系统120以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用122时,应用122会加载至存储器106中,处理器104从存储器106中读取并执行应用122的程序指令。

计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个a/v端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个i/o端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

在根据本发明的计算设备100中,应用122包括用于执行本发明的视频中的弹幕防遮挡方法200的指令,该指令可以指示处理器104执行本发明的视频中的弹幕防遮挡方法。本领域技术人员可以理解,除了用于执行视频中的弹幕防遮挡方法200的指令之外,应用122还可以包括用于实现其他功能的其他应用126。

图2示出了根据本发明一个实施例的视频中的弹幕防遮挡方法200的流程图,方法200适于在计算设备(例如图1所示的计算设备100)中执行,并且方法200应用于客户端。如图2所示,该方法200始于步骤s210。

在步骤s210中,根据视频中视频帧的编码信息,确定视频帧的类型。其中,视频帧的类型包括关键帧和非关键帧。

关键帧i帧是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,即全部为帧内编码。非关键帧包括p帧和b帧。p帧记录的是当前帧与前一帧(前一帧可能是i帧也可能是p帧)的差别,需要参考前面的帧进行编码。b帧记录的是本帧与前后帧的差别,需要参考前后帧进行编码。可见,关键帧采用的是帧内编码的方式,非关键帧采用的是帧间编码的方式。因此,根据视频帧的编码信息,便可获得任一视频帧的类型。另外,该视频可以是从服务器端接收到的视频,客户端对其进行解码。

随后进入步骤s220,当视频帧为非关键帧时,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量。其中,帧间预测信息包括编码块的终止坐标和起始坐标。编码块的终止坐标是指编码块在当前帧中的坐标,编码块的起始坐标指的是编码块的参考块在参考帧中的坐标。以当前帧为例,当前帧的帧间预测信息包括当前帧中各编码块在当前帧中的坐标,以及当前帧中各编码块的参考块在参照帧中的坐标。因此,根据帧间预测信息中记录的各编码块的起始坐标和终止坐标,便可获得视频帧中各编码块的运动矢量。

随后进入步骤s230,基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分。根据本发明的一个实施例,可以通过如下步骤来确定视频帧中的运动部分。

首先,根据视频帧中各编码块的运动矢量,计算每个编码块的运动幅度。其中,编码块的运动幅度指的是编码块的运动矢量的大小,或者说是运动矢量的模。根据本发明的一个实施例,可以根据各编码块的运动矢量的坐标,利用勾股定理来计算各编码块的运动矢量的大小,进而获得各编码块的运动幅度。

然后,将运动幅度大于第一预定值的编码块作为有效编码块。根据本发明的一个实施例,为了减小处理的数据量、提高处理速度,可以对视频帧中的编码块进行过滤,将视频帧中包含的那些不重要的、肉眼难以识别的微小的运动内容过滤掉。具体地,可以通过设置一个运动幅度过滤值来实现。根据一个实施例,将运动幅度小于等于第一预定值的编码块过滤掉,仅保留那些运动幅度大于第一预定值的编码块,将其作为有效编码块(如图3中动物所在区域的各个箭头)。其中,第一预定值的大小可以设定为5个像素(5个像素大小为人眼刚好能识别的界限值)。当然,后续还可以根据视频的播放效果对其进行调整。关于第一预定值的取值在此不做具体限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

最后,根据有效编码块的坐标,确定视频帧中的运动部分。根据本发明的一个实施例,根据有效编码块的坐标,将所有的有效编码块划分为若干个部分,并将每个部分作为一个运动部分,这样可以减少后续判断运动部分与弹幕是否有交集的次数,从而可以提高处理速度。根据一个实施例,可以通过如下五个步骤来将所有的有效编码块划分为若干个运动部分。

第一步,根据有效编码块的坐标,获取基准编码块,其中,基准编码块为纵坐标最小的有效编码块中横坐标最小的编码块。具体地,根据有效编码块的坐标,先从有效的编码块中找出纵坐标最小的有效编码块,然后再从纵坐标最小的那些有效编码块中找出横坐标最小的编码块,将这一编码块作为基准编码块。以一帧图像为例,获取的这一基准编码块实质上就是这帧图像上所有有效编码块中最上面一行最左侧的那个编码块。

第二步,根据有效编码块的坐标,获取满足预设条件的有效编码块,其中,预设条件为横坐标大于等于基准编码块的横坐标且小于等于基准编码块的横坐标与第二预定值之和、纵坐标大于等于基准编码块的纵坐标且小于等于基准编码块的纵坐标与第二预定值之和。也就是说,在基准编码块的右方和下方,搜索那些横坐标小于等于基准编码块的横坐标与第二预定值之和、纵坐标小于等于基准编码块的纵坐标与第二预定值之和的有效编码块。根据本发明的一个实施例,可以将第二预定值的取值范围设定在0至s/2之间,其中s为弹幕中一个字体的宽度。需要说明的是,关于第二预定值的取值范围在此不做具体限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

第三步,将满足预设条件的有效编码块所在的区域处理为一个矩形。显示屏上像素点之间构成的基本图形为矩形,因此为了便于后续的处理,可以将满足预设条件的有效编码块近似处理为一个矩形。

第四步,基于剩余的有效编码块的坐标,重复上述步骤一至三,直至将所有的有效编码块划分为若干个矩形为止。具体地,在获取到第一个矩形区域后,继续从剩余的有效编码块中(除去第一个矩形区域中包含的有效编码块)获取下一个基准编码块(按照第一步的方法)并进行更新,然后按照第二步和第三步的方法获取第二个矩形区域,接下来一直重复上述步骤,直到所有的有效编码块被划分为若干个矩形。

根据本发明的一个实施例,为了进一步地提高处理速度,还可以根据获取到的每个矩形的坐标,来将相邻的矩形合并为一个矩形。其中,距离为单位1(即1个像素)的两个矩形为相邻矩形,如图3中矩形r1和r2。r1上顶点的纵作坐标和r2上顶点的纵坐标相同,r1下顶点的纵作坐标和r2下顶点的纵坐标相同,当r1右上角顶点的横坐标和r2左上角顶点的横坐标之间的距离为单位1时,r1和r2为相邻矩形,这时便可以将r1和r2合并为一个矩形。r1和r2为横向相邻的两个矩形。纵向相邻矩形的具体判定方法和横向相邻矩形的判定方法类似,在此不再举例说明。

第五步,将获取到的每个矩形作为一个运动部分。根据本发明的一个实施例,在获得运动部分之后,可以根据运动部分的坐标,将运动部分按照一定的顺序存储到一个目标存储器中。例如,以运动部分左上角顶点的纵坐标为基准,按照从小到大的顺序将运动部分存储到目标存储器。对于纵坐标相同的运动部分,则按照左上角顶点的横坐标由小到大的顺序对其进行存储。其中,目标存储器可以为内存中的一个数组,也可以为cpu中的一个寄存器。

根据本发明的一个实施例,获取视频帧中的运动部分的示例性代码如下:

//获取当前帧的运动预测数据

avframesidedata*sd=av_frame_get_side_data(frame,av_frame_data_motion_vectors);

if(sd){

inti;

constavmotionvector*mvs=(constavmotionvector*)sd->data;

intold_src_x=0;

intold_src_y=0;

//遍历获取所有的运动数据

for(i=0;i<sd->size/sizeof(*mvs);i++){

constavmotionvector*mv=&mvs[i];

constintdirection=mv->source>0;

if(s->mv)

if((direction==0&&(s->mv&mv_p_for)&&frame->pict_type

==av_picture_type_p)||

(direction==0&&(s->mv&mv_b_for)&&frame->pict_type

==av_picture_type_b)||

(direction==1&&(s->mv&mv_b_back)&&frame->pict_type

==av_picture_type_b))

//从屏幕左边开始时进行初始化

if(old_src_x==0){

old_src_x=mv->dst_x;

old_src_y=mv->dst_y;

}

//处理数据

do_rect(old_src_x,old_src_y,mv->dst_x,mv->dst_y,mv->src_x,mv->src_y,frame->width,frame->height,direction);

voiddo_rect(unsignedint&old_src_x,unsignedint&old_src_y,unsignedintdst_x,unsignedintdst_y,

unsignedintsrc_x,unsignedintsrc_y,unsignedintwidth,unsignedintheight,unsignedintdirection){

//处理下一行运动数据时,更新old_src_x,old_src_y的值

if(old_src_y>=src_y){//下一行时,src_y的值肯定小于old_src_y

old_src_x=src_x;

old_src_y=src_y;

}

//运动幅度小于i,不处理

if(abs(dst_x-src_x)<i||abs(dst_y-src_y)<i){

return;

}

//若是后向预测(direction=1),交换坐标

if(direction){

ffswap(int,dst_x,src_x);

ffswap(int,dst_y,src_y);

}

//通过p过滤运动数据,通过增加坐标间隔。>=p时或处于边界时保存矩形;<p时,继续遍历

if(abs(src_x-old_src_x)<=p&&abs(src_y-old_src_y<=p)){

return;

}

//>p时,保存矩形,并更新当前行的old_src_x,old_src_y

old_src_x=src_x;

old_src_y=src_y;

structrectrect;

rect.lefttopx=old_src_x;

rect.lefttopy=old_src_y;

rect.righttopx=src_x;

rect.righttopy=src_y;

rect.rightbottomx=dst_x;

rect.rightbottomy=dst_y;

//顺序存入矩形数组

array[index]=rect;

index++;

}

随后进入步骤s240,根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染,以实现弹幕的防遮挡。根据本发明的一个实施例,可以通过如下步骤来对任一视频帧中的弹幕进行渲染。

首先,根据视频对应的弹幕流数据,获取视频帧中每条弹幕的每个字体的坐标。其中,弹幕流数据包括每条弹幕的类型、起始时间、终止时间、起始坐标、每个字体的索引以及单个字体的偏移量。具体地:

根据弹幕流数据中记录的每条弹幕的类型、起始时间、终止时间和起始坐标,获取视频帧中每条弹幕的首字体坐标。接着,根据每条弹幕的首字体坐标、每个字体的索引以及单个字体的偏移量,利用算式c=t+d*n来获取每条弹幕中每个字体的坐标。其中,c为某条弹幕中待求取字体的坐标,t为这条弹幕中首字体的坐标,d为单个字体的偏移量,n为待求取字体的索引(若待求取字体在这条弹幕中为第3个字体,其索引值为2)。

另外,对于静态弹幕,当利用上述方法首次获取到每个字体的坐标后,可以将其存储到一个坐标存储器中。这样,在其他的视频帧中可以通过直接读取坐标存储器中的坐标来获取这条弹幕的每个字体的坐标,从而可以提高处理的速度。其中,坐标存储器可以为内存中的一个数组,也可以为cpu中的一个寄存器。

然后,根据视频帧中每条弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的弹幕与运动部分是否有交集。若有交集,将与运动部分有交集的字体进行不显示处理,与运动部分无交集的字体则正常显示。其中,可以通过将与运动部分有交集的字体的透明度设置为全透明来实现对有交集字体的不显示处理。当然,也可以利用其他的方法将与运动部分有交集的字体进行不显示处理,在此不做具体限制。另外,在判断视频帧中的弹幕与运动部分是否有交集时,可以利用二分法来遍历目标存储器。

根据本发明的另一个实施例,基于人眼的动态视觉特性,还可以每当动态弹幕的移动距离大于一定阈值时,判断一次其与运动部分是否有交集,具体地可以通过如下步骤来对任一视频帧中的弹幕进行渲染。

首先,根据视频对应的弹幕流数据,获取视频帧中每条弹幕的类型,其中,弹幕的类型包括动态弹幕和静态弹幕。对于视频帧中的任一动态弹幕,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的首字体坐标。

接着,获取视频帧中动态弹幕的首字体坐标和位置存储器中存储的动态弹幕的首字体坐标的差值。其中,这里所涉及的动态弹幕指的是同一条动态弹幕。即,位置存储器中存储的动态弹幕和视频帧中的动态弹幕是同一条弹幕。根据一个实施例,可以根据视频帧中动态弹幕的首字体左上角顶点的坐标和位置存储器中存储的动态弹幕的首字体左上角顶点的坐标,来获取这两点之间的横坐标差,并将这一横坐标差作为视频帧中动态弹幕的首字体坐标和位置存储器中存储的动态弹幕的首字体坐标的差值。

然后,当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值大于等于第三预定值时,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的每个字体的坐标,并将获取到的动态弹幕的首字体坐标写入位置存储器,即每当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值大于等于第三预定值时,更新位置存储器。其中,位置存储器中最初存储的是动态弹幕的起始坐标,即弹幕流中记录的起始坐标。另外,可以将第三预定值设定为一个字体的宽度。这里仅是给出了一个示例,关于第三预定值的取值在此不做具体限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。在此还需说明一点,这里所提及的动态弹幕的首字体至始至终指的都是这条弹幕的第一个字体,而并不是在这帧视频画面中这条弹幕出现的第一个字体。

最后,根据视频帧中动态弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的动态弹幕与运动部分是否有交集。若有交集,将与运动部分有交集的字体进行不显示处理,与运动部分无交集的字体则正常显示。其中,可以通过将与运动部分有交集的字体的透明度设置为全透明来实现对有交集字体的不显示处理。

其中,当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值小于第三预定值时,继续保持动态弹幕的显示形式。即,这条动态弹幕在该视频帧中的显示形式与其在上一视频帧中的显示形式相同。

而对于静态弹幕,仍然是每帧判断一次其与运动部分是否有交集,若有交集则对与运动部分有交集的字体进行不显示处理,具体的可参见上述实施例,在此不再赘述。

可见,本实施例对于动态弹幕并不是每帧画面都判断一次其与运动部分是否有交集,而是每当其移动距离大于一定阈值时判断一次其与运动部分是否有交集,这样可以大大减小处理的数据量,提高处理速度,并且还能保证弹幕的防遮挡效果。

图4示出了根据本发明一个实施例的视频中的弹幕防遮挡装置400的结构框图,适于驻留在计算设备中100中。如图4所示,该弹幕防遮挡装置400包括第一确定模块410、获取模块420、第二确定模块430、渲染模块440。

第一确定模块410,适于根据视频中视频帧的编码信息,确定视频帧的类型。

获取模块420,适于当视频帧为非关键帧时,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量。

第二确定模块430,适于基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分。根据本发明的一个实施例,第二确定模块430包括计算子模块、筛选子模块和确定子模块。其中,计算子模块,适于根据视频帧中各编码块的运动矢量,计算每个编码块的运动幅度。筛选子模块,适于将运动幅度大于第一预定值的编码块作为有效编码块。确定子模块,适于根据有效编码块的坐标,确定视频帧中的运动部分。

根据一个实施例,确定子模块可以根据有效编码块的坐标,来将所有的有效编码块划分为若干个运动部分,以得到视频帧中的运动部分。

具体地,首先根据有效编码块的坐标,获取基准编码块,其中,基准编码块为纵坐标最小的有效编码块中横坐标最小的编码块。其次,根据有效编码块的坐标,获取满足预设条件的有效编码块,其中,预设条件为横坐标大于等于基准编码块的横坐标且小于等于基准编码块的横坐标与第二预定值之和、纵坐标大于等于基准编码块的纵坐标且小于等于基准编码块的纵坐标与第二预定值之和。然后,将满足预设条件的有效编码块所在的区域处理为一个矩形。接着,基于剩余的有效编码块的坐标,重复上述步骤,直至将所有的有效编码块划分为若干个矩形为止。最后,将每个矩形作为一个运动部分。

渲染模块440,适于根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染,以实现弹幕的防遮挡。具体地,首先根据视频对应的弹幕流数据,获取视频帧中每条弹幕的每个字体的坐标。然后,根据视频帧中每条弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的弹幕与运动部分是否有交集。若有交集,将与运动部分有交集的字体进行不显示处理。其中,可以通过将与运动部分有交集的字体的透明度设置为全透明,来实现对有交集字体的不显示处理。

根据本发明的另一个实施例,渲染模块440还可以通过如下方式来对视频帧中的弹幕进行渲染。

首先,根据视频对应的弹幕流数据,获取视频帧中每条弹幕的类型,其中,弹幕的类型包括动态弹幕和静态弹幕。对于视频帧中的动态弹幕,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的首字体坐标。然后,获取视频帧中动态弹幕的首字体坐标和位置存储器中存储的动态弹幕的首字体坐标的差值。当视频帧中动态弹幕的首字体坐标与存储的动态弹幕的首字体坐标之间的差值大于等于第三预定值时,根据视频对应的弹幕流数据,获取视频帧中动态弹幕的每个字体的坐标,并将获取到的动态弹幕的首字体坐标写入位置存储器。最后,根据视频帧中动态弹幕的每个字体的坐标和运动部分的坐标,判断视频帧中的动态弹幕与运动部分是否有交集。若有交集,将与运动部分有交集的字体进行不显示处理。

根据本发明的视频中的弹幕防遮挡装置400,其具体细节已在基于图1至图3的描述中详细公开,在此不再赘述。

图5示出了根据本发明一个实施例的视频播放器500的结构图。如图5所示,该播放器包括解码装置510、播放装置520和根据本发明实施例的视频中的弹幕防遮挡装置530。

根据本发明的视频中的弹幕防遮挡方法,首先根据视频中视频帧的编码信息,确定视频帧的类型。对于视频帧中的非关键帧,根据视频帧的帧间预测信息,获取视频帧中各编码块的运动矢量。然后,基于视频帧中各编码块的运动矢量,确定视频帧中的运动部分。最后,根据视频对应的弹幕流数据和视频帧中运动部分的坐标,对视频帧中的弹幕进行渲染。可见,本发明是利用帧间预测信息来获取运动部分,简便快捷、成本低。并且,本发明是在客户端侧根据帧间的编码信息来获取运动部分,因此服务器无需再将目标对象的相关信息发送给客户端,只需将视频数据发送给客户端即可,减少了对带宽的消耗。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的文档加载方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

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