一种数据编码及解码方法和装置与流程

文档序号:14942621发布日期:2018-07-13 21:24阅读:295来源:国知局

本申请涉及数据处理技术领域,尤其涉及一种数据编码及解码方法和装置。



背景技术:

数据编码以及解码的应用范围十分广泛,如,由于音、视频文件包含有大量的数据,在需要传输音、视频文件的情况下,为了减少网络传输的数据量,就需要对音、视频文件进行编码后,通过网络传输编码后的音频或视频数据;相应的,在接收到编码后的音、视频的播放端,可以通过对编码后的音、视频数据进行解码,以实现音、视频的播放。

目前,数据编解码方式有软编解码和硬编解码两种,其中,软编解码是指利用软件算法实现编码或解码;而硬编解码是指基于设备中的硬件实现编码或解码。软编解码的兼容性较高,实现数据编码或解码更为简单,但是对中央处理器(cpu,centralprocessingunit)占用率较大,很容易由于cpu负载过重而造成设备发热;而硬编解码进行数据编码或解码的效率较高,但是却不能兼容所有数据格式,而且即使兼容某一种数据格式,也可能会出现编码或解码不成功的情况。因此,如何合理选择编解码方式,以在保证成功编解码的前提下,降低cpu的占用率是本领域技术人员迫切需要解决的技术问题。



技术实现要素:

有鉴于此,本申请提供了一种数据编码及解码方法和装置,以合理选择编码以及解码的方式,最大限度的降低cpu占用率。

为实现上述目的,一方面,本申请实施例提供了一种数据编码方法,包括:

确定待编码的数据集合;

获取硬编码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

在控制软编码器对所述数据集合中当前待编码的目标数据进行编码的同时,控制所述硬编码器基于所述目标数据格式对所述目标数据进行编码;

如果所述硬编码器编码出的数据正常,则终止所述软编码器的编码,并控制所述硬编码器基于所述目标数据格式,对所述数据集合中尚未被编码的数据进行编码。

另一方面,本申请实施例还提供了一种数据解码方法,包括:

确定待解码的数据集合;

获取硬解码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,控制所述硬解码器基于所述目标数据格式对所述目标数据进行解码;

如果所述硬解码器解码出的数据正常,则终止所述软解码器的解码,并控制所述硬解码器基于所述目标数据格式,对所述数据集合中尚未被解码的数据进行解码。

另一方面,本申请实施例还提供了一种数据编码装置,包括:

数据确定单元,用于确定待编码的数据集合;

格式获取单元,用于获取硬编码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

格式选取单元,用于如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

编码控制单元,用于在控制软编码器对所述数据集合中当前待编码的目标数据进行编码的同时,控制所述硬编码器基于所述目标数据格式对所述目标数据进行编码;

编码选取单元,用于如果所述硬编码器编码出的数据正常,则终止所述软编码器的编码,并控制所述硬编码器基于所述目标数据格式,对所述数据集合中尚未被编码的数据进行编码。

另一方面,本申请实施例还提供了一种数据解码装置,包括:

数据获取单元,用于确定待解码的数据集合;

格式获取单元,用于获取硬解码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

格式选取单元,用于如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

解码控制单元,用于在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,控制所述硬解码器基于所述目标数据格式对所述目标数据进行解码;

解码选取单元,用于如果所述硬解码器解码出的数据正常,则终止所述软解码器的解码,并控制所述硬解码器基于所述目标数据格式,对所述数据集合中尚未被解码的数据进行解码。

由以上可知,在本申请实施例中,在计算机设备利用软编码器(或软解码器)对数据进行编码(或解码)的同时,会根据硬编码器(或硬解码器)所支持的数据格式,尝试利用硬编码器(或硬解码器)对数据进行编码(或编码),如果硬编码器编码(或硬解码器解码)成功,则会终止软编码(或软解码)方式,并利用硬编码(或硬解码)方式对待编码(待解码)的数据集合中尚未被编码(或被解码)的数据继续进行编码(或解码),从而在保证编码(或解码)成功的前提下,合理选择编码(或解码)方式,避免了单纯利用软编码(或软解码)方式所导致的cpu资源耗费过多的情况,减少了由于cpu负载过高而导致计算机设备温度过高的情况。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种计算机设备的一种组成结构示意图;

图2为本申请公开一种数据编码及解码方法所适用的一种应用场景的示意图;

图3为本申请公开的一种数据编码方法一个实施例的流程示意图;

图4示出了在本申请一种应用场景下的数据编码方法的一种流程交互示意图;

图5为本申请公开的一种数据解码方法一个实施例的流程示意图;

图6示出了本申请一种数据编码装置一个实施例的组成结构示意图;

图7示出了本申请一种数据解码装置一个实施例的组成结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例的数据编码及解码方法可以应用于任意具备编码以及解码功能的计算机设备中,以实现合理选择编码以及解码的方式,提高编码以及解码效率,并降低编码以及解码所占用的处理器资源。

在本申请实施例的数据编码方法中,计算机设备在确定出待编码的数据集合之后,获取硬编码器所支持的数据格式集合,该数据格式集合中包括至少一种数据格式;如果该数据格式集合中存在尚未被测试的数据格式,则从该尚未被测试的数据格式中选取出需要测试的目标数据格式;在控制软编码器对数据集合中当前待编码的目标数据进行编码的同时,控制该硬编码器基于该目标数据格式对目标数据进行编码;如果硬编码器编码出的数据正常,则终止软编码器的编码,并控制硬编码器基于该目标数据格式,对该数据集合中尚未被编码的数据进行编码。

可见,在计算机设备利用软编码器对数据进行编码的同时,会根据硬编码器所支持的数据格式,尝试利用硬编码器对数据进行编码,如果硬编码器编码成功,则会终止软编码方式,并利用硬编码方式对待编码的数据集合中尚未被编码的数据继续进行编码,从而避免了利用软编码方式所导致的cpu资源耗费过多,使得计算机设备温度过高的情况。而且,由于在尝试硬编码的过程中,计算机设备也同时利用软编码对待编码的目标数据进行编码,这样,在采用硬编码方式对数据进行成功编码之前,仍可以获取到利用软编码对数据进行编码所得到的数据编码结果,有效利用了尝试硬编码方式对数据进行编码这一过程中的时间,避免了尝试硬编码过程所导致的时间浪费。

可选的,对于某一个目标数据格式而言,如果硬编码器基于该目标数据格式对目标数据进行编码后,编码出的数据不正常,则返回执行如果数据格式集合中存在尚未被测试的数据格式,从数据集合中尚未被测试的数据格式中选取出需要测试的目标数据格式的操作,以完全遍历该硬编码器所支持的所有数据格式,这样,只要基于该硬编码器所支持的任意一种数据格式,对数据编码成功,则可以使用该硬编码器基于该种数据格式进行数据编码,从而有利于提高硬编码器的利用率,降低使用软编码器的概率,从而有效降低cpu的占用率。

相应的,在本申请实施例的一种数据解码方法中,计算机设备在确定待解码的数据集合之后,获取硬解码器所支持的数据格式集合,该数据格式集合中包括至少一种数据格式;如果该数据格式集合中存在尚未被测试的数据格式,则从该数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,控制该硬解码器基于该目标数据格式对该目标数据进行解码;如果该硬解码器解码出的数据正常,则终止该软解码器的解码,并控制该硬解码器基于该目标数据格式,对该数据集合中尚未被解码的数据进行解码。

可见,在计算机设备利用软解码器对数据进行解码的同时,会根据硬解码器所支持的数据格式,尝试利用硬解码器对数据进行解码,如果硬解码器解码成功,则会终止软解码方式,并利用硬解码方式对待解码的数据集合中尚未被解码的数据继续进行解码,从而避免了利用软解码方式所导致的cpu资源耗费过多,使得计算机设备温度过高的情况。而且,由于在尝试硬解码的过程中,计算机设备也同时利用软解码对待解码的目标数据进行解码,这样,在采用硬解码方式对数据进行成功解码之前,仍可以获取到利用软解码对数据进行解码所得到的数据解码结果,有效利用了尝试硬解码方式对数据进行解码这一过程中的时间,避免了尝试硬解码过程所导致的时间浪费。

可选的,对于某一个目标数据格式而言,如果硬解码器解码出的数据不正常,则返回执行如果数据格式集合中存在尚未被测试的数据格式,从数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式的操作,以完全遍历该硬编码器所支持的所有数据格式,从而有利于提高硬编码器的利用率,降低使用软编码器的概率,从而有效降低cpu的占用率。

可以理解的是,本申请实施例中该计算机设备可以是作为服务器的计算机;也可以是手机、平板电脑、台式电脑等终端。

需要说明的是,在本申请实施例中编码和解码是数据的两个相互独立的数据处理阶段。

其中,编码和解码两个数据处理阶段可以在同一台计算机设备完成,如,计算机设备对数据进行编码之后进行存储,后续该计算机设备可以调取所存储的经过编码的数据,并对经过编码的数据进行解码,以呈现出相关的内容。

编码和解码这两个数据处理过程也可以是分别由两台不同的计算机设备分别完成,如,在一台计算机设备中对数据进行编码后,并将经过编码的数据传输给另一台计算机设备,以在该另一台计算机设备中输出该数据相关的内容;相应的,另一台计算机设备在接收到该经过编码的数据之后,可以对经过编码的数据进行解码,以实现数据的输出。

如,参见图1,其示出了本申请一种用于实现编码或解码的计算机设备的一种组成结构示意图。在图1中,该计算机设备可以包括:处理器101、存储器102、通信接口103。

可选的,该计算机设备还可以包括:显示器104和输入单元105。

处理器101、存储器102、通信接口103、显示器104、输入单元105均通过通信总线106完成相互间的通信。

在本申请实施例中,该处理器101至少包括:图形处理器(gpu,graphicsprocessingunit)1012,gpu可以作为硬编码器以及硬解码器,以用于实现本申请实施例中对数据进行硬编码和/或硬解码。

可选的,该处理器101中可以包括中央处理器(cpu,centralprocessingunit)1011,可以辅助图形处理器完成一些硬编码、硬解码相关的数据格式转换,编码控制等相关处理,还可以实现本申请实施例中对数据进行软编码和/或软解码。当然,该中央处理器还可以被替换为特定应用集成电路(application-specificintegratedcircuit,asic),数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件等。

存储器102中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令。该存储器可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

该通信接口103可以为通信模块的接口,如gsm模块的接口。

该显示器104可用于显示经过解码后的数据所对应的内容;还可以显示由用户输入的信息,或者提供给用户的信息,以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图片等任意组合来构成。该显示器可以包括显示面板,如,可以为采用液晶显示器、有机发光二极管等形式来配置的显示面板。进一步的,该显示器可以包括具备采集触摸事件的触摸显示面板。

该输入单元105可用于接收输入的用户输入的字符、数字等信息,以及产生与用户设置以及功能控制有关的信号输入。该输入单元可以包括但不限于物理键盘、鼠标、操作杆等中的一种或多种。

可以理解的是,图1是以计算机设备中的实现硬编码以及硬解码的硬件为gpu为例进行说明,但是可以理解的是,计算机设备中实现硬编码以及硬解码的硬件还可以有其他可能的情况,在此不再赘述。

当然,图1所示的计算机设备结构并不构成对计算机设备的限定,在实际应用中计算机设备可以包括比图1所示的更多或更少的部件,或者组合某些部件。

为了便于理解,下面对本申请实施例所适用的应用场景进行介绍。

以编码和解码过程分别由不同的计算机设备来执行为例进行介绍,同时假设需要编码以及解码的数据为音、视频等多媒体数据。参见图2,其示出了本申请一种应用场景的示意图,在图2的应用场景中包括:

至少一台服务器201以及至少一台终端202。

其中,该至少一台服务器201可以组成用于向播放器客户端提供多媒体服务器的服务器集群。

在一种可能的情况中该终端202可以为该播放器客户端,如该终端可以为手机、平板电脑等安装有播放器的终端。

其中,服务器201可以存储或者从数据库获取可供播放器客户端播放的多媒体数据。同时,在本申请实施例中该服务器可以对多媒体数据进行编码,并通过网络将编码后的数据传输给播放器客户端202。

如,在服务器接收到播放器客户端对多媒体资源的播放请求或者下载请求时,获取播放器客户端所请求的多媒体数据,并对多媒体资源进行编码,以将多媒体资源编码为指定的多媒体格式,通过对多媒体数据进行编码可以所需传输的数量的数据量。又如,服务器在获取到需要存储的多媒体数据时,可以将该多媒体数据编码为指定的多媒体格式,然后存储经过编码的多媒体数据,以便后续将经过编码的多媒体数据传输给终端。

相应的,该播放器客户端可以从服务器获取经过编码的多媒体数据,并对经过编码的多媒体数据进行解码,将多媒体数据解码为适合播放器播放的多媒体格式,以在该播放器实现多媒体播放。

在另一种可能的情况中,该服务器201还可以为实现两台或多台终端202互联的服务器,在该种情况下,终端202可以通过服务器向其他终端202传输多媒体资源,在终端202传输多媒体资源之前也可以对多媒体资源对应的数据进行编码,然后将经过编码后的多媒体数据传输给服务器,以通过服务器将该经过编码后的多媒体数据传输给指定的一个或多个终端。而接收到经过编码的多媒体数据的终端则可以对经过编码的多媒体数据进行解码。

另外,两台服务器之间进行数据传输时,可以先对数据进行编码之后再进行传输。

当然,图2仅仅是一种应用场景的示意图,在实际应用中,两台终端也可以分别作为数据的接收端和发送端,作为发送端的终端可以对需要传输的数据进行编码后传输给接收端,而作为接收端的终端可以对接收到的经过编码的数据进行解码。

需要说明的是,无论编码以及解码是由一台计算机设备来完成,还是分别由两台计算机设备来完成,对于任意计算机设备执行编码(或者解码)时,其具体执行过程均是相同的。下面结合以上共性,分别对本申请实施例的一种数据编码方法以及一种数据解码方法进行详细介绍。

首先介绍本申请一种数据编码方法,参见图3,其示出了本申请一种数据编码方法一个实施例的流程示意图,本实施例的方法可以以上所提到的任意一种计算机设备。本实施例的方法可以包括:

s301,获取待编码的数据集合;

其中,该数据集合中的所有数据均为待进行编码的数据,该待编码的数据集合中可以包括一帧或多帧数据。如,该待编码的数据集合可以为包含多帧数据的文件,例如,该待编码的数据集合可以为一个待编码的音频文件、视频文件或者是图像文件等等。

s302,生成用于控制软编码的软编码线程以及用于控制硬编码的硬编码线程;

作为一种优选实施方式,本申请实施例中计算机设备分别生成了两个线程,以通过这两个线程来分别控制软编码以及硬编码,并通过这两个线程的并行运行,来实现同时对待编码的数据进行软编码和硬编码。

可以理解的是,该步骤s302为可选步骤,在实际应用中也可以不通过线程,而通过计算机设备中处理器直接对软编码以及硬编码的过程进行控制也同样适用于本申请实施例。

s303,通过软编码线程初始化软编码器,并启动该软编码器;

其中,该软编码器可以理解为计算机设备中运行的用于实现软编码的程序。

软编码器的初始化可以为设置软编码器运行所需的参数、编码的数据格式等等,以为启动软编码器做准备。在初始化软编码器之后,可以通过该软编码线程启动该软编码器,以便后续通过软编码器对数据进行编码。

其中,对软编码器进行初始化以及启动软编码器为可选步骤,其目的仅仅是为后续利用软编码器进行编码作为准备。

s304,通过硬编码线程获取硬编码器所支持的数据格式集合;

其中,该数据格式集合中包括至少一种数据格式。硬件编码器所支持的数据格式也可以称为硬件编码器所支持的编码格式。如,对于基于yuv色彩空间的编码而言,编码器支持的数据格式可以为nv12、nv21或者yuyv等等。

可以理解的是,由于不同计算机设备的机型、生产厂家等不同,不同计算机设备内的硬编码器所支持的数据格式也会有所差异,一般情况下,计算机设备中的硬编码器至少支持一种数据格式。

可选的,硬编码线程可以通过与硬编码器相连的接口与该硬编码器进行通信,以获取该硬编码器所支持的所有数据格式所组成的数据格式集合。

s305,通过硬编码线程检测硬编码器所支持的数据格式集合中是否存在尚未被测试的数据格式,如果是,则执行步骤s306;如果否,执行步骤s316;

在本申请实施例中,依次将数据格式集合中的每种数据格式作为需要测试的目标数据格式,并测试该硬编码器在支持该目标数据格式的前提下,是否可以正确进行数据编码,直至数据格式集合中所有的数据格式均已经被测试为止。

s306,从待编码的数据集合中,确定当前需要编码的目标数据;

可以理解的是,数据集合中包含有大量的数据,而在进行编码时,需要按照数据集合中数据顺序依次对数据进行编码,在本申请实施例中将当前需要进行编码的数据或者数据段称为目标数据。

如,假设每次进行编码时,均对一个最小的数据单元进行编码,例如,该数据单元可以为一帧数据,也可以是指定数量个比特的数据,这样,可以按照数据集合中数据顺序,确定当前需要进行编码的数据单元,并将该数据单元所包含的数据作为目标数据。

需要说明的是,该步骤s306与步骤s305的顺序并不限于图3所示,在实际应用中,该步骤s306也可以在该步骤s305之前,即,当计算机设备确定上一次确定出的目标数据已经被编码之后,则可以执行该步骤s306,以确定出当前需要进行编码的目标数据。

s307,分别指示软编码线程和硬编码线程对该目标数据进行编码;

其中,该步骤s307为可选步骤,在实际应用中,计算机设备可以直接执行步骤s308和s309,而无需单独进行指示;另外,当不存在软编码线程和硬编码线程的情况下,也无需执行该步骤s307。

s308,通过软编码线程控制软编码器对该目标数据进行编码;

可选的,软编码线程可以检测该目标数据的原始数据格式是否为软编码器所支持的数据格式,如果不是,则将该目标数据转换为该软编码器所支持的数据格式后,对格式转换后的目标数据进行编码。

可选的,在软编码线程确定该软编码器完成对该目标数据的编码之后,软编码线程可以向计算机设备上报编码完成信息,以便计算机设备判断当前是否需要继续从该数据集合中尚未编码的数据中确定待编码的目标数据。

s309,通过硬编码线程从数据格式集合中尚未被测试的数据格式中,选取出当前需要测试的目标数据格式;

在本申请实施例中,将本次选取出的需要测试的数据格式称为目标数据格式。

s310,通过硬编码线程检测从该目标数据的原始数据格式转换到该目标数据格式的格式转换关系是否属于预设的格式转换关系,如果是,则执行步骤s311;如果否,则返回步骤s305;

在本申请实施例中,将对该目标数据进行格式转换之前,该目标数据所具有的数据格式称为原始数据格式,以便于后续所需要转换到的目标数据格式进行区分。

可以理解的是,硬编码器所支持的数据格式非常有限,虽然通过硬编码线程可以进行一些数据格式转换,但是并非所有的数据格式都可以转换为目标数据格式,因此,可以预置能够成功转换的两种数据格式之间的格式转换关系,该格式转换关系中可以包括至少一对格式之间的转换关系。如果原始数据格式与该目标数据格式不属于该预设的格式转换关系中的一对格式,则无法成功将该原始数据格式转换为目标数据格式,在该种情况下,自然无法成功对目标数据进行硬编码。

其中,该步骤s310为可选步骤,其目的是为了避免直接执行后续的步骤s311的数据格式转换而导致格式转换失败,从而耗费数据处理资源。

s311,通过硬编码线程将目标数据的原始数据格式转换为目标数据格式;

s312,通过硬编码线程控制硬编码器将转换为目标数据格式的目标数据进行编码;

需要说明的是,在本申请实施例中,步骤s308与步骤s309至s312的过程是同步执行的,也就是说,在控制软编码器对目标数据进行软编码的过程中,会同时对目标数据进行硬编码所需的数据格式转换,并控制硬编码器对该目标数据进行硬编码。

s313,通过硬编码线程检测经过编码的目标数据是否正常,如果是,则执行步骤s314;如果否,则返回步骤s305;

其中,检测经过编码的目标数据是否正常实际上就是检测编码出的数据是否正确,检测经过编码后的目标数据是否正确的方式可以有多种,当数据的种类不同时,检测方式也可能会有所不同。如,当目标数据为视频数据时,编码器编码出的第一帧数据为i帧,而i帧具有特定的格式标准,通过i帧头部的标识信息可以判别编码是否正确。

s314,通过软编码线程终止软编码器的运行,并终止软编码线程;

s315,通过硬编码线程控制硬编码器基于该目标数据格式,对数据集合中未经编码的数据进行编码,直至数据集合中所有数据均被编码。

需要说明的是,通过硬编码线程检测经过编码的目标数据正常时,可以同时执行该步骤s314和步骤s315,当然,也可以是在执行完步骤s314之后,再执行步骤s315。

可以理解的是,如果硬编码器对转换为目标数据格式的目标数据进行编码后,编码结果正确,则说明编码成功,同时也说明,在将数据集合中的待编码的目标数据转换目标数据格式的前提下,硬编码器可以对该数据集合中待编码的数据进行正确编码,因此,在该种情况下,可以通过硬编码器进行数据编码,而无需再利用软编码器进行编码,从而可以减少软编码器编码所占用的cpu资源,降低由于cpu负载过高而使得计算机设备所产生的发热量。

同时,由于在硬编码器对数据成功编码之前,软编码器会与硬编码器并行的进行数据编码,这样,在测试出硬编码器在某种目标数据格式下,可以对数据进行成功编码时,则无需利用硬编码器重新对软编码器已经编码的数据再次进行编码,而只需对数据集合中尚未被编码的数据进行编码,避免了由于测试硬编码是否可行而导致无法进行数据编码,造成时间浪费的情况,从而提高了编码效率。

s316,通过硬编码线程终止硬编码器的运行,终止硬编码线程;

s317,通过软编码线程控制软编码器对数据集合中未经编码的数据进行编码,直至数据集合中所有数据均被编码。

其中,步骤s316和步骤s317的顺序并不限于图3所示,在实际应用中,也可以是同时执行该步骤s316和步骤s317。

可以理解的是,如果硬编码器所支持的所有数据格式均被测试,而该硬编码器仍不能成功对数据进行编码,则说明该计算机设备无法采用该硬编码方式对数据集合中待编码的数据进行编码。

当然,为了保证数据的正常编码,在测试了硬编码器所支持的所有数据格式的情况下,硬编码器均无法正确编码数据的情况下,则可以终止硬编码器,而仍继续采用软编码器对数据集合中未经编码的数据进行编码,直至完成数据集合中所有数据的编码。而由于硬编码测试过程中,软编码器也一直在进行编码,因此,即使硬编码测试不成功,软编码器已经编码出的数据仍可以使用,不会额外增加编码时长,有利于提高编码效率。

为了便于理解本申请实施例的数据编码方法所能产生的有益效果,下面结合一种应用场景,对申请实施例的数据编码过程进行介绍,为了便于描述,结合图2所示的应用场景,并假设需要编码的数据为视频数据为例进行介绍。如,参见图4,其示出了本申请公开的一种数据编码方法的流程交互示意图,在本实施例中假设服务器中的硬编码器仅仅支持两种数据格式,即第一数据格式和第二数据格式,同时假设测试出硬编码器可以基于该第二数据格式对视频文件中的数据进行编码。本实施例的方法可以包括:

s401,播放器客户端向服务器发送视频播放请求;

s402,服务器响应该视频播放请求,确定播放器客户端所请求的视频文件;

s403,服务器生成软编码线程以及硬编码线程;

s404,服务器通过硬编码器线程确定出gpu所支持的数据格式为第一数据格式和第二数据格式;

s405,服务器从视频文件中确定当前需要编码的目标视频数据;

s406,服务器在通过软编码线程控制软编码器对目标视频数据进行编码的同时,通过硬编码线程将目标视频数据的原始数据格式转换为第一数据格式,并控制gpu对转换为第一数据格式的目标视频数据进行编码;

在本申请实施例中,以服务器中的gpu为硬编码器为例进行介绍,当然,如果服务器中的硬编码器为其他硬件,也同样适用于本申请实施例。

s407,服务器将软编码器对目标视频数据的编码结果传输给播放器客户端;

s408,服务器检测到该gpu编码出的数据不正确,从视频文件中尚未编码的视频数据中,确定当前需要编码的目标视频数据;

其中,步骤s407可以与步骤s408中检测gpu编码出的数据是否正常以及确定目标视频数据的过程同时执行,以提高数据编码效率,减少编码耗时。

s409,服务器在通过软编码线程控制软编码器对目标视频数据进行编码的同时,通过硬编码线程将目标视频数据的原始数据格式转换为第二数据格式,并控制gpu对转换为第二数据格式的目标视频数据进行编码;

s410,服务器将软编码器对目标数据的编码结果传输给播放器客户端。

由步骤s407和步骤s410可以看出,在服务器未确定出利用gpu(即,硬编码器)可以视频数据进行正确编码的前提下,服务器仍可以向播放器客户端传输已经编码出的视频数据,与测试出gpu可以成功编码视频数据之后,再利用gpu对视频数据进行编码相比,可以提高编码效率,以及数据传输效率。

s411,服务器检测到gpu基于该第二数据格式编码出的数据正确,则终止软编码器以及软编码线程;

s412通过硬编码线程控制gpu基于该第二数据格式对视频文件中尚未被编码的视频数据进行编码。

在服务器确定出gpu可以基于第二数据格式对视频文件进行成功编码,则可以直接切换成利用gpu对视频文件中尚未被编码的数据进行硬编码,以避免利用软编码所导致的cpu占用率过大的问题。

s413,服务器将gpu对视频文件中的数据进行编码的编码结果传输给播放器客户端。

重复步骤s412和s413,直至视频文件中所有视频数据均被编码,并传输给播放器客户端为止。

下面对本申请实施例的数据解码方法进行详细介绍。

参见图5,其示出了本申请一种数据解码方法一个实施例的流程示意图,本申请实施例的方法可以包括:

s501,获取待解码的数据集合;

其中,该数据集合中的所有数据均为待进行解码的数据,该待解码的数据集合中可以包括一帧或多帧数据。如,该待解码的数据集合可以为一个待解码的音频文件、视频文件或者是图像文件等等。

可以理解的是,该数据集合可以是预先获取到的,也可以实时接收到的。如,在实际应用中,计算机设备可以以数据流的形式不断接收需要解码的数据,如果计算机设备实时对接收到的已编码的数据进行解码,那么当前接收到的数据集合有可能就是后续需要解码的目标数据;当然,如果接收数据的速度大于解码速率,则该数据集合中数据量会大于作为目标数据的数据量。

s502,生成用于控制软解码的软解码线程以及用于控制硬解码的硬解码线程;

作为一种优选实施方式,本申请实施例中计算机设备分别生成了两个线程,以通过这两个线程来分别控制软解码以及硬解码,并通过这两个线程的并行运行,来实现同时对待解码的数据进行软解码和硬解码。

可以理解的是,该步骤s502为可选步骤,如果不通过线程,而由计算机设备中处理器直接对软解码以及硬解码的过程进行控制也同样适用于本申请实施例。

s503,通过软解码线程初始化软解码器,并启动该软解码器;

其中,该软解码器可以理解为计算机设备中运行的用于实现软解码的程序。

软解码器的初始化可以与前面软编码器的初始化过程相似。

其中,对软解码器进行初始化以及启动软解码器为可选步骤,其目的仅仅是为后续利用软解码器进行解码作为准备。

s504,通过硬解码线程获取硬解码器所支持的数据格式集合;

其中,该数据格式集合中包括至少一种数据格式。关于数据格式以及获取数据格式集合的过程可以参见前面步骤s504的相关介绍。

s505,通过硬解码线程检测硬解码器所支持的数据格式集合中是否存在尚未被测试的数据格式,如果是,则执行步骤s506;如果否,执行步骤s516;

在本申请实施例中,依次将数据格式集合中的每种数据格式作为需要测试的目标数据格式,并测试该硬解码器在支持该目标数据格式的前提下,是否可以正确进行数据解码,直至数据格式集合中所有的数据格式均已经被测试为止。

s506,从待解码的数据集合中,确定当前需要解码的目标数据;

其中,数据集合中可以包含有大量的数据,而在进行解码时,需要按照数据集合中数据顺序依次对数据进行解码,在本申请实施例中将当前需要进行解码的数据或者数据段称为目标数据。

需要说明的是,该步骤s506与步骤s505的顺序并不限于图5所示,在实际应用中,该步骤s506也可以在该步骤s505之前,当计算机设备确定出上一次确定出的目标数据已经被解码之后,则可以执行该步骤s506,以确定出当前需要进行解码的目标数据。

s507,分别指示软解码线程和硬解码线程对该目标数据进行解码。

其中,该步骤s507为可选步骤,在实际应用中,计算机设备可以直接执行步骤s508和s509,而无需单独进行指示;另外,当不存在软解码线程和硬解码线程的情况下,也无需执行该步骤s507。

s508,通过软解码线程控制软解码器对该目标数据进行解码。

可选的,软解码线程可以检测该目标数据的原始数据格式是否为软解码器所支持的数据格式,如果不是,则将该目标数据转换为该软解码器所支持的数据格式后,对格式转换后的目标数据进行解码。

可选的,在软解码线程确定该软解码器完成对该目标数据的解码之后,软解码线程可以向计算机设备上报解码完成信息,以便计算机设备判断当前是否需要继续从该数据集合中尚未解码的数据中确定待解码的目标数据。

s509,通过硬解码线程从数据格式集合中尚未被测试的数据格式中,选取出当前需要测试的目标数据格式;

在本申请实施例中,将本次选取出的需要测试的数据格式称为目标数据格式。

s510,通过硬解码线程检测从该目标数据的原始数据格式转换到该目标数据格式的格式转换关系是否属于预设的格式转换关系,如果是,则执行步骤s511;如果否,则返回步骤s505;

在本申请实施例中,将对该目标数据进行格式转换之前,该目标数据所具有的数据格式称为原始数据格式,以便于后续所需要转换到的目标数据格式进行区分。

其中,该步骤s510为可选步骤,其目的是为了避免直接执行后续的步骤s511的数据格式转换而导致格式转换失败,从而耗费数据处理资源。

s511,通过硬解码线程将目标数据的原始数据格式转换为目标数据格式;

s512,通过硬解码线程控制硬解码器将转换为目标数据格式的目标数据进行解码;

需要说明的是,在本申请实施例中,步骤s508与步骤s509至s512的过程是同步执行的,也就是说,在控制软解码器对目标数据进行软解码的过程中,会同时对目标数据进行硬解码所需的数据格式转换,并控制硬解码器对该目标数据进行硬解码。

s513,通过硬解码线程检测经过解码的目标数据是否正常,如果是,则执行步骤s514;如果否,则返回步骤s505;

其中,检测经过解码的目标数据是否正常实际上就是检测解码出的数据是否正确,可以与检测经过编码过的数据是否正常的过程相似,在此不再赘述。

s514,通过软解码线程终止软解码器的运行,并终止软解码线程;

s515,通过硬解码线程控制硬解码器基于该目标数据格式,对数据集合中未经解码的数据进行解码,直至数据集合中所有数据均被解码。

需要说明的是,通过硬编码线程检测经过编码的目标数据正常时,可以同时执行该步骤s514和步骤s515,当然,也可以是在执行完步骤s514之后,再执行步骤s515。

可以理解的是,如果硬解码器对转换为目标数据格式的目标数据进行解码后,解码结果正确,则说明解码成功,同时也说明,在将数据集合中的待解码的目标数据转换目标数据格式的前提下,硬解码器可以对该数据集合中待解码的数据进行正确解码,因此,在该种情况下,可以通过硬解码器进行数据解码,而无需再利用软解码器进行解码,从而可以减少软解码器解码所占用的cpu资源,降低由于cpu负载过高而使得计算机设备所产生的发热量。

同时,由于在硬解码器对数据成功解码之前,软解码器会与硬解码器并行的进行数据解码,这样,在测试出硬解码器在某种目标数据格式下,可以对数据进行成功解码时,则无需利用硬解码器重新对软解码器已经解码的数据再次进行解码,而只需对数据集合中尚未被解码的数据进行解码,避免了由于测试硬解码是否可行而导致无法进行数据解码,造成时间浪费的情况,从而提高了解码效率。

s516,通过硬解码线程终止硬解码器的运行,终止硬解码线程;

s517,通过软解码线程控制软解码器对数据集合中未经解码的数据进行解码,直至数据集合中所有数据均被解码。

其中,步骤s516和步骤s517的顺序并不限于图5所示,在实际应用中,也可以是同时执行该步骤s516和步骤s517。

可以理解的是,如果硬解码器所支持的所有数据格式均被测试,而该硬解码器仍不能成功对数据进行解码,则说明该计算机设备无法采用该硬解码方式对数据集合中待解码的数据进行解码。

当然,为了保证数据的正常解码,如果计算机设备无法采用硬解码方式进行解码的情况下,则可以终止硬解码器,而仍继续采用软解码器对数据集合中未经解码的数据进行解码,直至完成数据集合中所有数据的解码。而由于硬解码测试过程中,软解码器也一直在进行解码,因此,即使硬解码测试不成功,软解码器已经解码出的数据仍可以使用,不会额外增加解码时长,有利于提高解码效率。

下面对本申请的一种数据编码装置进行介绍。

参见图6,其示出了本申请一种数据编码装置一个实施例的组成结构示意图,该数据编码装置可以应用于前面所提到的计算机设备,本实施例的数据编码装置可以包括:

数据确定单元601,用于确定待编码的数据集合;

格式获取单元602,用于获取硬编码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

格式选取单元603,用于如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

编码控制单元604,用于在控制软编码器对所述数据集合中当前待编码的目标数据进行编码的同时,控制所述硬编码器基于所述目标数据格式对所述目标数据进行编码;

编码选取单元605,用于如果所述硬编码器编码出的数据正常,则终止所述软编码器的编码,并控制所述硬编码器基于所述目标数据格式,对所述数据集合中尚未被编码的数据进行编码。

可选的,所述数据编码装置还可以包括:

格式遍历单元606,用于如果所述硬编码器编码出的数据不正常,则触发返回执行所述格式选取单元的操作。

可选的,该数据编码装置还可以包括:

软编码切换单元,用于如果所述硬编码器编码出的数据不正常,且所述数据格式集合中不存在尚未被测试的数据格式,则终止所述硬编码器的运行,并控制所述软编码器对所述数据集合中尚未被编码的数据进行编码。

可选的,所述编码控制单元,包括:

第一编码控制单元,用于在控制软编码器对所述数据集合中当前待编码的目标数据进行编码的同时,将所述目标数据的原始数据格式转换为所述硬编码器所支持的所述目标数据格式;

第二编码控制单元,用于控制所述硬编码器对转换为所述目标数据格式的目标数据进行编码。

可选的,所述数据编码装置还可以包括:

格式检测单元,用于在所述第一编码控制单元将所述目标数据转换为所述硬编码器所支持的所述目标数据格式之前,检测所述原始数据格式到所述目标数据格式的格式转换关系是否属于预设的格式转换关系;

则所述第一编码控制单元,用于在控制软编码器对所述数据集合中当前待编码的目标数据进行编码的同时,如果格式检测单元检测到所述原始数据格式到所述目标数据格式的格式转换关系属于预设的格式转换关系,则将所述目标数据转换为所述硬编码器所支持的所述目标数据格式。

可选的,所述数据编码装置还包括:

线程生成单元,用于在格式获取单元获取硬编码器所支持的数据格式集合之前,生成用于控制软编码的软编码线程以及用于控制硬编码的硬编码线程;

所述编码控制单元具体为:在通过所述软编码线程控制软编码器对目标数据进行编码的同时,通过所述硬编码线程控制所述硬编码器对所述目标数据进行编码,所述目标数据为所述目标数据中当前待编码的数据。

下面对本申请实施例的一种数据解码装置进行介绍。

参见图7,其示出了本申请一种数据解码装置一个实施例的组成结构示意图,本实施例的装置可以包括:

数据获取单元701,用于确定待解码的数据集合;

格式获取单元702,用于获取硬解码器所支持的数据格式集合,所述数据格式集合中包括至少一种数据格式;

格式选取单元703,用于如果所述数据格式集合中存在尚未被测试的数据格式,则从所述数据格式集合中尚未被测试的数据格式中,选取出需要测试的目标数据格式;

解码控制单元704,用于在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,控制所述硬解码器基于所述目标数据格式对所述目标数据进行解码;

解码选取单元705,用于如果所述硬解码器解码出的数据正常,则终止所述软解码器的解码,并控制所述硬解码器基于所述目标数据格式,对所述数据集合中尚未被解码的数据进行解码。

可选的,所述数据解码单元还包括:

格式遍历单元706,用于如果所述硬解码器解码出的数据不正常,则触发返回执行所述格式选取单元的操作。

可选的,所述数据解码装置还包括:

软解码切换单元,用于如果所述硬解码器解码出的数据不正常,且所述数据格式集合中不存在尚未被测试的数据格式,则终止所述硬解码器的运行,并控制所述软解码器对所述数据集合中尚未被解码的数据进行解码。

可选的,所述解码控制单元,包括:

第一解码控制单元,用于在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,将所述目标数据的原始数据格式转换为所述硬解码器所支持的所述目标数据格式;

第二解码控制单元,用于控制所述硬解码器对转换为所述目标数据格式的目标数据进行解码。

可选的,所述数据解码装置还包括:

格式检测单元,用于在所述第一解码控制单元将所述目标数据转换为所述硬解码器所支持的所述目标数据格式之前,检测所述原始数据格式到所述目标数据格式的格式转换关系是否属于预设的格式转换关系;

所述第一解码控制单元,具体为,用于在控制软解码器对所述数据集合中当前待解码的目标数据进行解码的同时,如果所述原始数据格式到所述目标数据格式的格式转换关系属于预设的格式转换关系,则将所述目标数据转换为所述硬解码器所支持的所述目标数据格式。

可选的,所述数据解码单元还包括:

线程生成单元,用于在所述格式获取单元获取硬解码器所支持的数据格式集合之前,生成用于控制软解码的软解码线程以及用于控制硬解码的硬解码线程;

所述解码控制单元具体为,用于在通过所述软解码线程控制软解码器对目标数据进行解码的同时,通过所述硬解码线程控制所述硬解码器对所述目标数据进行解码,所述目标数据为所述目标数据中当前待解码的数据。

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

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

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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