欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 视频编码方法及装置独创技术47843字

视频编码方法及装置

2021-01-26 04:43:54

视频编码方法及装置

  技术领域

  本公开涉及视频处理领域,尤其涉及视频编码方法及装置。

  背景技术

  vGTP是实时图像压缩传输协议,完全独立,自主可控,具备多编码器,渐进式编码,视觉无损图像传递,网络带宽自适应,QoS等核心技术,并且支持音频传输和反向控制通道。

  但现有vGTP视频编码在网络情况较差的场景下,适应性比较差。

  发明内容

  本公开实施例提供一种视频编码方法及装置,能够解决vGTP视频编码算法在网络情况较差的场景下,适应性比较差的问题。所述技术方案如下:

  根据本公开实施例的第一方面,提供一种视频编码方法,该方法包括:

  获取当前帧;

  在所述当前帧与参考帧不相同时,获取所述当前帧中各个宏块的宏块类型;

  若所述宏块的类型为文字宏块或图像宏块,则确定所述文字宏块或所述图像宏块的编码方法,所述文字宏块的编码方法包括:渐进编码或文字编码;所述图像宏块的编码方法包括:分层编码或渐进编码;

  根据所述各个宏块类型对应的编码方法对所述各个宏块进行编码得到多个编码数据;

  根据所述多个编码数据获取所述当前帧的编码数据。

  本公开提供一种视频编码方法,包括:获取当前帧;在当前帧与参考帧不相同时,获取当前帧中各个宏块的宏块类型;若宏块的类型为文字宏块或图像宏块,则确定文字宏块或图像宏块的编码方法,文字宏块的编码方法包括:渐进编码或文字编码;图像宏块的编码方法包括:分层编码或渐进编码;根据各个宏块类型对应的编码方法对各个宏块进行编码得到多个编码数据;根据多个编码数据获取当前帧的编码数据。其中,由于在编码时,并未一成不变的使用分层式的编码方式或渐进式的编码方式,而是会根据当前网络情况选择不同的编码方式,以让编码后的码流可以更加适应当前网络传输,因此,本公开中的视频编码方法可以不同网络条件,不同需求下使用的不相同的处理流程,可配性较高。

  在一个实施例中,当所述宏块类型为图像宏块时,所述确定所述图像宏块的编码方法,包括:

  对所述图像宏块执行余弦变换,并采用第一预设量化参数进行量化得到第一数据;

  判断当前码率控制策略是否为第一码率控制策略;

  若是,确定所述图像宏块的编码方法为分层编码;

  若否,确定所述图像宏块的编码方法为渐进式编码。

  在一个实施例中,当所述宏块的类型为文字宏块时,所述确定所述文字宏块的编码方法,包括:

  判断当前码率控制策略是否为第二码率控制策略;

  若是,确定所述文字宏块的编码方法为所述渐进式编码;

  若否,确定所述文字宏块的编码方法为所述文字编码方式。

  在一个实施例中,所述获取所述当前帧中各个宏块的宏块类型之前,所述方法还包括:

  在所述当前帧与所述参考帧不相同时,判断所述当前帧是否为全帧h.264编码;

  若是,采用h.264编码方法对所述当前帧进行编码;

  若否,判断当前帧是否为全帧vGTP编码;

  若是,则进行全局运动矢量预测,得到预测结果;

  若否,则进行视频窗口识别,对视频窗口识别结果进行全局运动矢量预测,得到预测结果;

  所述获取所述当前帧中各个宏块的宏块类型,包括:

  根据所述预测结果确定当前帧中各个宏块的宏块类型。

  在一个实施例中,所述根据所述预测结果确定当前帧中各个宏块的宏块类型,包括:

  根据所述预测结果逐一判断当前帧中各个宏块的宏块类型;

  所述根据所述各个宏块类型对应的编码方法对所述各个宏块进行编码得到多个编码数据,包括:

  根据当前宏块的宏块类型对应的编码方法对所述当前宏块进行编码。

  在一个实施例中,所述根据所述预测结果逐一判断当前帧中各个宏块的宏块类型,根据当前宏块的宏块类型对应的编码方法对所述当前宏块进行编码,包括:

  根据所述预测结果判断当前宏块是否为视频宏块;

  若当前宏块是视频宏块,则根据视频宏块对应的编码方式对所述当前宏块执行编码得到视频编码数据,并使用下一个宏块作为当前宏块循环执行宏块类型判断的步骤;

  若当前宏块不是视频宏块,则根据所述预测结果判断当前宏块是否为未变化宏块,

  若当前宏块是未变化宏块,则根据未变化宏块对应的编码方式对所述当前宏块执行编码得到未变化编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  若当前宏块不是未变化宏块,则根据所述预测结果判断当前宏块是否为运动矢量宏块,

  若当前宏块是运动矢量宏块,则根据运动矢量宏块对应的编码方式对所述当前宏块执行编码得到运动矢量编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  若当前宏块不是运动矢量宏块,则根据所述预测结果判断当前宏块是否为文字宏块,

  若当前宏块是文字宏块,则根据文字宏块对应的编码方式对所述当前宏块执行编码得到文字编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  若当前宏块不是文字宏块,则根据所述预测结果判断当前宏块是否为图像宏块,

  若当前宏块是图像宏块,则根据图像宏块对应的编码方式对所述当前宏块执行编码得到图像编码数据,并对下一个宏块重复执行宏块类型判断的步骤。

  在一个实施例中,所述根据文字宏块对应的编码方式对所述当前宏块执行编码得到文字编码数据,包括:

  在确定所述文字宏块的编码方法为所述渐进式编码时,对所述文字宏块执行余弦变换,并采用第二预设量化参数进行量化得到第二数据;

  对所述第二数据执行渐进式编码,得到所述文字编码数据;

  在确定所述文字宏块的编码方法为所述文字编码时,对所述当前宏块执行文字编码,得到所述文字编码数据;

  其中,所述第一预设量化参数小于所述第二预设量化参数。

  在一个实施例中,所述根据所述多个编码数据获取所述当前帧的编码数据,包括:

  根据所述视频编码数据、所述未变化编码数据、所述运动矢量编码数据、所述文字编码和所述图像编码数据获取所述当前帧的编码数据。

  根据本公开实施例的第二方面,提供一种视频编码装置,所述装置包括:

  第一获取模块,用于获取当前帧;

  第二获取模块,用于在所述当前帧与参考帧不相同时,获取所述当前帧中各个宏块的宏块类型;

  第一确定模块,用于若所述宏块的类型为文字宏块或图像宏块,则确定所述文字宏块或所述图像宏块的编码装置,所述文字宏块的编码装置包括:渐进编码或文字编码;所述图像宏块的编码装置包括:分层编码或渐进编码;

  第一编码模块,用于根据所述各个宏块类型对应的编码装置对所述各个宏块进行编码得到多个编码数据;

  第三获取模块,用于根据所述多个编码数据获取所述当前帧的编码数据。

  在一个实施例中,当所述宏块类型为图像宏块时,所述第一确定模块包括:

  第一处理子模块,用于对所述图像宏块执行余弦变换,并采用第一预设量化参数进行量化得到第一数据;

  第一判断子模块,用于判断当前码率控制策略是否为第一码率控制策略;

  第一确定子模块,用于在当前码率控制策略为第一码率控制策略时,确定所述图像宏块的编码装置为分层编码;

  第二确定子模块,用于在当前码率控制策略不为第一码率控制策略时,确定所述图像宏块的编码装置为渐进式编码。

  在一个实施例中,当所述宏块的类型为文字宏块时,所述第一确定模块包括:

  第二判断子模块,用于判断当前码率控制策略是否为第二码率控制策略;

  第三确定子模块,用于在当前码率控制策略为第二码率控制策略时,确定所述文字宏块的编码装置为所述渐进式编码;

  第四确定子模块,用于在当前码率控制策略不为第二码率控制策略时,确定所述文字宏块的编码装置为所述文字编码方式。

  在一个实施例中,所述装置还包括:

  第一判断模块,用于在所述第二获取模块获取所述当前帧中各个宏块的宏块类型之前,在所述当前帧与所述参考帧不相同时,判断所述当前帧是否为全帧h.264编码;

  第二编码模块,用于在当前帧为全帧h.264编码时,采用h.264编码装置对所述当前帧进行编码;

  第二判断模块,用于在当前帧不为全帧h.264编码时,判断当前帧是否为全帧vGTP编码;

  第三获取模块,用于在当前帧为全帧vGTP编码时,则进行全局运动矢量预测,得到预测结果;

  第四获取模块,用于在当前帧不为全帧vGTP编码时,则进行视频窗口识别,对视频窗口识别结果进行全局运动矢量预测,得到预测结果;

  所述第二获取模块,包括:

  第五确定子模块,用于根据所述预测结果确定当前帧中各个宏块的宏块类型。

  在一个实施例中,所述第五确定子模块包括:第一判断子单元;所述第一编码模块包括:第一编码子模块,

  第一判断子单元,用于根据所述预测结果逐一判断当前帧中各个宏块的宏块类型;

  第一编码子模块,用于根据当前宏块的宏块类型对应的编码装置对所述当前宏块进行编码。

  在一个实施例中,所述装置还包括:

  视频宏块判断模块,用于根据所述预测结果判断当前宏块是否为视频宏块;

  视频编码模块,用于若当前宏块是视频宏块,则根据视频宏块对应的编码方式对所述当前宏块执行编码得到视频编码数据,并使用下一个宏块作为当前宏块循环执行宏块类型判断的步骤;

  未变化宏块判断模块,用于若当前宏块不是视频宏块,则根据所述预测结果判断当前宏块是否为未变化宏块,

  未变化宏块编码模块,用于若当前宏块是未变化宏块,则根据未变化宏块对应的编码方式对所述当前宏块执行编码得到未变化编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  运动矢量宏块判断模块,用于若当前宏块不是未变化宏块,则根据所述预测结果判断当前宏块是否为运动矢量宏块,

  运动矢量宏块编码模块,用于若当前宏块是运动矢量宏块,则根据运动矢量宏块对应的编码方式对所述当前宏块执行编码得到运动矢量编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  文字宏块判断模块,用于若当前宏块不是运动矢量宏块,则根据所述预测结果判断当前宏块是否为文字宏块,

  文字宏块编码模块,用于若当前宏块是文字宏块,则根据文字宏块对应的编码方式对所述当前宏块执行编码得到文字编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  图像宏块判断模块,用于若当前宏块不是文字宏块,则根据所述预测结果判断当前宏块是否为图像宏块,

  图像宏块编码模块,用于若当前宏块是图像宏块,则根据图像宏块对应的编码方式对所述当前宏块执行编码得到图像编码数据,并对下一个宏块重复执行宏块类型判断的步骤。

  在一个实施例中,所述文字宏块编码模块包括:

  第二数据获取子模块,用于在确定所述文字宏块的编码装置为所述渐进式编码时,对所述文字宏块执行余弦变换,并采用第二预设量化参数进行量化得到第二数据;

  渐进式编码子模块,用于对所述第二数据执行渐进式编码,得到所述文字编码数据;

  文字编码子模块,用于在确定所述文字宏块的编码装置为所述文字编码时,对所述当前宏块执行文字编码,得到所述文字编码数据;

  其中,所述第一预设量化参数小于所述第二预设量化参数。

  在一个实施例中,所述第三获取模块包括:

  获取子模块,用于根据所述视频编码数据、所述未变化编码数据、所述运动矢量编码数据、所述文字编码和所述图像编码数据获取所述当前帧的编码数据。

  应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

  附图说明

  此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

  图1是本公开实施例提供的一种视频编码方法的流程图;

  图2是本公开实施例提供的一种视频编码方法的流程图;

  图3是本公开实施例提供的一种视频编码方法的流程图;

  图4是本公开实施例提供的一种视频编码方法的流程图;

  图5是本公开实施例提供的一种视频编码装置的结构示意图。

  具体实施方式

  这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

  首先介绍本公开中的技术名词:

  渐进式编码:对JPEG编码的picture宏块,通过将分层的方法,在网络带宽允许的条件下,将视频画面逐渐传输到清晰为止;

  分层编码:分层编码和渐进式编码的原理相同,只是在编码过程中每一帧传输的清晰度相同,在传输之前确定待编码的层数。一般适用于传输带宽受限的场景,比如当前帧一共分为5层,但是当前带宽资源较少,可以只发送3层。

  DCT:余弦变换;

  RC:码率控制策略;

  量化(参数):参数越大清晰度越好,其中T1<T2,T1是用来编码picture宏块,T2是用来编码Text宏块的;

  宏块:大小为16x16的像素,vgtp将一帧图像划分为大小相同的宏块,并对每个宏块进行分类后再进行编码;

  码率控制的方法有如下3种,3种方法均可控制视频帧编码的最低和最高层数:

  NORC:vgtp算法不负责码率控制,picture采用分层编码,text宏块采用文字编码;

  PrimaryRC:picture宏块采用渐进式编码,text采用文字编码;

  HighRC:picture采用渐进式编码,text采用渐进式编码,但text的量化参数要比picture的量化参数大。

  本公开实施例提供一种视频编码方法,如图1所示,该视频编码方法包括以下步骤:

  101、获取当前帧。

  102、在当前帧与参考帧不相同时,获取当前帧中各个宏块的宏块类型。

  103、若宏块的类型为文字宏块或图像宏块,则确定文字宏块或图像宏块的编码方法,文字宏块的编码方法包括:渐进编码或文字编码;图像宏块的编码方法包括:分层编码或渐进编码。

  现有的vgtp算法中,对文字宏块会直接使用文字编码的方式进行编码,对图像宏块会直接使用图像编码的方式进行编码,这样的编码方式会使得文字宏块和图像宏块编码后的码流高。

  而本公开中,为文字宏块设置了两种不同的编码方法,分别为渐进编码或文字编码,其中渐进编码会使得编码后的码流相较于文字编码后的码流低,从而在网络情况较差的场景下,适应性较强。

  进一步的,为图像宏块设置了两种不同的编码方法,分别为分层编码或渐进编码,而分层编码或渐进编码会使得编码后的码流相较于视频编码后的码流低,从而提升了编码数据的适应性。

  104、根据各个宏块类型对应的编码方法对各个宏块进行编码得到多个编码数据。

  105、根据多个编码数据获取当前帧的编码数据。

  由于现有vGTP视频编码算法在网络情况较差的场景下,适应性比较差。此外,现有的vGTP在不同场景,不同网络条件,不同需求下使用的基本上都是相同的处理流程,可配性也比较差。

  为了解决上述技术问题,本公开提出一种新的视频编码方法,在本公开中,会将现有的vgtp算法和分层渐进式的编码方式进行融合,由于分层渐进式的编码方式可以有效的降低码流,从而采用本公开中的视频编码方法编码后的码流相较于现有技术中的vgtp算法编码后的码流,可以明显降低码流的数据量,使得在网络情况较差的场景下,适应性较强,

  会对当前帧的宏块进行分类,对不同类型的宏块采用不同的编码方法,从而使得本公开中的视频编码方法的适应性更强,且非常灵活,能够满足用户的个性化需求。

  进一步的,由于在编码时,并未一成不变的使用分层式的编码方式或渐进式的编码方式,而是会根据当前网络情况选择不同的编码方式,以让编码后的码流可以更加适应当前网络传输,因此,本公开中的视频编码方法可以不同网络条件,不同需求下使用的不相同的处理流程,可配性较高。

  本公开提供一种视频编码方法,包括:获取当前帧;在当前帧与参考帧不相同时,获取当前帧中各个宏块的宏块类型;若宏块的类型为文字宏块或图像宏块,则确定文字宏块或图像宏块的编码方法,文字宏块的编码方法包括:渐进编码或文字编码;图像宏块的编码方法包括:分层编码或渐进编码;根据各个宏块类型对应的编码方法对各个宏块进行编码得到多个编码数据;根据多个编码数据获取当前帧的编码数据。其中,由于在编码时,并未一成不变的使用分层式的编码方式或渐进式的编码方式,而是会根据当前网络情况选择不同的编码方式,以让编码后的码流可以更加适应当前网络传输,因此,本公开中的视频编码方法可以不同网络条件,不同需求下使用的不相同的处理流程,可配性较高。

  在一个实施例中,如图2所示,当宏块类型为图像宏块时,确定图像宏块的编码方法,包括以下子步骤:

  1031、对图像宏块执行余弦变换,并采用第一预设量化参数进行量化得到第一数据。

  1032、判断当前码率控制策略是否为第一码率控制策略。

  1033、若是,确定图像宏块的编码方法为分层编码。

  1034、若否,确定图像宏块的编码方法为渐进式编码。

  相关技术中,在对图像宏块执行编码时,会直接对图像宏块执行余弦变换,并采用一个预设量化参数进行量化,然后对量化后的数据采用视频编码的方式执行视频编码。

  而本公开中,在对图像宏块(也称之为:picture宏块)执行余弦变换,并采用第一预设量化参数进行量化得到第一数据后,还会去判断当前码率控制策略是否为第一码率控制策略,如果当前码率控制策略为第一码率控制策略,则确定图像宏块的编码方法为分层编码,如果当前码率控制策略不是第一码率控制策略,则确定图像宏块的编码方法为渐进式编码。

  示例的,第一码流控制策略包括:NORC。具体的,对picture宏块进行DCT变换,并采用较小的第一预设量化参数T1进行量化得到第一数据。判断当前的码率控制策略是否为NORC,当码率控制策略为NORC时,picture宏块的编码方式为分层编码,picture宏块的编码方式为渐进式编码。

  需要说明的是,若码率控制策略不同,则对picture宏块的编码方式也不同,因此,在本步骤中需要先确定码率控制策略,才能确定对picture宏块的编码方式。

  在一个实施例中,如图3所示,当宏块的类型为文字宏块(也可以称之为:text宏块)时,根据码率控制策略确定文字宏块的编码方法,包括以下子步骤:

  1035、判断当前码率控制策略是否为第二码率控制策略;

  1036、若是,确定文字宏块的编码方法为渐进式编码;

  1037、若否,确定文字宏块的编码方法为文字编码方式。

  示例的,第二码率控制策略包括:HighRC。具体的,判断当前的码率控制策略是否为HighRC,其中,当码率控制策略为HighRC时,picture宏块的编码方式为渐进式编码,text宏块的编码方式为渐进式编码,但text的量化参数要比picture的量化参数大。

  需要说明的是,若码率控制策略不同,则对text宏块的编码方式也不同,因此,在本步骤中需要先确定码率控制策略,才能确定对text宏块的编码方式。

  在一个实施例中,在获取当前帧中各个宏块的宏块类型之前,上述方法还包括以下子步骤:

  A1、在当前帧与参考帧不相同时,判断当前帧是否为全帧h.264编码;

  需要说明的是,全帧h.264编码是事先设置的。由于h.264对于视频图像的编码效率高且质量好,因此,对于某些场景,比如播放全屏动画的场景,则可以设置一个时间段内的图像帧均为全帧h.264编码,对于静止图像较多的场景,比如办公桌面,则无需设置全帧h.264编码。

  A2、若是,采用h.264编码方法对当前帧进行编码;

  A3、若否,判断当前帧是否为全帧vGTP编码;

  需要说明的是,全帧vGTP编码是事先设置的。可以将包含有视频窗口的图像帧设置为全帧vGTP编码。

  具体的,在本步骤中,判断当前帧是否为全帧vGTP编码;在确定当前帧不是全帧vGTP编码之后,可以通过执行视频窗口的识别,在确定当前帧是全帧vGTP编码之后,可以对当前帧的宏块进行分类。

  A4、若是,则进行全局运动矢量预测,得到预测结果;

  A5、若否,则进行视频窗口识别,对视频窗口识别结果进行全局运动矢量预测,得到预测结果;

  在本步骤中,在确定当前帧不是全帧vGTP编码之后,可以识别当前帧中的视频窗口;进而根据视频窗口的范围,对视频窗口范围内的宏块进行进一步分类。

  需要说明的是,该视频窗口的范围包括:位置和尺寸。视频窗口中可能为静态图像,也可能为动态视频。

  值得注意的是,需要说明的是,本步骤之后的处理对象是以宏块为单位的,而在本步骤之前,处理对象是以帧为单位的。

  此时,上述获取当前帧中各个宏块的宏块类型,包括以下子步骤:

  A6、根据预测结果确定当前帧中各个宏块的宏块类型。

  在一种可实现方式中,可以根据预测结果逐一判断当前帧中各个宏块的宏块类型,也即以串行的方式逐一判断;也可以将当前帧中的所有宏块统一进行判断,也即以并行的方式进行判断。

  在判断完一个宏块后,对当前宏块尽心编码,也即根据当前宏块的宏块类型对应的编码方法对当前宏块进行编码。

  具体的,获取当前帧,判断当前帧与参考帧是否相同;若相同,则不进行编码,开始处理下一帧,若不相同,则判断当前帧是否为全帧h.264编码,若当前帧为全帧h.264编码,将当前帧输入到h.264编码器进行编码,对本帧的编码处理完成,待编码完成后开始处理下一帧;如果当前帧不是全帧h.264编码,就需要判断当前帧是否为全帧vGTP编码,如果当前帧是全帧vGTP编码,则进行全局运动矢量预测,得到预测结果,并根据预测结果确定当前帧中各个宏块的宏块类型;如果当前帧不是全帧vGTP编码,则进行视频窗口识别,对视频窗口识别结果再进行全局运动矢量预测,得到预测结果,并根据预测结果确定当前帧中各个宏块的宏块类型。

  在本步骤中,参考帧可以是参考图像,

  在一个实施例中,根据预测结果逐一判断当前帧中各个宏块的宏块类型,根据当前宏块的宏块类型对应的编码方法对当前宏块进行编码,包括以下子步骤:

  B1、根据预测结果判断当前宏块是否为视频宏块(也可以称之为:video宏块);

  B2、若当前宏块是视频宏块,则根据视频宏块对应的编码方式对当前宏块执行编码得到视频编码数据,并使用下一个宏块作为当前宏块循环执行宏块类型判断的步骤;

  在本步骤中,在确定视频窗口的范围之后,判断当前宏块是否为video宏块,若为是,则可以对该video宏块进行编码,生成video宏块的视频编码数据,具体可以是h.264编码,若为否,则通过后续步骤对宏块进行进一步分类。

  需要说明的是,在本步骤中需要对当前帧的所有宏块依次进行判断,以便排查出video宏块。

  B3、若当前宏块不是视频宏块,则根据预测结果判断当前宏块是否为未变化宏块,

  B4、若当前宏块是未变化宏块(也可以称之为:unchange宏块),则根据未变化宏块对应的编码方式对当前宏块执行编码得到未变化编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  B5、若当前宏块不是未变化宏块,则根据预测结果判断当前宏块是否为运动矢量宏块,

  B6、若当前宏块是运动矢量宏块(也可以称之为:mv宏块),则根据运动矢量宏块对应的编码方式对当前宏块执行编码得到运动矢量编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  B7、若当前宏块不是运动矢量宏块,则根据预测结果判断当前宏块是否为文字宏块,

  B8、若当前宏块是文字宏块(也可以称之为:text宏块),则根据文字宏块对应的编码方式对当前宏块执行编码得到文字编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  B9、若当前宏块不是文字宏块,则根据预测结果判断当前宏块是否为图像宏块;

  B10、若当前宏块是图像宏块(也可以称之为:picture宏块),则根据图像宏块对应的编码方式对当前宏块执行编码得到图像编码数据,并对下一个宏块重复执行宏块类型判断的步骤。

  在一个实施例中,根据文字宏块对应的编码方式对当前宏块执行编码得到文字编码数据,包括以下子步骤:

  C1、在确定文字宏块的编码方法为渐进式编码时,对文字宏块执行余弦变换,并采用第二预设量化参数进行量化得到第二数据;其中,第一预设量化参数小于第二预设量化参数;

  C2、对第二数据执行渐进式编码,得到文字编码数据;

  具体的,对text宏块进行DCT变换;采用较大第二预设量化参数T2进行量化;进行渐进式编码,生成text宏块的文字编码数据。

  其中,参数T2大于参数T1。

  在本步骤中,若当前的码率控制策略为HighRC,则先对text宏块进行DCT变换,再采用较大参数T2进行量化,最后进行渐进式编码,生成text宏块的编码数据。

  C3、在确定文字宏块的编码方法为文字编码时,对当前宏块执行文字编码,得到文字编码数据。

  具体的,若当前的码率控制策略不为HighRC,则对text宏块进行文字编码,生成text宏块的文字编码数据。

  在一个实施例中,上述步骤105包括以下子步骤:

  在对当前帧中的所有宏块均执行了编码后,根据上述步骤中得到的各个宏块对应的编码数据,生成当前帧的编码数据。

  具体的,根据视频编码数据、未变化编码数据、运动矢量编码数据、文字编码和图像编码数据获取当前帧的编码数据。

  可见,在本发明中,不仅能够结合渐进和分层的编码方式,而且能够对当前帧的宏块进行分类,对不同类型的宏块采用不同的编码方式,同时,还可以参考当前的码率控制策略,修改指定类型的宏块的编码方式。适应性强,且使用非常灵活,能够满足用户的个性化需求。

  下面通过具体实施例方式介绍本公开中的技术方案,如图4所示,该方法包括以下子步骤:

  201、输入一帧,也即获取当前帧。

  202、判断当前帧与参考帧是否相同;若相同,则不进行编码,开始处理下一帧,若不相同,则执行步骤203。

  在本步骤中,参考帧可以是参考图像,如果当前帧与参考图像相同,则无需编码,可以处理下一帧,若不相同,则进行后续步骤。

  203,判断当前帧是否是全帧h.264编码;若是,则执行步骤204,若不相同,则执行步骤205。

  需要说明的是,全帧h.264编码是事先设置的。由于h.264对于视频图像的编码效率高且质量好,因此,对于某些场景,比如播放全屏动画的场景,则可以设置一个时间段内的图像帧均为全帧h.264编码,对于静止图像较多的场景,比如办公桌面,则无需设置全帧h.264编码。

  在本步骤中,可以判断当前帧是否为全帧h.264编码,若为是,则通过执行步骤204,对该帧进行h.264编码,若否,则需要进行进一步分类和处理。

  步骤204,将当前帧输入到h.264编码器进行编码,对本帧的编码处理完成。

  在本步骤中,在确定当前帧是全帧h.264编码之后,使用h.264编码器对当前帧进行编码。待编码完成后开始处理下一帧。

  步骤205,判断当前帧是否为全帧vGTP编码,若为是,则执行步骤206,若为否,则执行步骤207。

  需要说明的是,全帧vGTP编码是事先设置的。可以将包含有视频窗口的图像帧设置为全帧vGTP编码。

  在本步骤中,判断当前帧是否为全帧vGTP编码;在确定当前帧不是全帧vGTP编码之后,可以通过执行步骤8进行视频窗口的识别,在确定当前帧是全帧vGTP编码之后,可以对当前帧的宏块进行分类。

  步骤206,对当前帧进行全局MV预测,得到预测结果,执行步骤7。

  在本步骤中,在确定当前帧不是全帧h.264编码之后,对当前帧进行全局MV预测,得到预测结果,得到预测结果后,执行步骤208。

  步骤207,对当前帧进行视频窗口的识别,确定视频窗口的范围,执行步骤206。

  在本步骤中,在确定当前帧不是全帧vGTP编码之后,可以识别当前帧中的视频窗口;进而根据视频窗口的范围,对视频窗口范围内的宏块进行进一步分类。

  需要说明的是,该视频窗口的范围包括:位置和尺寸。视频窗口中可能为静态图像,也可能为动态视频。

  步骤208,判断当前帧的宏块是否为video宏块;若为是,则执行步骤2024,若为否,则执行步骤209。

  在本步骤中,在确定视频窗口的范围之后,判断当前帧的宏块是否为video宏块,若为是,则可以对该video宏块进行编码,生成video宏块的编码数据,具体可以是h.264编码,若为否,则通过后续步骤对宏块进行进一步分类。

  需要说明的是,在本步骤中需要对当前帧的所有宏块依次进行判断,以便排查出video宏块。

  需要说明的是,从步骤208开始,处理对象是以宏块为单位的,而在步骤208之前,处理对象是以帧为单位的。

  步骤209,判断当前帧中除已确定类型的宏块以外的其他宏块是否为unchange宏块,若为是,则执行步骤2024,若为否,则执行步骤2010。

  需要说明的是,本步骤可以对当前帧中,除了步骤208已经确定的video宏块以外的所有宏块进行分类。

  在本步骤中,在确定当前帧是全帧vGTP编码之后,对当前帧中除在步骤208中已确定的video宏块以外的其他宏块进行分类;依次判断宏块是否为unchange宏块;若为是,则可以对该unchange宏块进行编码,生成unchange宏块的编码数据,若为否,则通过后续步骤继续进行分类。

  步骤2011,判断当前帧中除已确定类型的宏块以外的其他宏块是否为mv宏块;若为是,则执行步骤2024,若为否,则执行步骤2012。

  需要说明的是,本步骤可以对当前帧中,除了步骤208已经确定的video宏块,以及步骤209已确定的unchange宏块以外的所有宏块进行分类。

  在本步骤中,根据步骤206得到的预测结果,对当前帧中除在步骤208中已确定的video宏块,以及步骤209已确定的unchange宏块以外的其他宏块进行分类;依次判断宏块是否为mv宏块;若为是,则通过步骤2024对该宏块进行编码,生成mv宏块的编码数据,若为否,则通过后续步骤继续进行分类。

  步骤2012,判断当前帧中除已确定类型的宏块以外的其他宏块是否为text宏块;若为是,则执行步骤2013,若为否,则执行步骤2018。

  需要说明的是,本步骤可以对当前帧中,除了步骤208已经确定的video宏块,以及步骤209已确定的unchange宏块,以及步骤2010已确定的mv宏块以外的所有宏块进行分类。

  在本步骤中,对当前帧中除在步骤208中已确定的video宏块,以及步骤209已确定的unchange宏块,以及步骤2010已确定的mv宏块以外的其他宏块进行分类;依次判断宏块是否为text宏块;若为是,则通过步骤2013进一步判断码率控制策略,以便确定对text宏块的编码方式,若为否,则通过后续步骤继续进行分类。

  步骤2013,判断当前码率控制策略(RC)是否为HIGH;若为是,则执行步骤2014;若为否,则执行步骤2017。

  需要说明的是,若码率控制策略不同,则对text宏块的编码方式也不同,因此,在本步骤中需要先确定码率控制策略,才能确定对text宏块的编码方式。

  其中,当码率控制策略为HighRC时,picture宏块的编码方式为渐进式编码,text宏块的编码方式为渐进式编码,但text的量化参数要比picture的量化参数大。

  在本步骤中,判断当前的码率控制策略是否为HighRC,若为是,则通过步骤2014对该text宏块进行渐进式编码。

  步骤2014,对text宏块进行DCT变换。

  步骤2015,采用较大参数T2进行量化。

  步骤2016,进行渐进式编码,生成text宏块的编码数据。

  其中,参数T2大于参数T1。

  在本步骤中,若当前的码率控制策略为HighRC,则先对text宏块进行DCT变换,再采用较大参数T2进行量化,最后进行渐进式编码,生成text宏块的编码数据。

  步骤2017,对text宏块进行文字编码,生成text宏块的编码数据,执行步骤2024。

  在本步骤中,若当前的码率控制策略不为HighRC,则对text宏块进行文字编码,生成text宏块的编码数据。

  步骤2018,判断当前帧中除已确定类型的宏块以外的其他宏块是否为picture宏块;若为是,则执行步骤2019。

  需要说明的是,本步骤可以对当前帧中,除了步骤208已经确定的video宏块,以及步骤209已确定的unchange宏块,以及步骤2010已确定的mv宏块,以及步骤2012已确定的text宏块以外的所有宏块进行分类。

  在本步骤中,对当前帧中除在步骤208中已确定的video宏块,以及步骤209已确定的unchange宏块,以及步骤2010已确定的mv宏块,以及步骤2012已确定的text宏块以外的其他宏块进行分类;依次判断宏块是否为picture宏块;若为是,则执行步骤2019。

  步骤2019,对picture宏块进行DCT变换.

  步骤2020,采用较小的参数T1进行量化;执行步骤2021。

  其中,参数T1小于参数T2。

  步骤2021,判断当前的码率控制策略是否为NORC;若为是,则执行步骤2022,若为否,则执行步骤2023.

  需要说明的是,若码率控制策略不同,则对picture宏块的编码方式也不同,因此,在本步骤中需要先确定码率控制策略,才能确定对picture宏块的编码方式。

  其中,当码率控制策略为NORC时,picture宏块的编码方式为分层编码,text宏块的编码方式为文字编码。

  在本步骤中,判断当前的码率控制策略是否为NORC,若为是,则通过步骤2022对该picture宏块进行分层编码,若为否,则对该picture宏块进行渐进式编码。

  步骤2022,对picture宏块进行分层编码,生成picture宏块的编码数据,执行步骤2024。

  步骤2023,对picture宏块进行渐进式编码,生成picture宏块的编码数据,执行步骤2024。

  步骤2024,基于所有宏块的编码数据,确定当前帧的编码数据。

  在本步骤中,可以基于步骤208、步骤209、步骤2010、步骤2014、步骤2017、步骤2022、步骤2023得到的各类型的宏块的编码数据,生成当前帧的编码数据。

  值得注意的是,上述图4对应的实施例可以使对当前帧中的所有宏块执行并行处理,也可以对当前帧中的各个宏块执行串行处理,在执行串行处理时,在当前步骤执行到步骤2024后,便循环到208,重新对下一个宏块执行判断过程。

  可见,在本发明中,不仅能够结合渐进和分层的编码方式,而且能够对当前帧的宏块进行分类,对不同类型的宏块采用不同的编码方式,同时,还可以参考当前的码率控制策略,修改指定类型的宏块的编码方式。适应性强,且使用非常灵活,能够满足用户的个性化需求。

  基于上述图1对应的实施例中所描述的视频编码方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。

  本公开实施例提供一种视频编码装置,如图5所示,该视频编码装置包括:

  第一获取模块11,用于获取当前帧;

  第二获取模块12,用于在所述当前帧与参考帧不相同时,获取所述当前帧中各个宏块的宏块类型;

  第一确定模块13,用于若所述宏块的类型为文字宏块或图像宏块,则确定所述文字宏块或所述图像宏块的编码装置,所述文字宏块的编码装置包括:渐进编码或文字编码;所述图像宏块的编码装置包括:分层编码或渐进编码;

  第一编码模块14,用于根据所述各个宏块类型对应的编码装置对所述各个宏块进行编码得到多个编码数据;

  第三获取模块15,用于根据所述多个编码数据获取所述当前帧的编码数据。

  在一个实施例中,当所述宏块类型为图像宏块时,所述第一确定模块包括:

  第一处理子模块,用于对所述图像宏块执行余弦变换,并采用第一预设量化参数进行量化得到第一数据;

  第一判断子模块,用于判断所述当前码率控制策略是否为第一码率控制策略;

  第一确定子模块,用于在当前码率控制策略为第一码率控制策略时,确定所述图像宏块的编码装置为分层编码;

  第二确定子模块,用于在当前码率控制策略不为第一码率控制策略时,确定所述图像宏块的编码装置为渐进式编码。

  在一个实施例中,当所述宏块的类型为文字宏块时,所述第一确定模块包括:

  第二判断子模块,用于判断所述当前码率控制策略是否为第二码率控制策略;

  第三确定子模块,用于在当前码率控制策略为第二码率控制策略时,确定所述文字宏块的编码装置为所述渐进式编码;

  第四确定子模块,用于在当前码率控制策略不为第二码率控制策略时,确定所述文字宏块的编码装置为所述文字编码方式。

  在一个实施例中,所述装置还包括:

  第一判断模块,用于在所述第二获取模块获取所述当前帧中各个宏块的宏块类型之前,在所述当前帧与所述参考帧不相同时,判断所述当前帧是否为全帧h.264编码;

  第二编码模块,用于在当前帧为全帧h.264编码时,采用h.264编码装置对所述当前帧进行编码;

  第二判断模块,用于在当前帧不为全帧h.264编码时,判断当前帧是否为全帧vGTP编码;

  第三获取模块,用于在当前帧为全帧vGTP编码时,则进行全局运动矢量预测,得到预测结果;

  第四获取模块,用于在当前帧不为全帧vGTP编码时,则进行视频窗口识别,对视频窗口识别结果进行全局运动矢量预测,得到预测结果;

  所述第二获取模块,包括:

  第五确定子模块,用于根据所述预测结果确定当前帧中各个宏块的宏块类型。

  在一个实施例中,所述第五确定子模块包括:第一判断子单元;所述第一编码模块包括:第一编码子模块,

  第一判断子单元,用于根据所述预测结果逐一判断当前帧中各个宏块的宏块类型;

  第一编码子模块,用于根据当前宏块的宏块类型对应的编码装置对所述当前宏块进行编码。

  在一个实施例中,所述装置还包括:

  视频宏块判断模块,用于根据所述预测结果判断当前宏块是否为视频宏块;

  视频编码模块,用于若当前宏块是视频宏块,则根据视频宏块对应的编码方式对所述当前宏块执行编码得到视频编码数据,并使用下一个宏块作为当前宏块循环执行宏块类型判断的步骤;

  未变化宏块判断模块,用于若当前宏块不是视频宏块,则根据所述预测结果判断当前宏块是否为未变化宏块,

  未变化宏块编码模块,用于若当前宏块是未变化宏块,则根据未变化宏块对应的编码方式对所述当前宏块执行编码得到未变化编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  运动矢量宏块判断模块,用于若当前宏块不是未变化宏块,则根据所述预测结果判断当前宏块是否为运动矢量宏块,

  运动矢量宏块编码模块,用于若当前宏块是运动矢量宏块,则根据运动矢量宏块对应的编码方式对所述当前宏块执行编码得到运动矢量编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  文字宏块判断模块,用于若当前宏块不是运动矢量宏块,则根据所述预测结果判断当前宏块是否为文字宏块,

  文字宏块编码模块,用于若当前宏块是文字宏块,则根据文字宏块对应的编码方式对所述当前宏块执行编码得到文字编码数据,并对下一个宏块重复执行宏块类型判断的步骤;

  图像宏块判断模块,用于若当前宏块不是文字宏块,则根据所述预测结果判断当前宏块是否为图像宏块,

  图像宏块编码模块,用于若当前宏块是图像宏块,则根据图像宏块对应的编码方式对所述当前宏块执行编码得到图像编码数据,并对下一个宏块重复执行宏块类型判断的步骤。

  在一个实施例中,所述文字宏块编码模块包括:

  第二数据获取子模块,用于在确定所述文字宏块的编码装置为所述渐进式编码时,对所述文字宏块执行余弦变换,并采用第二预设量化参数进行量化得到第二数据;

  渐进式编码子模块,用于对所述第二数据执行渐进式编码,得到所述文字编码数据;

  文字编码子模块,用于在确定所述文字宏块的编码装置为所述文字编码时,对所述当前宏块执行文字编码,得到所述文字编码数据;

  其中,所述第一预设量化参数小于所述第二预设量化参数。

  在一个实施例中,所述第三获取模块包括:

  获取子模块,用于根据所述视频编码数据、所述未变化编码数据、所述运动矢量编码数据、所述文字编码和所述图像编码数据获取所述当前帧的编码数据。

  基于上述图1对应的实施例中所描述的视频编码方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:ReadOnly Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1对应的实施例中所描述的视频编码方法,此处不再赘述。

  本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

  应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

《视频编码方法及装置.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)