视频编解码方法、装置、系统及电子设备

文档序号:172858 发布日期:2021-10-29 浏览:42次 >En<

阅读说明:本技术 视频编解码方法、装置、系统及电子设备 (Video encoding and decoding method, device and system and electronic equipment ) 是由 林中松 于 2020-04-29 设计创作,主要内容包括:本公开提出了一种视频编解码方法、装置、系统以及电子设备,该方法包括:获取所述视频的当前帧图像相对上一帧图像的更新信息;在所述更新信息表示未发生更新的情况下,设置所述上一帧图像为对所述当前帧图像进行编码的参照帧图像;利用所述参照帧图像对所述当前帧图像进行编码,获得编码后的编码码流。(The present disclosure provides a video encoding and decoding method, device, system and electronic device, wherein the method comprises: acquiring the update information of the current frame image of the video relative to the previous frame image; setting the previous frame image as a reference frame image for encoding the current frame image when the update information indicates that no update has occurred; and coding the current frame image by using the reference frame image to obtain a coded code stream.)

视频编解码方法、装置、系统及电子设备

技术领域

本说明书实施例涉及视频处理技术领域,更具体的,涉及视频编码方法、视频解码方法、视频编码装置、视频解码装置、视频播放系统、电子设备及计算机可读存储介质。

背景技术

目前,为了解决由于安卓系统的复杂性使其无法运行在硬件资源非常有限的瘦客户端上,可以是通过在云端服务器中通过容器的方式来运行安卓系统及其应用,例如,可以是在云端服务器中通过容器的方式来运行安卓视频类应用,并且通过网页实时通信(WebRealTime Communication,WebRTC)协议将得到的图像数据和音频数据发送到客户端,以使得客户端进行视频播放。

通常,云端服务器将图像数据和音频数据发送到客户端时,需要对图像数据和音频数据分别进行编码,并将编码后得到的音视频码流发送到客户端,以由客户端解码并播放视频。然而,现有技术中,其在对图像数据进行编码时,无论当前帧图像相对上一帧图像是否发生更新,仍然需要进行常规的视频编码流程,而常规的视频编码中存在对待编码帧图像进行运动预测以搜索出能够对待编码帧图像进行编码的参照帧图像的步骤,运动预测步骤耗费了大量计算量,从而,增加了编码成本;而且,由于参照帧图像库中参照帧图像数量的局限性,使得通过该种方法搜索出来的参照帧图像存在编码效率较低的问题。

发明内容

本说明书实施例提供一种视频编码的新的技术方案。

根据本说明书的第一方面,提供了视频编码方法的一个实施例,该方法包括:

获取所述视频的当前帧图像相对上一帧图像的更新信息;

在所述更新信息表示未发生更新的情况下,设置所述上一帧图像为对所述当前帧图像进行编码的参照帧图像;

利用所述参照帧图像对所述当前帧图像进行编码,获得编码后的编码码流。

可选地,所述方法还包括:

在所述更新信息表示未发生更新的情况下,设置所述当前帧图像中包括的每一宏块的预测残差均为0。

可选地,所述方法还包括:

在所述更新信息表示发生更新的情况下,判断所述更新信息是否表示发生部分更新;

在所述更新信息表示发生部分更新的情况下,对所述发生部分更新的图像区域进行宏块对齐操作;

接续判断进行所述对齐操作后的宏块是否位于所述发生部分更新的图像区域内,并针对位于所述发生部分更新的图像区域内的宏块和位于所述发生部分更新的图像区域外的宏块分别采用不同的编码方式进行编码,获得编码后的编码码流。

可选地,所述方法还包括:

在所述更新信息表示发生更新的情况下,在所述当前帧图像中标记出所述发生更新的图像区域。

可选地,所述方法还包括:

在所述更新区域表示未发生部分更新的情况下,对所述当前帧图像中包括的所有宏块进行编码,获得编码后的编码码流。

可选地,所述对所述当前帧图像中包括的所有宏块进行编码,获得编码后的编码码流,包括:

对所述当前帧图像中包括的所有宏块进行运动预测,获得对应每一所述宏块的预测残差和运动向量;

根据每一所述预测残差和运动向量,获得编码后的编码码流。

可选地,所述针对位于所述发生部分更新的图像区域外的宏块进行编码,获得编码后的编码码流,包括:

设置所述上一帧图像为对位于所述发生部分更新的图像区域外的宏块进行编码的参照帧图像;

利用所述参照帧图像对位于所述发生部分更新的图像区域外的宏块进行编码,获得对应位于所述发生部分更新的图像区域外的每一所述宏块的编码码流。

可选地,所述针对位于所述发生部分更新的图像区域外的宏块进行编码,获得编码后的编码码流,还包括:

设置位于所述发生部分更新的图像区域外的每一宏块的预测残差均为0。

可选地,所述针对位于所述发生部分更新的图像区域内的宏块进行编码,获得编码后的编码码流,包括:

对位于所述发生部分更新的图像区域内的宏块进行运动预测,获得对应每一所述宏块的预测残差和运动向量;

根据每一所述预测残差和运动向量,获得对应位于所述发生部分更新的图像区域内的每一所述宏块的编码码流。

可选地,所述方法还包括:

在开启渲染功能的情况下,在对所述视频的任意帧图像进行编码之前,渲染所述任意帧图像;

其中,所述当前帧图像和所述上一帧图像均为渲染后的图像。

可选地,所述方法还包括:获取选择所述编码对应的编码方式的终端设备的设备类型;

将所述编码后的编码码流发送至属于所述设备类型的终端设备进行解码播放。

根据本说明书的第二方面,还提供了一种视频解码方法的一个实施例,该方法包括:

获取针对视频的各帧图像进行编码得到的编码码流,其中,针对所述各帧图像中的任意帧图像进行编码包括:在所述任意帧图像相对上一帧图像未发生更新的情况下,将所述上一帧图像作为参照帧图像对所述任意帧图像进行编码;

对所述编码码流进行解码;

播放解码后的视频。

根据本说明书的第三方面,还提供了一种视频编码装置的一个实施例,该装置包括:

更新信息获取模块,用于获取所述视频的当前帧图像相对上一帧图像的更新信息;

参照帧图像获取模块,用于在所述更新信息表示未发生更新的情况下,设置所述上一帧图像为对所述当前帧图像进行编码的参照帧图像;

编码模块,用于利用所述参照帧图像对所述当前帧图像进行编码,获得编码后的编码码流。

根据本说明书的第四方面,还提供一种视频解码装置的一个实施例,该装置包括:

编码码流获取模块,用于获取针对视频的各帧图像进行编码得到的编码码流,其中,针对所述各帧图像中的任意帧图像进行编码包括:在所述任意帧图像相对上一帧图像未发生更新的情况下,将所述上一帧图像作为参照帧图像对所述任意帧图像进行编码;

解码模块,用于对所述编码码流进行解码;

视频播放模块,用于播放解码后的视频。

根据本说明书的第五方面,还提供一种电子设备的一个实施例,该电子设备包括:

如以上第三方面所述的视频编码装置;或者,

如以上第四方面所述的视频解码装置;或者,

处理器和存储器,所述存储器用于存储指令,所述指令用于控制所述处理器执行根据以上第一方面或第二方面所述的方法。

根据本说明书的第六方面,还提供一种视频播放系统的一个实施例,该系统包括:

服务器,所述服务器包括存储器和处理器,所述服务器的存储器用于存储可执行命令;所述服务器的处理器用于在所述可执行命令的控制下,执行以上第一方面所述的视频编码方法;以及,

终端设备,所述终端设备包括存储器和处理器,所述终端设备的存储器用于存储可执行命令;所述终端设备的处理器用于在所述可执行命令的控制下,执行以上第二方面所述的视频解码方法。

根据本说明书的第七方面,还提供一种计算机可读存储介质的一个实施例,该存储介质存储有可执行指令,所述可执行指令被处理器执行时,执行以上第一方面或第二方面所述的方法。

在一个实施例中,针对于现有视频编码中,即使当前帧图像相对上一帧图像未发生更新时,也需要针对于当前帧图像进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像,导致编码效率不高,编码成本高的问题,其通过获取视频的当前帧图像相对上一帧图像的更新信息,并在该更新信息表示当前帧图像相对上一帧图像未发生更新的情况下,可以直接将上一帧图像作为对当前帧图像进行编码的参照帧图像,从而,在当前帧图像相对上一帧图像未发生更新的情况下,直接省去了现有视频编码中的对当前帧图像进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。

图1a和图1b是可用于实施一个实施例的视频编码方法的应用场景示意图;

图2是可用于实施一个实施例的视频编码方法的硬件配置的原理框图;

图3是可用于实施一个实施例的视频编码方法的流程图;

图4是可用于实施另外一个实施例的视频编码方法的流程图;

图5是可用于实施第三实施例的视频解码方法的流程图;

图6是可用于实施一个例子的视频编解码方法的流程图;

图7是可用于实施一个例子的视频编码方法的流程图;

图8是可用于实施一个实施例的视频编码装置的原理框图;

图9是可用于实施一个实施例的视频解码装置的原理框图;

图10是可用于实施一个实施例的电子设备的原理框图;

图11是可用于实施一个实施例的视频播放系统的硬件结构示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

在外物互联云边端一体化的趋势下,客户端设备所需的硬件资源和成本越来越小,而安卓系统由于自身的复杂性使其无法运行在硬件资源非常有限的客户端设备上,因此,在云端服务器中通过容器的方式来运行安卓系统及其应用,并且通过WebRTC协议将结果推送到客户端设备就成为一种很好的选择,其在视频类应用中取得了良好的效果。

目前,安卓视频类应用运行于云端服务器里的安卓云容器中,在获得针对于视频的图像数据和音频数据后,需要利用视频编码器和音频编码器分别对图像数据和音频数据进行编码,这样客户端设备上便可经过音视频解码以播放视频,然而,现有的视频编码器在对图像数据进行编码时,即使当前帧图像相对上一帧图像未发生更新,其还是需要进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像,而运动预测步骤耗费了大量计算量,增加了编码成本;而且,通过该种方法搜索出来参照帧图像存在编码效率较低的问题。因此,本实施例提供了一种对于视频的新的编码方法。

如图1a和图1b所示,以服务器1000上云主机操作系统(Host OS in Cloud)里安卓云容器(Android Container)中运行的安卓应用(Android Applications)为安卓视频类应用的场景为例,根据本实施例中的视频编码方法,用户针对于终端设备2000(图1b中的客户端Client)中视频类应用X的图标实施点击操作,终端设备2000响应于该点击操作并发送视频播放请求至服务器1000里Android Container中的安卓视频类应用X,安卓框架(AndroidFramework)中的SurfaceFlinger和AudioFlinger分别负责合成视频源数据(Video SourceData)和音频源数据(Audio Source Data)后,由SurfaceFlinger将Video Source Data传输至视频编码器(Video Encoder),以及,由AudioFlinger将Audio Source Data传输至音频编码器(Audio Encoder)。

Video Encoder和Audio Encoder分别对Video Source Data和Audio SourceData进行编码后,Video Encoder通过视频通道(Video Channel)基于WebRTC协议将编码后的Video Source Data发送至终端设备2000,以及,Audio Encoder通过音频通道(AudioChannel)基于WebRTC协议将编码后的Audio Source Data发送至终端设备2000,终端设备2000分别对Video Source Data和Audio Source Data进行解码以播放视频xxxxx。相比于现有技术,本说明书视频编码器针对各帧图像中的任意帧图像进行编码时,如果任意帧图像相对上一帧图像未发生更新,则直接将上一帧图像作为参照帧图像对任意帧图像进行编码,因此,根据该实施例的视频编码方法,能够在当前帧图像相对上一帧图像未发生更新的情况下,直接省去了现有视频编码中的对当前帧图像进行运动预测以搜索出对当前帧图像进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

<硬件设备>

图2示出了能够用于实施一个实施例的视频编码方法的一种视频播放系统的组成结构示意图。

如图2所示,本实施例的视频播放系统100包括服务器1000、终端设备2000以及网络3000。

服务器1000例如可以是刀片服务器、机架式服务器等,服务器1000也可以是部署在云端的服务器集群,在此不做限定。

如图2所示,服务器1000可以包括处理器1100、存储器1200、接口装置1300、通信装置1400、显示装置1500和输入装置1600。处理器1100例如可以是中央处理器CPU等。存储器1200例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1300例如包括USB接口、串行接口等。通信装置1400例如能够进行有线或无线通信。显示装置1500例如是液晶显示屏。输入装置1600例如可以包括触摸屏、键盘等。

本实施例中,服务器1000的存储器1200用于存储指令,该指令用于控制处理器1100进行操作以执行视频编码方法。技术人员可以根据本说明书所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。

本领域技术人员应当理解,尽管在图2中示出了服务器1000的多个装置,但是,本说明书实施例的服务器1000可以仅涉及其中的部分装置,例如,只涉及处理器1100和存储器1200。

如图2所示,终端设备2000可以包括处理器2100、存储器2200、接口装置2300、通信装置2400、显示装置2500、输入装置2600、扬声器2700、麦克风2800,等等。其中,处理器2100用于执行程序指令,该程序指令可以采用比如x86、Arm、RISC、MIPS、SSE等架构的指令集。存储器2200例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置2300例如包括USB接口、耳机接口等。通信装置2400例如能够进行有线或无线通信。显示装置2500例如是液晶显示屏、触摸显示屏等。输入装置2600例如可以包括触摸屏、键盘等。扬声器2700用于输出语音信息。麦克风2800用于采集语音信息。

终端设备2000可以是智能手机、便携式电脑、台式计算机、平板电脑等可以支持视频播放的任意设备。

本实施例中,终端设备2000的存储器2200用于存储指令,所述指令用于控制所述处理器2100进行操作以支持实现根据本说明书任意实施例的视频解码方法。技术人员可以根据本说明书所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。

本领域技术人员应当理解,尽管在图2中示出了终端设备2000的多个装置,但是,本说明书实施例的终端设备2000可以仅涉及其中的部分装置,例如,只涉及处理器2100、存储器2200、显示装置2500、输入装置2600等。

通信网络3000可以是无线网络也可以是有线网络,可以是局域网也可以是广域网。终端设备2000可以通过通信网络3000与服务器1000进行通信。

图2所示的视频播放系统1000仅是解释性的,并且决不是为了要限制本说明书、其应用或用途。例如,尽管图2仅示出一个服务器1000和一个终端设备2000,但不意味着限制各自的数量,视频播放系统1000中可以包含多个服务器1000和/或多个终端设备2000。

<方法实施例一>

图3是根据一个实施例的视频编码方法的流程示意图,该方法可以由服务器实施,例如由图1a或图2所示的服务器1000。如图3所示,本实施例的视频编码方法可以包括如下步骤S3100~S3300:

步骤S3100,获取视频的当前帧图像相对上一帧图像的更新信息。

视频可以为通过服务器1000中的任意视频类应用进行播放的视频。例如,视频类应用为X,视频可以为通过视频类应用X进行播放的视频。

在一个例子中,服务器1000可以获取视频的当前帧图像相对上一帧图像的更新信息,视频的当前帧图像相对上一帧图像的更新信息至少可以指示当前帧图像相对上一帧图像是否发生更新,以及,在当前帧图像相对上一帧图像发生更新的情况下,该发生更新的图像区域所在位置。

本一个例子中,服务器1000还可以获取视频的当前帧图像的像素信息,以至少根据像素信息获得当前帧图像。

本实施例中,服务器1000可以获取当前帧图像的像素信息和当前帧图像相对上一帧图像的更新信息,以根据像素信息获得当前帧图像,并根据对更新信息的判断,以选择合适的参照帧图像对当前帧图像进行编码,进而获得编码后的编码码流。例如,可以是在更新信息表示未发生更新的情况下,直接设置上一帧图像为对当前帧图像进行编码的参照帧图像,以利用该参照帧图像对当前帧图像进行编码。又例如,也可以是在更新信息表示发生更新的情况下,进一步对更新信息进行判断,以确定是否发生部分更新,进而选择合适的参照帧图像对当前帧图像进行编码。

步骤S3200,在更新信息表示未发生更新的情况下,设置上一帧图像为对当前帧图像进行编码的参照帧图像。

在一个例子中,可以是在更新信息表示未发生更新的情况下,直接设置上一帧图像为对当前帧图像进行编码的参照帧图像,以利用该参照帧图像对当前帧图像进行编码。

本例子中,其在更新信息表示未发生更新的情况下,设置上一帧图像为对当前帧图像进行编码的参照帧图像,省去了现有技术当中的对当前帧图像进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像的步骤。

本例子中,由于当前帧图像相对上一帧图像未发生更新,因此,上一帧图像可以直接作为对当前帧图像进行编码的参照帧图像,利用该参照帧图像对当前帧图像进行编码,必然能够提升编码效率。

在一个例子中,也可以是在更新信息表示未发生更新的情况下,设置当前帧图像中包括的每一宏块的预测残差均为0。可以理解的是,宏块为进行视频编码的单位,任意帧图像均是由若干个宏块组成,同时,视频编码也是以宏块为单位,逐个宏块进行编码并组织成连续的编码码流。

本例子中,当前帧图像中包括的每一宏块的预测残差均为0,可以理解为是,当前帧图像中包括的每一宏块与对对应宏块进行编码的宏块相同。

本步骤S3200中,服务器1000在更新信息表示未发生更新的情况下,可以是直接设置上一帧图像为对当前帧图像中包括的每一宏块进行编码的参照帧图像,同时,设置当前帧图像中包括的每一宏块的预测残差均为0,接着可以是利用参照帧图像逐个宏块进行编码并组织成连续的编码码流。

步骤S3300,利用参照帧图像对当前帧图像进行编码,获得编码后的编码码流。

本步骤S3300中,服务器1000可以是利用参照帧图像逐个宏块进行熵编码并组织成连续的编码码流。例如,可以是按照从左到右以及从上到下的顺序依次对每个宏块进行编码。又例如,也可以是同时对所有宏块进行编码,本实施例并不限定如何具体对宏块进行编码。

在本实施例中,可以是根据以上步骤S3300利用参照帧图像对当前帧图像进行编码后,接续对进行编码后的当前帧图像进行反编码和滤波处理,以获得当前帧图像,进而使得当前帧图像可以作为对下一帧图像进行编码时的参照帧图像。例如,可以是在对当前帧图像中包括的每一宏块进行熵编码后,接续对进行熵编码后得到的每一宏块进行反编码和滤波,进而获得当前帧图像。

根据以上步骤S3100~S3300可知,其通过获取视频的当前帧图像相对上一帧图像的更新信息,并在该更新信息表示当前帧图像相对上一帧图像未发生更新的情况下,可以直接将上一帧图像作为对当前帧图像进行编码的参照帧图像,从而,在当前帧图像相对上一帧图像未发生更新的情况下,直接省去了现有视频编码中的对当前帧图像进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

在一个实施例中,在执行步骤S3100之后,本实施例视频编码方法还可以包括:

在更新信息表示发生更新的情况下,在当前帧图像中标记出发生更新的图像区域。

以上在当前帧图像中标记出发生更新的图像区域可以为:按照预设的形状标记出发生更新的图像区域,该预设的形状例如可以是规则的矩形形状或者是圆形形状等,还可以是不规则的形状,在此不做限定。

本实施例能够在更新信息表示发生更新的情况下,进一步在当前帧图像中标记出发生更新的图像区域,进而提高发生更新的图像区域的可辨别性,程序设计人员可以根据对该标记直观地获知发生更新的图像区域在当前帧图像上的相对位置。

在一个实施例中,提供了另外一种视频编码方法,根据图4所示,在执行步骤S3100之后,本实施例视频编码方法还可以包括如下步骤S3400~S3600:

步骤S3400,在更新信息表示发生更新的情况下,判断更新信息是否表示发生部分更新。

在本实施例中,提供了一种与以上步骤S3200和步骤S3300中服务器1000在更新信息表示未发生更新的情况下,直接将上一帧图像作为对当前帧图像进行编码的参照帧图像进行编码完全不同的视频编码方法,即当服务器1000在更新信息表示发生更新的情况下,接续对更新信息是否表示发生部分更新进行判断,并根据判断结果进行不同编码。

步骤S3500,在更新信息表示发生部分更新的情况下,对发生部分更新的图像区域进行宏块对齐操作。

本步骤S3500中,例如可以是在更新信息表示发生部分更新的情况下,对发生部分更新的图像区域进行宏块向上对齐操作,以使得发生部分更新的图像区域可以用整数个宏块单位进行编码。

步骤S3600,接续判断进行对齐操作后的宏块是否位于发生部分更新的图像区域内,并针对位于发生部分更新的图像区域内的宏块和位于发生部分更新的图像区域外的宏块分别采用不同的编码方式进行编码,获得编码后的编码码流。

在本实施例中,该步骤S3600中针对位于发生部分更新的图像区域外的宏块进行编码,获得编码后的编码码流可以进一步包括如下步骤S3611~S3612:

步骤S3611,设置上一帧图像为对位于发生部分更新的图像区域外的宏块进行编码的参照帧图像。

在一个例子中,服务器1000判断出进行对齐操作后的宏块位于发生部分更新的图像区域外,在此,可以是直接设置上一帧图像为对位于发生部分更新的图像区域外的宏块进行编码的参照帧图像,以利用上一帧图像对位于发生部分更新的图像区域外的宏块进行编码。

在一个例子中,服务器1000判断出进行对齐操作后的宏块位于发生部分更新的图像区域外,在此,也可以是设置位于发生部分更新的图像区域外的每一宏块的预测残差均为0。

步骤S3612,利用参照帧图像对位于发生部分更新的图像区域外的宏块进行编码,获得对应位于发生部分更新的图像区域外的每一宏块的编码码流。

本步骤S3612中,服务器1000可以是利用参照帧图像逐个对位于发生部分更新的图像区域外的宏块进行熵编码并组织成连续的编码码流。例如,可以是按照从左到右以及从上到下的顺序依次对位于发生部分变化的图像区域外的宏块进行编码。又例如,也可以是同时对位于发生部分变化的图像区域外的所有宏块进行编码,本实施例并不限定如何具体对宏块进行编码。

在本实施例中,可以是根据以上步骤S3611~S3612针对位于发生部分更新的图像区域外的宏块进行编码,获得编码后的编码码流后,接续对进行编码后的宏块进行反编码和滤波处理,以获得位于发生部分更新的图像区域外的宏块。

在本实施例中,该步骤S3600中针对位于发生部分更新的图像区域内的宏块进行编码,获得编码后的编码码流可以进一步包括如下步骤S3621~S3622:

步骤S3621,对位于发生部分更新的图像区域内的宏块进行运动预测,获得对应每一宏块的预测残差和运动向量。

步骤S3622,根据每一预测残差和运动向量,获得对应位于发生部分更新的图像区域内的每一宏块的编码码流。

在以上步骤S3621和本步骤S3622中,服务器1000判断出进行对齐操作后的宏块位于发生部分更新的图像区域内,在此,可以是利用现有的视频编码流程对位于发生部分更新的图像区域内的宏块进行编码。例如,可以是对位于发生部分更新的图像区域内的宏块进行运动估计以搜索出能够对对应宏块进行编码的其他帧图像(帧间预测),及对对应宏块进行编码的当前帧中的其他宏块(帧内预测),其中,可以是用运动向量表示能够对对应宏块进行编码的其他帧图像,或对对应宏块进行编码的当前帧中的其他宏块;接着一方面对运动向量进行运动补偿,以获得帧间残差和/或帧内残差,并对帧间残差和/或帧内残差进行预测模式决策,以获得预测残差,并对预测残差进行变换与量化;另一方面对运动向量和进行变换与量化后的预测残差进行熵编码并组织成连续的编码码流。

在本实施例中,可以是根据以上步骤S3621~S3622针对位于发生部分更新的图像区域内的宏块进行编码,获得编码后的编码码流后,接续对进行编码后的宏块进行反编码、反量化、反变换及滤波处理,以获得位于发生部分更新的图像区域内的宏块。

根据以上步骤S3400~S3600可知,其通过获取视频的当前帧图像相对上一帧图像的更新信息,并在该更新信息表示当前帧图像相对上一帧图像发生更新的情况下,接续判断更新信息是否指示发生部分更新,并在发生部分更新时,其针对于位于发生部分更新的图像区域外的宏块,直接省去了现有视频编码中进行运动预测以搜索出能够对位于发生部分更新的图像区域外的宏块进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

在一个实施例中,提供了另外一种视频编码方法,根据图4所示,在执行步骤S3400之后,本实施例视频编码方法还可以包括如下步骤S3700:

步骤S3700,在更新区域表示未发生部分更新的情况下,对当前帧图像中包括的所有宏块进行编码,获得编码后的编码码流。

本实施例中,该步骤S3700中对当前帧图像中包括的所有宏块进行编码,获得编码后的编码码流可以进一步包括如下步骤S3710~S3720:

步骤S3710,对当前帧图像中包括的所有宏块进行运动预测,获得对应每一宏块的预测残差和运动向量。

步骤S3720,根据每一预测残差和运动向量,获得编码后的编码码流。

在以上步骤S3710和本步骤S3720中,服务器1000判断更新信息表示未发生部分更新的情况下,可以是利用现有的视频编码流程对当前帧图像进行编码。例如,可以是对当前帧图像中包括的所有宏块进行运动估计以搜索出能够对对应宏块进行编码的其他帧图像(帧间预测),及对对应宏块进行编码的当前帧中的其他宏块(帧内预测),其中,可以是用运动向量表示能够对对应宏块进行编码的其他帧图像,或对对应宏块进行编码的当前帧中的其他宏块;接着一方面对运动向量进行运动补偿,以获得帧间残差和/或帧内残差,并对帧间残差和/或帧内残差进行预测模式决策,以获得预测残差,并对预测残差进行变换与量化;另一方面对运动向量和进行变换与量化后的预测残差进行熵编码并组织成连续的编码码流。

在本实施例中,根据以上步骤S3700对当前帧图像中包括的所有宏块进行编码后,接续对进行编码后的当前帧图像进行反编码和滤波处理,以获得当前帧图像,进而使得当前帧图像可以作为对下一帧图像进行编码时的参照帧图像。。

根据以上步骤S3700可知,其通过获取视频的当前帧图像相对上一帧图像的更新信息,并在该更新信息表示当前帧图像相对上一帧图像发生更新的情况下,接续判断更新信息是否指示发生部分更新,并在未发生部分变化时,利用现有视频编码流程对当前帧图像进行编码,进而降低了编码成本。

在一个实施例中,可以在对帧图像进行编码之前对该帧图像进行渲染,以加快编码速度。该实施例中,该视频编码方法可以进一步包括:

在开启渲染功能的情况下,在对视频的任意帧图像进行编码之前,渲染任意帧图像。

该实施例中,可以是由平台维护方的运维人员使用的终端设备2000在对视频进行编码时,设置是否针对视频中的帧图像进行渲染的渲染开关。

该实施例中,当前帧图像和上一帧图像均为渲染后的图像。

例如,在开关为开启状态的情况下,渲染功能被开启,需要先渲染任意帧图像,并针对渲染后的任意帧图像进行编码,进而加快编码速度,如何对渲染后的任意帧图像进行编码可以参照以上任意实施例,本实施例在此不做赘述。

又例如,在开关为关闭状态的情况下,渲染功能被关闭,则直接针对任意帧图像进行编码,如何对任意帧图像进行编码可以参照以上任意实施例,本实施例在此不做赘述。

在一个实施例中,其预先设置有编码方式和设备类型间的映射关系,以将编码后的编码码流发送至对应设备类型的终端设备进行解码播放,实现定制化服务。该实施例中,该视频编码方法还可以进一步包括步骤S3800~S3900:

步骤S3800,获取选择编码对应的编码方式的终端设备2000的设备类型。

设备类型用于区分不同类型的终端设备2000。该设备类型可以用设备属性参数表示,该设备属性参数例如可以是设备的型号、设备的编号、设备的序列号以及设备的全局唯一标志符(Globally Unique Identifier,GUID)等。

本实施例中,该编码方式适用于所有硬件配置,但可以在服务器1000中配置使用该种编码方式的的终端设备的设备类型。

步骤S3900,将编码后的编码码流发送至属于该设备类型的终端设备2000进行解码播放。

<方法实施例二>

图5是根据一个实施例的视频解码方法的流程示意图,该方法可以由终端设备实施,例如由图1a或图2所示的终端设备2000。如图5所示,本实施例的视频解码方法可以包括如下步骤S5100~S5300:

步骤S5100,获取针对视频的各帧图像进行编码得到的编码码流。

针对各帧图像中的任意帧图像进行编码包括:在任意帧图像相对上一帧图像未发生更新的情况下,将上一帧图像作为参照帧图像对任意帧图像进行编码。

步骤S5200,对编码码流进行解码。

步骤S5300,播放解码后的视频。

根据以上步骤S5100~S5300可知,其在任意帧图像相对上一帧图像未发生更新的情况下,将上一帧图像作为参照帧图像对任意帧图像进行编码,从而,在任意帧图像相对上一帧图像未发生更新的情况下,直接省去了现有视频编码中的对任意帧图像进行运动预测以搜索出能够对任意帧图像进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

<例子>

图6示出了一个例子的视频编解码方法,如图1b和图6所示,该例子中,视频编解码方法可以包括如下步骤:

步骤S6110,终端设备通过与云服务器之间的WebRTC协议向云服务器发送视频播放请求。

本步骤S6110中,终端设备可以是例如图1a或图2所示的终端设备2000,或者是图1b中的客户端Client,云服务器可以是例如图1a或图2所示的服务器1000,也可以是图1b中运行云主机操作系统(Host OS in Cloud)的云服务器,终端设备与云服务器之间可以通过WebRTC协议进行音视频流数据的传输。

步骤S6210,云服务器里安卓容器(Android Container)中的安卓应用(AndroidApplications)响应于该视频播放请求,获取针对视频的各帧图像和音频。

安卓应用可以为进行视频播放的视频类应用。

本步骤S6210中,例如可以是进行视频播放的视频类应用X响应于该视频播放请求,并获取针对视频的各帧图像和音频。

步骤S6220,云服务器分别通过安卓框架(Android Framework)中的AudioFlinger和SurfaceFlinger将音频和各帧图像通过进程间通信(IPC,InterProcessCommunication)传输至云服务器中的音频编码器(Video Encoder)和视频编码器(AudioEncoder)进行编码,获得音频编码码流和图像编码码流。

参照图7,该步骤S6220中针对各帧图像中的任意帧图像进行编码的具体过程可以包括S6221~S6229:

步骤S6221,获取视频的当前帧图像相对上一帧图像的更新信息。

本步骤S6221中,可以是在SurfaceFlinger输出层增加输出信息,使得SurfaceFlinger输出层不仅能够输出当前帧图像的像素信息,还能够输出当前帧图像相对上一帧图像的更新信息。

步骤S6222,判断更新信息是否表示发生更新,如果是,则执行步骤S6224,反之,执行步骤S6223。

步骤S6223,在更新信息表示未发生更新的情况下,设置当前帧中包括的所有宏块预测残差均为0,并设置上一帧图像为对当前帧图像中包括的所有宏块进行编码的参照帧图像,之后执行步骤S7229。

本步骤S6223中,在更新信息表示未发生更新的情况下,采用帧间预测对当前帧图像进行预测。

步骤S6224,在更新信息表示发生更新的情况下,进一步判断更新信息是否表示发生部分更新,若是,则执行步骤S6225,反之,执行步骤S6227。

步骤S6225,在更新信息表示发生部分更新的情况下,对发生部分更新的图像区域进行宏块对齐操作。

步骤S6226,判断进行宏块对齐操作后的宏块是否更新,若是,则执行步骤S6227,反之,执行步骤S6228。

步骤S6227,利用现有的运动预测步骤对当前帧图像中的对应宏块进行处理,获得运动向量和预测残差,对预测残差进行变换与量化后结合运动向量进行熵编码,获得编码码流,流程结束。

步骤S6228,设置对应宏块预测残差为0,并设置上一帧图像为对对应宏块进行编码的参照帧图像。

步骤S6229,利用参照帧图像对当前帧图像中的宏块进行熵编码,获得编码码流,流程结束。

步骤S6230,云服务器基于WebRTC协议将音频编码码流和图像编码码流通过音频通道(Video Channel)和视频通道(Audio Channel)发送至终端设备。

步骤S6120,终端设备对音频编码码流和视频编码码流进行解码,并播放解码后的视频。

根据本例子,其在云服务器里安卓框架SurfaceFlinger输出层增加输出信息,使得SurfaceFlinger输出层不仅能够输出当前帧图像的像素信息,还能够输出当前帧图像相对上一帧图像的更新信息,并在该更新信息表示当前帧图像相对上一帧图像未发生更新的情况下,可以直接将上一帧图像作为对当前帧图像进行编码的参照帧图像,从而,在当前帧图像相对上一帧图像未发生更新的情况下,直接省去了现有视频编码中的对当前帧图像进行运动预测以搜索出能够对当前帧图像进行编码的参照帧图像的步骤,提高了编码效率,降低了编码成本。

<装置实施例一>

在本实施例中,还提供一种视频编码装置,如图8所示,该视频编码装置包括更新信息获取模块8100、参照帧图像获取模块8200和编码模块8300。

该更新信息获取模块8100,用于获取所述视频的当前帧图像相对上一帧图像的更新信息。

该参照帧图像获取模块8200,用于在所述更新信息表示未发生更新的情况下,设置所述上一帧图像为对所述当前帧图像进行编码的参照帧图像。

该编码模块8300,用于利用所述参照帧图像对所述当前帧图像进行编码,获得编码后的编码码流。

在一个实施例中,该编码模块8300,还用于在所述更新信息表示未发生更新的情况下,设置所述当前帧图像中包括的每一宏块的预测残差均为0。

在一个实施例中,该编码模块8300,还用于在所述更新信息表示发生更新的情况下,判断所述更新信息是否表示发生部分更新;在所述更新信息表示发生部分更新的情况下,对所述发生部分更新的图像区域进行宏块对齐操作;接续判断进行所述对齐操作后的宏块是否位于所述发生部分更新的图像区域内,并针对位于所述发生部分更新的图像区域内的宏块和位于所述发生部分更新的图像区域外的宏块分别采用不同的编码方式进行编码,获得编码后的编码码流。

在一个实施例中,该编码模块8300,还用于在所述更新信息表示发生更新的情况下,在所述当前帧图像中标记出所述发生更新的图像区域。

在一个实施例中,该编码模块8300,还用于在所述更新区域表示未发生部分更新的情况下,对所述当前帧图像中包括的所有宏块进行编码,获得编码后的编码码流。

在一个实施例中,该编码模块8300,还用于对所述当前帧图像中包括的所有宏块进行运动预测,获得对应每一所述宏块的预测残差和运动向量;根据每一所述预测残差和运动向量,获得编码后的编码码流。

在一个实施例中,该编码模块8300,还用于设置所述上一帧图像为对位于所述发生部分更新的图像区域外的宏块进行编码的参照帧图像;利用所述参照帧图像对位于所述发生部分更新的图像区域外的宏块进行编码,获得对应位于所述发生部分更新的图像区域外的每一所述宏块的编码码流。

在一个实施例中,该编码模块8300,还用于设置位于所述发生部分更新的图像区域外的每一宏块的预测残差均为0。

在一个实施例中,该编码模块8300,还用于对位于所述发生部分更新的图像区域内的宏块进行运动预测,获得对应每一所述宏块的预测残差和运动向量;根据每一所述预测残差和运动向量,获得对应位于所述发生部分更新的图像区域内的每一所述宏块的编码码流。

在一个实施例中,装置8000还包括渲染模块(图中未示出),该渲染模块,用于在开启渲染功能的情况下,在对所述视频的任意帧图像进行编码之前,渲染所述任意帧图像;其中,所述当前帧图像和所述上一帧图像均为渲染后的图像。

在一个实施例中,装置8000还包括选择模块(图中未示出),该选择模块,用于获取选择所述编码对应的编码方式的终端设备的设备类型;将所述编码后的编码码流发送至属于所述设备类型的终端设备进行解码播放。

<装置实施例二>

在本实施例中,还提供一种视频解码装置,如图9所示,该视频解码装置包括编码码流获取模块9100、解码模块9200和视频播放模块9300。

该编码码流获取模块9100,用于获取针对视频的各帧图像进行编码得到的编码码流,其中,针对所述各帧图像中的任意帧图像进行编码包括:在所述任意帧图像相对上一帧图像未发生更新的情况下,将所述上一帧图像作为参照帧图像对所述任意帧图像进行编码。

该解码模块9200,用于对所述编码码流进行解码。

该视频播放模块9300,用于播放解码后的视频。

<设备实施例>

本实施例中,还提供一种电子设备,该电子设备包括本说明书装置实施例中描述的视频解码装置8000;或者,本说明书装置实施例中描述的视频解码装置9000;或者,该电子设备为图10所示的电子设备10000,包括:

存储器10100,用于存储可执行命令。

处理器10200,用于在存储器10100存储的可执行命令的控制下,执行本说明书任意方法实施例中描述的方法。

在电子设备根据所执行的方法实施例的实施主体,可以是服务器,也可以是终端设备。

<系统实施例>

在本实施例中,还提供一种视频播放系统11000,如图11所示,包括:

服务器11100,该服务器例如可以是如图1a或图2所示的服务器1000。

该服务器11100包括存储器和处理器,服务器11100的存储器用于存储可执行命令;服务器11100的处理器用于在可执行命令的控制下,执行如本说明书任意实施例的视频编码方法。

本实施例中,视频播放系统11000还包括终端设备11200,该终端设备11200可以是图1a或图2所示的终端设备2000。

终端设备11200包括存储器和处理器,终端设备11200的存储器用于存储可执行命令;终端设备11200的处理器用于在可执行命令的控制下,执行如本说明书任意实施例的视频解码方法。

<计算机可读存储介质实施例>

本实施例提供一种计算机可读存储介质,该存储介质中存储有可执行命令,该可执行命令被处理器执行时,执行本说明书任意方法实施例中描述的方法。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。

26页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种图像编码方法及装置、计算机存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类