编码、解码方法、编码端和解码端与流程

文档序号:20010112发布日期:2020-02-22 04:00阅读:220来源:国知局
编码、解码方法、编码端和解码端与流程

本申请涉及多媒体技术领域,特别涉及一种编码、解码方法、编码端和解码端。



背景技术:

随着多媒体技术的发展,为了便于视频的传输,编码端可以按照固定时长将视频划分为多个视频序列,每个视频序列包括多个视频帧。对于每个视频序列,编码端对该视频序列包括的多个视频帧分别进行编码,得到与该视频序列包括的多个视频帧一一对应的多个编码数据,然后将这多个编码数据发送至解码端。

相关技术中,每个视频序列通常包括一个关键帧和多个非关键帧,关键帧是指对全部像素信息进行编码并可以独立解码出完整画面的视频帧,非关键帧是指对关键帧的像素信息和当前非关键帧的像素信息之间的残差信息进行编码的视频帧。因此,对关键帧编码后的第一编码数据的码量较大,对非关键帧编码后得到第二编码数据的码量较小,所以,运营商可以根据编码数据的码量自适应分配带宽以发送不同类型的视频帧的编码数据。

但是在相关技术中,如果当前时间编码端需要发送关键帧,由于当前所需的带宽相对于上一次已发送的非关键帧所需要的带宽迅速增加,此时运营商需要增加带宽,而运营商在重新分配带宽时可能会出现延期,无法及时提供发送该关键帧所需要的带宽,从而造成视频的卡顿现象。



技术实现要素:

本申请实施例提供了一种编码、解码方法、编码端和解码端,可以在保证传输编码数据的过程中带宽的稳定性的情况下避免带宽的浪费。所述技术方案如下:

第一方面,提供了一种编码方法,应用于编码端,所述方法包括:

根据对视频序列中的关键帧进行编码得到的第一编码数据,向解码端发送所述第一编码数据;

根据对所述视频序列中的非关键帧进行编码得到的第二编码数据,向所述解码端发送所述第二编码数据和冗余数据包,其中,发送所述第二编码数据和冗余数据包所使用的带宽和发送所述第一编码数据所使用的带宽之间的差值在参考差值之内,所述冗余数据包是根据前向纠错fec算法对确定所述第二编码数据时所使用的关键帧进行冗余处理后得到。

第二方面,提供了一种解码方法,应用于编码端,所述方法包括:

接收编码端发送的第一编码数据,对所述第一编码数据进行解码,得到视频序列中的关键帧,所述第一编码数据是所述编码端对视频序列中的关键帧进行编码得到;

接收所述编码端发送的第二编码数据和冗余数据包,对所述第二编码数据进行解码,得到所述视频序列中的非关键帧;

其中,所述第二编码数据是所述编码端对所述视频序列中的非关键帧进行编码得到,所述编码端发送所述第二编码数据和冗余数据包所使用的带宽和发送所述第一编码数据所使用的带宽之间的差值在参考差值之内,所述冗余数据包是所述编码端根据前向纠错fec算法对确定所述第二编码数据时所使用的关键帧进行冗余处理后得到。

第三方面,提供了一种编码端,该编码端包括:

发送模块,用于根据对视频序列中的关键帧进行编码得到的第一编码数据,向解码端发送所述第一编码数据;

所述发送模块,还用于根据对所述视频序列中的非关键帧进行编码得到的第二编码数据,向所述解码端发送所述第二编码数据和冗余数据包,其中,发送所述第二编码数据和冗余数据包所使用的带宽和发送所述第一编码数据所使用的带宽之间的差值在参考差值之内,所述冗余数据包是根据前向纠错fec算法对确定所述第二编码数据时所使用的关键帧进行冗余处理后得到。

第四方面,提供了一种解码端,该解码端包括:

接收模块,用于接收编码端发送的第一编码数据,对所述第一编码数据进行解码,得到视频序列中的关键帧,所述第一编码数据是所述编码端对视频序列中的关键帧进行编码得到;

所述接收模块,还用于接收所述编码端发送的第二编码数据和冗余数据包,对所述第二编码数据进行解码,得到所述视频序列中的非关键帧;

其中,所述第二编码数据是所述编码端对所述视频序列中的非关键帧进行编码得到,所述编码端发送所述第二编码数据和冗余数据包所使用的带宽和发送所述第一编码数据所使用的带宽之间的差值在参考差值之内,所述冗余数据包是所述编码端根据前向纠错fec算法对确定所述第二编码数据时所使用的关键帧进行冗余处理后得到。

第五方面方面,提供了一种编码端,所述编码端包括处理器、通信接口、存储器和通信总线;

其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;

所述存储器用于存放计算机程序;

所述处理器用于执行所述存储器上所存放的程序,以实现前述提供的编码方法。

第六方面,提供了一种解码端,所述解码端包括处理器、通信接口、存储器和通信总线;

其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;

所述存储器用于存放计算机程序;

所述处理器用于执行所述存储器上所存放的程序,以实现前述提供的解码方法。

第七方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现前述提供的编码、解码方法的步骤。

本申请实施例提供的技术方案带来的有益效果至少包括:

在本申请实施例中,编码端通过对视频序列中的关键帧进行编码得到第一编码数据。编码端再根据对视频序列中的非关键帧进行编码得到第二编码数据。并根据fec算法对确定第二编码数据时所使用的关键帧进行冗余处理得到冗余数据包。这样,编码端向解码端发送添加有冗余数据包的第二编码数据所使用的带宽和发送该第一编码数据所使用的带宽之间的差值在参考差值之内,这样既保证了对于不同类型的视频帧,传输编码数据的过程中的使用的带宽可以保持稳定,同时在解码端出现针对确定第二编码数据时所使用的关键帧的编码数据丢失的现象时,还可以根据冗余数据包对该关键帧进行还原,以提高解码端解码第二编码数据的成功率。

附图说明

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

图1是本申请实施例提供的一种数据传输系统架构图;

图2是本申请实施例提供的一种发送编码数据的方法流程图;

图3是本申请实施例提供的一种编码方法流程图;

图4是本申请实施例提供的一种不同视频帧所需要的带宽的分布示意图;

图5是本申请实施例提供的另一种不同视频帧所需要的带宽的分布示意图;

图6是本申请实施例提供的一种解码方法流程图;

图7是本申请实施例提供的一种编码端的结构示意图;

图8是本申请实施例提供的一种解码端的结构示意图;

图9是本申请提供的一种终端的结构框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的系统架构予以介绍。

图1是本申请实施例提供的一种数据传输系统架构图。如图1所示,该数据传输系统100包括一个或多个编码端101以及一个或多个解码端102。

对于一个或多个编码端101中任一编码端101,该编码端101可以与一个或多个解码端102的任一解码端102之间通过无线或有线方式连接以进行通信。该编码端101可以将视频帧编码得到编码数据,将编码数据发送至该解码端102。该解码端102接收编码数据,并将编码数据解码以得到视频帧。

其中,编码端101和解码端102均可以是手机或者电脑等设备。图1中仅仅以1个编码端101和2个解码端102举例进行说明,并不构成对本申请实施例提供的数据传输系统的限制。

图2是本申请实施例提供的一种编码方法流程图,该编码方法可以包括如下几个步骤:

步骤201:编码端根据对视频序列中的关键帧进行编码得到第一编码数据,向解码端发送该第一编码数据。

每个视频序列通常包括一个关键帧和多个非关键帧,关键帧是指对全部像素信息进行编码并可以独立解码出完整画面的视频帧,非关键帧是指对关键帧的像素信息和当前非关键帧的像素信息之间的残差信息进行编码的视频帧。

因此,在步骤201中,对关键帧进行编码得到的第一编码数据,也即是,对该关键帧的全部像素信息进行编码。

步骤202:编码端对视频序列中的非关键帧进行编码得到第二编码数据,向解码端发送第二编码数据和冗余数据包。

由步骤201可知,对关键帧编码后的第一编码数据的码量较大,对非关键帧编码后得到第二编码数据的码量较小。如此,发送关键帧的第一编码数据所需要的带宽远大于发送非关键帧的第二编码数据所需要的带宽,这样就会到导致编码端发送非关键帧时,由于相对于之前已发送的关键帧所需要的的带宽迅速减少而造成带宽不稳定的现象。所以,在本申请实施例中,在发送非关键帧的编码数据时,还同时发送冗余数据包,以通过步骤202使得发送整个视频序列时所使用的带宽保持在一个稳定带宽附近。

上述步骤202中的冗余数据包用于指示对关键帧进行冗余处理后得到的数据包,该关键帧为确定第二编码数据时所使用的关键帧。其中,确定第二编码数据时所使用的关键帧可以是与当前非关键帧位于同一视频序列的关键帧,也可以是当前时间之前的编码端已发送的任一视频序列的关键帧。

在一种可能的实现方式中,编码端可以通过下述步骤2021-2023确定针对该非关键帧的冗余数据包。

步骤2021:编码端根据预设带宽和发送第二编码数据需要使用的带宽,确定剩余带宽。

为了保证编码端发送第一编码数据和第二编码数据所使用的带宽均保持在一个稳定带宽附近,编码端可以在当前时间之前设定一个预设带宽,以通过步骤2021至2023确定针对非关键帧的冗余数据包。

在一种可能的实现方式中,编码端可以将预设带宽减去发送第二编码数据所需要使用的带宽,得到的数值即为剩余带宽。比如,当前发送第二编码数据所需要使用的带宽为80kbps,预设带宽为120kbps,编码端便可确定出剩余带宽为40kbps。

编码端在确定出剩余带宽之后便可通过下述步骤2022至步骤2023确定该非关键帧的编码数据对应的冗余数据包,以实现发送第二编码数据和冗余数据包时实际使用的带宽维持在预设带宽附近。

此外,该预设带宽可以通过编码端发送第一编码数据时的情况来确定,也可以由编码端预先设置。在此不做具体限定。通常情况下,预设带宽大于或等于发送第一编码数据所使用的带宽。

其中,编码端根据发送第一编码数据时的情况来确定出预设带宽的实现方式可以为:编码端对视频序列中的关键帧以参考编码标准进行编码,得到第一编码数据。将第一编码数据进行rtp(real-timetransportprotocol,实时传送协议)打包,得到多个rtp包,将多个rtp包均匀划分成多个rtp包组,将该多个rtp包组以每隔固定时间间隔发送一个rtp包组的方式发送至解码端。解码端统计出rtp包的接收情况,并将rtp包的接收情况上报给编码端。编码端根据rtp包的接收情况确定出预设带宽。

需要说明的是,rtp包的接收情况包括乱序现象、延迟现象和丢包现象中一个或多个。乱序现象是指解码端接收一个rtp包组所包括的多个rtp包的次序和编码端发送该多个rtp包的次序不一致。延迟现象是指编码端发送各个rtp包组的固定时间间隔和解码端接收到各个rtp包组的时间间隔不一致。丢包现象是指编码端发送rtp包的数量和解码端接收到rtp包的数量不一致。

例如,编码端对当前需要发送的视频帧以h.264视频编码标准进行编码可以得到该测试视频帧对应的编码数据,该编码数据可以称为h.264码流。将h.264码流进行rtp打包,得到100个rtp包,可以将该100个rtp包分别标记为rtp包1、rtp包2、rtp包3、…….rtp包100。将该100个rtp包均匀分组,得到20个rtp包组,该20个rtp包组分别为rtp包组1、rtp包组2、rtp包组3、…….rtp包组20。该20个rtp包组的每个rtp包组包括5个rtp包。将该20个rtp包组以固定时间间隔分别发送至解码端。解码端根据接收到该20个包组的间隔时间、每个rtp包组包括的rtp包的次序和接收到的rtp包的数量确定出rtp包接收请况,并将该rtp包接收情况反馈给编码端,编码端根据rtp包接收情况确定出预设带宽。

假设rtp包组的包括的5个rtp包在编码端的发送的先后次序为rtp包1,rtp包2,rtp包3,rtp包4、rtp包5。解码端接收的rtp包的先后次序为rtp包2,rtp包1,rtp包3,rtp包5、rtp包4。此时,解码端接收到的rtp包存在乱序现象,解码端根据该rtp包的乱序现象可以确定出预设带宽为为一个具体的带宽值,假设这个带宽值可以是120kbps或者任意一个带宽值。

其中,编码端可以通过带宽预测算法根据rtp包的接收情况确定出预设带宽。该带宽预测算法是一种根据rtp包接收情况确定预设带宽的算法。该带宽预测算法可以是编码端预先从数据库中获取的。

在一种可能的实现方式中,可以将预设带宽配置为满足如下条件的带宽:发送第一编码数据所需要的带宽需要保持在预设带宽的60%以下,这个比值可根据带宽预测周期及一个编码序列的时长、帧率来进行相应的调整,在此不做详细说明。

步骤2022:根据剩余带宽确定fec算法的级别。

fec算法是指编码端根据确定第二编码数据时所使用的关键帧确定冗余数据包以实现前向纠错的一种算法。后续当解码端接收到第二编码数据时,在检测解码第二编码数据时所需的关键帧有丢失时从冗余数据包中还原解码第二编码数据时所需的关键帧,从而提高解码端的对接收到的第二编码数据进行解码的成功率,进而提高解码端解码后的视频帧的视频质量。

因此,在本申请实施例中,为了避免传输第二编码数据时剩余带宽的浪费,可以通过基于fec算法得到的冗余数据包来挤占剩余带宽。由于不同级别的fec算法对编码数据进行冗余处理时,会对应生成不同占比的冗余数据包。因此,编码端需要根据剩余带宽的大小动态调整fec算法的级别,使得每次向解码端发送冗余数据包和第二编码数据所一共使用的带宽均保持在预设带宽附近,也即避免了发送第二编码数据时所需要的带宽迅速降低的问题,从而保证了传输编码数据的过程中带宽的稳定性。同时还通过冗余数据包提高解码端对接收到的编码数据进行解码的成功率。

在一种可能的实现方式中,步骤2022的实现过程可以是:从带宽范围和级别的对应关系中,选择与剩余带宽对应的级别,得到fec算法的级别;其中,带宽和级别的对应关系包括多个带宽范围、以及与多个带宽范围一一对应的多个级别。

需要说明的是,上述带宽范围可以是指剩余带宽与预设带宽之间的比值的范围。例如,剩余带宽与预设带宽之间的比值的范围和级别的对应关系为下述表1所示的对应关系。如表1所示,当剩余带宽与预设带宽之间的比值的范围为20%~25%时对应的fec算法级别为一级、当剩余带宽与预设带宽之间的比值的范围为25%~30%时对应的fec算法级别为二级、当剩余带宽与预设带宽之间的比值的范围为30%~35%时对应的fec算法级别为三级、当剩余带宽与预设带宽之间的比值的范围为35%~40%时对应的fec算法级别为四级、当剩余带宽与预设带宽之间的比值的范围为大于40%时对应的fec算法级别为五级。

表1

比如,当前剩余带宽与预设带宽之间的比值为33%时,对应查找出fec算法的级别为三级,也即是当前需要使用三级的fec算法来确定冗余数据包。当通过三级的fec算法对当前的第一编码数据进行处理时,所得到冗余数据包的大小可以尽可能的占用剩余带宽。

步骤2023:根据fec算法的级别对确定第二编码数据时所使用的关键帧进行冗余处理,得到冗余数据包。

其中,fec算法的级别用于指示得到的冗余数据包的占比,该占比用于指示得到冗余数据包的大小和确定第二编码数据时所使用的关键帧的大小之间的比例。

在一种可能的实现方式中,fec算法的级别指示冗余数据包的占比可以是指:当fec算法的级别为一级,则六个连续的rtp包生成一个冗余数据包,则冗余数据包和编码数据的之间的比例为1:6;当fec算法的级别为二级时,则五个连续的rtp包生成一个冗余包,则冗余数据包和编码数据的之间的比例为1:5;当fec算法的级别为三级时,则四个连续的rtp包生成一个冗余数据包,则冗余数据包和编码数据的之间的比例为1:4;当fec算法的级别为四级,则5个连续的rtp包生成一个冗余包,5个间接的rtp包生成一个冗余包,则冗余数据包和编码数据的之间的比例为2:5;当fec算法的级别为五级时,4个连续的rtp包生成一个冗余数据包,4个间接的rtp包生成一个冗余数据包,则冗余数据包和编码数据的之间的比例为1:2。如此,随着fec算法的级别增大,对应生成的多个冗余数据包的数量增加,使得每次向解码端发送编码数据和不同数量的冗余数据包的一共使用的带宽均保持在预设带宽附近,保证了传输编码数据的过程中带宽的稳定性。

因此,在一种可能的实现方式中,步骤2023的实现过程可以是:确定当前时间发送第二编码数据所使用的关键帧,确定对该关键帧进行编码后的编码数据包括多个rtp包,根据fec算法的级别确定出冗余数据包与这多个rtp包之间的占比,进而对这多个rtp包进行冗余处理,得到多个冗余数据包。

由步骤201~步骤202可知,如果当前需要发送的第二编码数据的数据量较大时,确定出一个较小剩余带宽,采用该较小剩余带宽与预设带宽的比值范围对应级别的fec算法进行冗余处理,得到较小的冗余数据包占比,也即得到冗余数据包的数量较小。如果当前需要发送的第二编码数据的数据量较小,确定出一个较大的剩余带宽,采用该较大的剩余带宽与预设带宽的比值范围对应级别的fec算法进行冗余处理,得到较大的冗余数据包占比,也即得到的冗余数据包的数量较多。

例如,确定当前时间发送第二编码数据所使用的关键帧,对该关键帧进行编码得到编码数据,假设该关键帧的编码数据包括100个rtp包,根据步骤202确定出需要使用三级的fec算法来对该100个rtp包进行冗余处理,也即确定出冗余数据包和编码数据包括的rtp包之间的比例为1:4,则可以生成25个冗余数据包。

由于对非关键帧进行编码得到第二编码数据时,是将当前的非关键帧和当前时间之前某个关键帧的残差信息进行编码得到的,因此编码端通过对确定当前编码数据所使用的关键帧进行冗余处理得到的冗余数据包后,向解码端发送添加有冗余数据包的第二编码数据,以使解码端可以根据冗余数据包对该第二编码数据进行解码。

在一些场景下,通过向编码数据中添加冗余数据包也可能存在不能将剩余带宽使用完的情况,因此,在本申请实施例中,还可以在发送冗余数据包的基础上再发送辅助数据包以使得剩余带宽可以使用完。

其中,编码端发送辅助数据包的实现方式可以为:确定发送冗余数据包所需要的带宽;如果剩余带宽大于发送冗余数据包所需要的带宽,则生成辅助数据包;向解码端发送冗余数据包和辅助数据包。

如果剩余带宽不大于发送冗余数据包所需要的带宽,则不需要另加辅助数据包去挤占剩余带宽。

辅助数据包用于携带视频帧的配置信息,配置信息可以包括视频帧的特效。比如视频的特效一般包括当前视频帧需要实施一些额外的特效处理,例如给视频中的人物加上胡须或者帽子。

此外,对于参考时长内发送的所有的非关键帧,根据这些非关键帧的第二编码数据确定出的剩余带宽可能均较多,这种情况下说明这些非关键帧的第二编码数据的数据量普遍较小,因此编码端可以适当校正编码过程中的编码参数,增加编码数据的数据量,以提高发送的视频的质量,比如视频的清晰度,视频的流畅性等。

其中,校正编码过程中的编码参数的实现方式可以为:如果在参考时长内发送的全部非关键帧帧的编码数据使用的带宽和预设带宽之间的比值小于参考比率,则校正编码过程中的编码参数,以使根据校正后的编码参数编码得到的非关键帧的编码数据需要使用的带宽与预设带宽之间的差值小于参考差值。

其中,非关键帧的编码数据使用的带宽与预设带宽之间的差值小于参考差值是指发送该非关键帧的编码数据使用的带宽接近或等于该预设带宽。该参考差值可以是编码端已设置好的,也可以是人为重新设置。

其中,参考比率可以是编码端已设置好的,也可以是人为重新设置,参考时长也可以是编码端已设置好的,也可以是人为重新设置。另外,上述编码参数包括但不限于视频码率、视频分辨率、视频序列的时长、编码压缩等级以及视频帧率中的一个或多个。通过校正编码参数,可以提高视频质量。比如,增加视频码率可以增大编码后的编码数据的数据量,因此视频质量损失越小,与原始视频越接近。又比如,增加视频的分辨率可以使得视频画面在放大倍数较高的情况下依然可维持一定的清晰度,因此,视频质量就越高。又比如,增加视频帧率可以使得单位时间内传输的视频帧的数量变大,从而使得解码端解码后的视频画面更加流畅。

假设编码非关键帧时使用的关键帧为同一视频序列中的关键帧,此时步骤201~步骤202的实现过程还可以参见图3:编码端预先将该视频序列中的关键帧进行编码,得到关键帧的编码数据,将该编码数据进行rtp打包得到该编码数据对应的多个rtp包,将该rtp包分组后以固定时间间隔发送至解码端,解码端接收到rtp包后,将当前视频帧包括的rtp包的接收情况反馈至编码端。编码端根据rtp包的接收情况确定出预设带宽。同时,编码端根据该预设带宽以及当前非关键帧的第二编码数据使用的带宽确定出剩余带宽。编码端根据剩余带宽与预设带宽的比值范围的多少,确定出冗余数据包的占比,进而确定出冗余数据包的数量,补发相应数量的冗余数据包或者冗余数据包加辅助数据包,尽量把剩余的带宽使用完。使得发送非关键帧的第二编码数据使用的带宽在预设带宽附近波动。同时,解码端将冗余数据包进行缓存,当有rtp包丢失时,可以通过冗余数据包找回,这样既保证传输编码数据的过程中的带宽的稳定性,也避免剩余带宽的浪费。

图4是本申请实施例提供的一种不同视频帧所需要的带宽的分布示意图。如图4所示,不同的视频帧的编码数据的数据量相差较大时,则发送不同的视频帧的编码数据所使用的带宽也相差较大,这样很容易导致解码端接收的编码数据有误。比如,当上一次视频帧的编码数据使用的带宽较小而发送本次视频帧的编码数据使用的带宽较高时,很容易造成数据包的丢失现象。

这是因为运营商对于接入端带宽分配的原则遵循带宽需求大,会尽量多分配,带宽需求小,会尽量少分配的原则,以便于提高带宽的使用率。如果一个接入端,发送的数据的数据量随时间产生较大幅度波动,相应的需要的带宽也产生较大幅度波动,具体来说:当接入端发送的数据的数据量由高峰立马降到一个低谷,需要的带宽相应会减少,运营商分配给此接入端的带宽也相应减少,当接入端发送的数据的数据量由低谷快速升到高峰,需要的带宽也相应会增加,那么运营商也会相应的分配更多带宽,就会造成以下一些问题:

(1)运营商为接入端增加带宽分配时可能会出现延期,无法及时满足此接入端的当前需求,比如当编码端发送的数据为视频帧的编码数据时,就会造成编码数据包的丢失现象,导致解码端对编码数据解码后的视频质量下降;

(2)当前时间没有多余的带宽为该接入端增加带宽分配,这样也会造成如上数据包的丢失现象。

图5是本申请实施例提供的一种发送不同视频帧时实际使用的带宽的分布示意图。如图5所示,当按照预设带宽以及发送第二编码数据所需要的带宽确定出剩余带宽时,再利用冗余数据包去挤占剩余带宽时,这样既保证传输编码数据的过程中的带宽的稳定性,也避免剩余带宽的浪费。也即是,通过本申请实施例提供的发送编码数据的方法,可以实现保证发送关键帧的编码数据所使用的带宽与发送非关键帧的编码数据所使用的带宽均保持在预设带宽附近。

在本申请实施例中,编码端通过对视频序列中的关键帧进行编码得到第一编码数据。编码端再根据对视频序列中的非关键帧进行编码得到第二编码数据。并根据fec算法对确定第二编码数据时所使用的关键帧进行冗余处理得到冗余数据包。这样,编码端向解码端发送添加有冗余数据包的第二编码数据所使用的带宽和发送该第一编码数据所使用的带宽之间的差值在参考差值之内,这样既保证了对于不同类型的视频帧,传输编码数据的过程中的使用的带宽可以保持稳定,同时在解码端出现针对确定第二编码数据时所使用的关键帧的编码数据丢失的现象时,还可以根据冗余数据包对该关键帧进行还原,以提高解码端解码第二编码数据的成功率。

图6是本申请实施例提供的一种解码方法流程图,该解码方法可以包括如下几个步骤:

步骤601:解码端接收编码端发送的第一编码数据,对第一编码数据进行解码,得到视频序列中的关键帧,第一编码数据是编码端对视频序列中的关键帧进行编码得到。

由于第一编码数据是对关键帧的全部像素信息进行编码的到的,因此解码端针对第一编码数据可以独立解码并得到完整的视频画面。

步骤602:解码端接收编码端发送的第二编码数据和冗余数据包,对第二编码数据进行解码,得到视频序列中的非关键帧。

由于第二编码数据是对非关键帧和关键帧之间的残差像素信息进行编码得到的,因此解码端需要参考编码端编码第二编码数据时使用的关键帧,并参考该关键帧对该第二编码数据进行解码才能得到当前非关键帧的完整视频画面。

此外,冗余数据包是编码端根据前向纠错fec算法对确定第二编码数据时所使用的关键帧进行冗余处理后得到,因此,如果解码第二编码数据时所需的关键帧有丢失,则根据接收到的冗余数据包还原该所需的关键帧,根据还原后的关键帧解码第二编码数据,得到视频序列中的非关键帧。

也即是,当解码第二编码数据时所需的关键帧有丢失时,可以利用冗余数据包对该关键帧进行还原,这样不仅保证解码端在对关键帧进行解码时,可以解码出该关键帧的完整的视频画面,也可以保证在对第二编码数据进行解码时可以参考到完整的关键帧,从而也可以解码出该非关键帧的完整的视频画面。

比如,编码端根据冗余数据包还原编码数据可以是通过将任意连续的几个rtp包打一个冗余数据包,该冗余数据包携带了这几个rtp包的全部有效数据。假设当前一共有20个rtp包,分别为rtp包1、rtp包2、rtp包、rtp包4……rtp包20。将rtp包1~rtp包5打一个冗余数据包1,将rtp包6~rtp包10打一个冗余数据包,将rtp包11~rtp包15打一个冗余数据包、将rtp包15~rtp包20打一个冗余数据包。假设解码端接收的rtp包4缺失,可以根据冗余数据包1和rtp包2、rtp包3、rtp包5进行还原rtp包4。

另外,在一种可能的场景下,如果解码端接收到编码端发送的辅助数据包时,解码端将该辅助数据包进行解码得到该非关键帧的特效,并将解码后的非关键帧上添加该特效,以使得当前非关键帧表现为添加有人物特效的视频画面。

在本申请实施例中,解码端接收编码端发送的第一编码数据,对第一编码数据进行解码,得到视频序列中的关键帧。解码端接收编码端发送的第二编码数据和冗余数据包,对第二编码数据进行解码,得到视频序列中的非关键帧。在解码端出现针对确定第二编码数据时所使用的关键帧的编码数据丢失的现象时,还可以根据冗余数据包对该关键帧进行还原,以提高解码端解码第二编码数据的成功率。

图7是本申请实施例提供的一种编码端700的结构示意图,该编码端700可以由软件、硬件或者两者的结合实现。该编码端700可以包括:

发送模块701,用于根据对视频序列中的关键帧进行编码得到的第一编码数据,向解码端发送该第一编码数据;

该发送模块,还用于根据对该视频序列中的非关键帧进行编码得到的第二编码数据,向该解码端发送该第二编码数据和冗余数据包,其中,发送该第二编码数据和冗余数据包所使用的带宽和发送该第一编码数据所使用的带宽之间的差值在参考差值之内,该冗余数据包是根据前向纠错fec算法对确定该第二编码数据时所使用的关键帧进行冗余处理后得到。

可选的,该编码端还包括:

处理模块,用于根据预设带宽和发送该第二编码数据需要使用的带宽,确定剩余带宽,该预设带宽大于或等于发送该第一编码数据所使用的带宽;

该处理模块,还用于根据该剩余带宽确定fec算法的级别;

该处理模块,还用于根据该fec算法的级别对该第二编码数据时所使用的关键帧进行冗余处理,得到该冗余数据包,该fec算法的级别用于指示该冗余数据包的占比,该占比用于指示该冗余数据包的大小和该确定该第二编码数据时所使用的关键帧的大小之间的比例。

可选的,该处理模块用于:

从带宽范围和级别的对应关系中,选择与该剩余带宽对应的级别,得到该fec算法的级别;

其中,该带宽和级别的对应关系包括多个带宽范围、以及与该多个带宽范围一一对应的多个级别。

可选的,该处理模块用于:

确定发送该冗余数据包所需要的带宽;

如果该剩余带宽大于发送该冗余数据包所需要的带宽,则生成辅助数据包,该辅助数据包携带该非关键帧的配置信息,该配置信息包括该非关键帧的特效;

相应地,该发送模块用于:

向该解码端发送该辅助数据包。

可选的,该编码端包括:

处理模块,用于如果在参考时长内发送的全部非关键帧的编码数据使用的带宽和该预设带宽之间的比值小于参考比率,则校正编码过程中的编码参数,以使根据校正后的编码参数编码得到的非关键帧的编码数据需要使用的带宽与该预设带宽之间的差值小于参考差值。

可选的,该编码参数包括但不限于视频码率、视频分辨率、视频序列的时长、编码压缩等级以及视频帧率中的一个或多个。

在本申请实施例中,编码端通过对视频序列中的关键帧进行编码得到第一编码数据。编码端再根据对视频序列中的非关键帧进行编码得到第二编码数据。并根据fec算法对确定第二编码数据时所使用的关键帧进行冗余处理得到冗余数据包。这样,编码端向解码端发送添加有冗余数据包的第二编码数据所使用的带宽和发送该第一编码数据所使用的带宽之间的差值在参考差值之内,这样既保证了对于不同类型的视频帧,传输编码数据的过程中的使用的带宽可以保持稳定,同时在解码端出现针对确定第二编码数据时所使用的关键帧的编码数据丢失的现象时,还可以根据冗余数据包对该关键帧进行还原,以提高解码端解码第二编码数据的成功率。

图8是本申请实施例提供的一种解码端的结构示意图,该编码端可以由软件、硬件或者两者的结合实现。该解码端可以包括:

接收模块,用于接收编码端发送的第一编码数据,对该第一编码数据进行解码,得到视频序列中的关键帧,该第一编码数据是该编码端对视频序列中的关键帧进行编码得到;

该接收模块,还用于接收该编码端发送的第二编码数据和冗余数据包,对该第二编码数据进行解码,得到该视频序列中的非关键帧;

其中,该第二编码数据是该编码端对该视频序列中的非关键帧进行编码得到,该编码端发送该第二编码数据和冗余数据包所使用的带宽和发送该第一编码数据所使用的带宽之间的差值在参考差值之内,该冗余数据包是该编码端根据前向纠错fec算法对确定该第二编码数据时所使用的关键帧进行冗余处理后得到。

可选的,该解码端包括处理模块,该处理模块用于:

如果解码该第二编码数据时所需的关键帧有丢失,则根据该冗余数据包还原该所需的关键帧;

根据还原后的关键帧解码该第二编码数据,得到该视频序列中的非关键帧。

可选的,该接收模块,还用于接收该编码端发送的辅助数据包,该辅助数据包携带该非关键帧的配置信息,该配置信息包括该非关键帧的特效。

可选的,该解码端包括处理模块,该处理模块用于:

在得到的非关键帧上添加该特效。

在本申请实施例中,解码端接收编码端发送的第一编码数据,对第一编码数据进行解码,得到视频序列中的关键帧。解码端接收编码端发送的第二编码数据和冗余数据包,对第二编码数据进行解码,得到视频序列中的非关键帧。在解码端出现针对确定第二编码数据时所使用的关键帧的编码数据丢失的现象时,还可以根据冗余数据包对该关键帧进行还原,以提高解码端解码第二编码数据的成功率。

需要说明的是:上述实施例提供的编码端在发送编码数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的编码端与发送编码数据的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图9是本申请提供的一种终端900的结构框图。该终端可以是解码端或者编码端。该终端900可以是:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

通常,终端900包括有:处理器901和存储器902。

处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。

存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的编码、解码方法。

在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、触摸显示屏905、摄像头906、音频电路907、定位组件908和电源909中的至少一种。

外围设备接口903可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路904用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏905用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置终端900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在终端900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在终端900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。

摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。

定位组件908用于定位终端900的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件908可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。

电源909用于为终端900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。

加速度传感器911可以检测以终端900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制触摸显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。

陀螺仪传感器912可以检测终端900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对终端900的3d动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器913可以设置在终端900的侧边框和/或触摸显示屏905的下层。当压力传感器913设置在终端900的侧边框时,可以检测用户对终端900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在触摸显示屏905的下层时,由处理器901根据用户对触摸显示屏905的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置终端900的正面、背面或侧面。当终端900上设置有物理按键或厂商logo时,指纹传感器914可以与物理按键或厂商logo集成在一起。

光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制触摸显示屏905的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏905的显示亮度;当环境光强度较低时,调低触摸显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。

接近传感器916,也称距离传感器,通常设置在终端900的前面板。接近传感器916用于采集用户与终端900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与终端900的正面之间的距离逐渐变小时,由处理器901控制触摸显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与终端900的正面之间的距离逐渐变大时,由处理器901控制触摸显示屏905从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行上实施例提供的编码、解码方法。

本申请实施例还提供了一种包含指令的计算机程序产品,当其在终端上运行时,使得终端执行上述实施例提供的编码、解码方法。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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