解码方法、装置、电子设备及存储介质与流程

文档序号:26673595发布日期:2021-09-17 23:27阅读:87来源:国知局
解码方法、装置、电子设备及存储介质与流程

1.本发明涉及码流处理技术领域,具体涉及解码方法、装置、电子设备及存储介质。


背景技术:

2.目前越来越多的gpu都有硬解码的能力,例如,chrome浏览器可以有效利用gpu的硬解码能力去释放cpu的负担。然而,现有的浏览器在浏览多路视频时,要么都用gpu解码,要么都使用cpu解码。这种情况下,当gpu解码能力较弱时,若全部采用gpu解码,浏览器播放的画面就会出现卡顿;若全部采用cpu解码,会加重cpu负担且浪费了gpu的硬解码能力。


技术实现要素:

3.有鉴于此,本发明实施例提供了一种解码方法、装置、电子设备及存储介质,以解决视频码流的解码问题。
4.根据第一方面,本发明实施例提供了一种解码方法,包括:
5.获取待处理码流,以及获取所述待处理码流对应的硬解码能力参数;
6.对所述待处理码流进行解析,得到所述待处理码流的码流参数;
7.基于所述硬解码能力参数以及所述码流参数,对所述待处理码流进行解码。
8.本发明实施例提供的解码方法,通过获取各个待处理码流对应的硬解码能力参数,利用该硬解码能力参数对待处理码流进行解码,从而单独控制每一路码流的硬解码能力,合理利用cpu和gpu资源。
9.结合第一方面,在第一方面第一实施方式中,所述获取所述待处理码流对应的硬解码能力参数,包括:
10.响应于对所述待处理码流的硬解码能力的选择结果,以确定所述硬解码能力参数;
11.将所述硬解码能力参数传递给解码线程,以使得所述解码线程获取所述硬解码能力参数。
12.本发明实施例提供的解码方法,通过分别选择各路待处理码流的硬解码能力,以确定出硬解码能力参数,并将该硬解码能力参数传递给解码线程,使得后续在解码过程中该硬解码能力参数能够发挥其作用,使得解码是分别针对各路待处理码流进行的,实现资源的合理分配。
13.结合第一方面第一实施方式,在第一方面第二实施方式中,所述将所述硬解码能力参数传递给解码线程,以获取所述硬解码能力参数,包括:
14.向所述解码线程发送消息,以使得所述解码线程获得所述硬解码能力参数,所述消息中携带有所述硬解码能力参数。
15.本发明实施例提供的解码方法,通过消息传递硬解码能力参数,使得解码线程收到消息后就可以获得传递的硬解码能力参数,避免了数据传输过程中的多次转换,从而保证了该硬解码能力参数传输的可靠性。
16.结合第一方面,在第一方面第三实施方式中,所述基于所述硬解码能力参数以及所述码流参数,对所述待处理码流进行解码,包括:
17.判断所述硬解码能力参数是否为预设值;
18.当所述硬解码能力参数为预设值时,利用所述码流参数创建软解码器,对所述待处理码流进行解码。
19.本发明实施例提供的解码方法,在硬解码能力参数为预设值时,表示此时对于该待处理码流需要进行软解码,相应地,就可以基于该硬解码能力参数确定此时需要创建的是软解码器,再利用码流参数创建出相应的软解码器,实现资源的合理分配。
20.结合第一方面第三实施方式,在第一方面第四实施方式中,所述基于所述硬解码能力参数以及所述码流参数,对所述待处理码流进行解码,包括:
21.当所述硬解码能力参数不是所述预设值时,获取本地系统的当前状态;
22.基于所述本地系统的当前状态以及所述码流参数,对所述待处理码流进行解码。
23.本发明实施例提供的解码方法,在解码时结合本地系统的当前状态进行,以进一步保证资源的合理利用。
24.结合第一方面第四实施方式,在第一方面第五实施方式中,所述基于所述本地系统的当前状态以及所述码流参数,对所述待处理码流进行解码,包括:
25.利用所述本地系统的当前状态,确定是否有硬解条件;
26.当有所述硬解条件时,利用所述码流参数创建硬解码器,对所述待处理码流进行解码。
27.本发明实施例提供的解码方法,先判断是否满足硬解条件,由于硬解码的处理效率较高,可以提高解码效率。
28.结合第一方面第五实施方式,在第一方面第六实施方式中,所述基于所述本地系统的当前状态以及所述码流参数,对所述待处理码流进行解码,还包括:
29.当没有所述硬解条件时,利用所述码流参数创建软解码器,对所述待处理码流进行解码。
30.根据第二方面,本发明实施例还提供了一种解码装置,包括:
31.获取模块,用于获取待处理码流,以及获取所述待处理码流对应的硬解码能力参数;
32.解析模块,用于对所述待处理码流进行解析,得到所述待处理码流的码流参数;
33.解码模块,用于基于所述硬解码能力参数以及所述码流参数,对所述待处理码流进行解码。
34.本发明实施例提供的解码装置,通过获取各个待处理码流对应的硬解码能力参数,利用该硬解码能力参数对待处理码流进行解码,从而单独控制每一路码流的硬解码能力,合理利用cpu和gpu资源。
35.根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的解码方法。
36.根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读
存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的解码方法。
附图说明
37.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
38.图1是根据本发明实施例的解码方法的流程图;
39.图2是根据本发明实施例的解码方法的流程图;
40.图3是根据本发明实施例的解码方法的流程图;
41.图4是根据本发明实施例的解码装置的结构框图;
42.图5是本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
43.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.需要说明的是,本发明实施例提供的解码方法,可以应用在浏览器解码的过程中。例如,在chrome浏览器上,通过扩展js接口,对各路码流的硬解码能力进行控制,从而在js层面可以控制webrtc实时浏览的硬解码能力。
45.当需要同时浏览7路、8路或其他多路视频码流时,通过单独控制每一路码流的硬解码能力,从而合理利用cpu和gpu资源。
46.根据本发明实施例,提供了一种解码方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
47.在本实施例中提供了一种解码方法,可用于电子设备,如电脑、手机、平板电脑等,图1是根据本发明实施例的解码方法的流程图,如图1所示,该流程包括如下步骤:
48.s11,获取待处理码流,以及获取待处理码流对应的硬解码能力参数。
49.待处理码流可以是电子设备从外界获取到的,也可以是存储在电子设备中的,等等,在此对待处理码流的来源并不做任何限定。在本实施例中,以电子设备对待处理码流的实时解码为例进行详细描述。
50.具体地,电子设备在获取到待处理码流之后,可以相应获取到待处理码流对应的硬解码能力参数。所述的硬解码能力参数用于表示是否需要对该待处理码流进行软解码。其中,所述的硬解码能力参数可以是一个布尔值,也可以是一个字符,或者是其他的表示形式,在此对其并不做任何限定。
51.硬解码能力参数可以是电子设备依据待处理码流的情况确定的,也可以是人为确
定的。例如,电子设备可以依据待处理码流的大小,确定是否需要进行软解码;也可以依据其他参数确定待处理码流的硬解码能力参数。
52.电子设备也可以提供有硬解码能力参数的设置界面,在该界面上用户可以对每一路码流的硬解码能力进行设置,相应地,电子设备就可以获取到待处理码流对应的硬解码能力参数。例如,在该界面上,可以有对应于每一路码流的设置区域,每个区域有唯一的标识以区分各路码流。在相应的区域设置对应的硬解码能力,从而就可以建立硬解码能力参数与每一路码流的对应关系。后续电子设备利用该对应关系,就可以确定出与各路待处理码流对应的硬解码能力参数。
53.s12,对待处理码流进行解析,得到待处理码流的码流参数。
54.电子设备在获取到待处理码流之后,对其进行解析,得到相应的码流参数。所述的码流参数可以是payload_type信息等等。其中,码流参数用于对待处理码流进行解码,具体解码需要何种参数,可以根据实际需求进行相应的设置,在此对其并不做任何限定。
55.s13,基于硬解码能力参数以及码流参数,对待处理码流进行解码。
56.电子设备在得到硬解码能力参数以及码流参数之后,就可以单独对各路码流进行解码。不同的码流可以采用不同的解码方式,具体所选取的解码方式与硬解码能力参数有关,其可以是硬解码或软解码。
57.关于该步骤具体将在下文中进行详细描述。
58.本实施例提供的解码方法,通过获取各个待处理码流对应的硬解码能力参数,利用该硬解码能力参数对待处理码流进行解码,从而单独控制每一路码流的硬解码能力,合理利用cpu和gpu资源。
59.在本实施例中提供了一种解码方法,可用于电子设备,如电脑、手机、平板电脑等,图2是根据本发明实施例的解码方法的流程图,如图2所示,该流程包括如下步骤:
60.s21,获取待处理码流,以及获取待处理码流对应的硬解码能力参数。
61.具体地,上述s21可以包括:
62.s211,获取待处理码流。
63.关于待处理码流的获取请详见上述图1所示实施例的s11中的详细描述,在此不再赘述。
64.s212,响应于对待处理码流的硬解码能力的选择结果,以确定硬解码能力参数。
65.在本实施例中,以用户决定待处理码流的硬解码能力为例。例如,电子设备需要同时对11路码流进行解码,用户分别设置各路待处理码流的硬解码能力,以单独控制每一路码流的硬解码能力。即,用户依次设置各路待处理码流的硬解码能力,相应地,电子设备响应用户的选择结果就可以确定对应的硬解码能力参数。例如,选择结果为false,对应的硬解码能力参数为0;选择结果为true,对应的硬解码能力参数为1。
66.s213,将硬解码能力参数传递给解码线程,以使得解码线程获取硬解码能力参数。
67.电子设备将各路待处理码流的对应的硬解码能力参数传递给解码线程,后续解码线程接收到该硬解码能力参数,会将其给具体实现类,以对待处理码流进行解码。
68.可选地,上述s213可以包括:向解码线程发送消息,以使得解码线程获得所述硬解码能力参数,所述消息中携带有硬解码能力参数。
69.在本实施例的一个具体实施方式中,可以通过disablehardwaredecode(bool)将
硬解码能力参数传递给解码线程。具体地方法实现如下:
[0070][0071]
其中,enable表示选择结果,相应地,选择结果包括两种可能性,即true或false。当选择结果为true时,利用receiver传递的是true对应的布尔值;当选择结果为false时,利用receiver传递的是flase对应的布尔值。这里receiver_是一个rtcrtpreceiver对象。在rtc_rtp_receiver.idl文件里面的rtcrtpreceiver接口中增加disablehardwaredecode(bool)方法的申明,相应的blink模块中rtcrtpreceiver类也都要添加disablehardwaredecode(bool)的真正实现。
[0072]
blink模块中的rtcrtpreceiver类要实现disablehardwaredecode,就要依靠该类中的webrtcrtpreceiver成员来实现。
[0073]
webrtcrtpreceiver类在content模块中。该类要实现disablehardwaredecode需要依靠成员webrtc::rtpreceiverinterface类,这个类是webrtc对外的api,即下文所述的webrtc模块。
[0074]
webrtc::rtpreceiverinterface类到解码器之间还有一段距离,它们不在同一个线程中,因此webrtc::rtpreceiverinterface要实现disablehardwaredecode需要发消息给解码线程实现如下:
[0075][0076][0077]
其中media_channel_表示rtpreceiver和解码线程之间的通道,解码线程收到disablehardwaredecode消息后会得到传递的硬解码能力参数,用布尔值表示,然后将该布尔值传参给webrtcvideochannel::webrtcvideoreceivestream类去实现
disablehardwaredecode(bool)方法。
[0078]
通过消息传递硬解码能力参数,使得解码线程收到消息后就可以获得传递的硬解码能力参数,避免了数据传输过程中的多次转换,从而保证了该硬解码能力参数传输的可靠性。
[0079]
s22,对待处理码流进行解析,得到待处理码流的码流参数。
[0080]
详细请参见图1所示实施例的s12,在此不再赘述。
[0081]
s23,基于硬解码能力参数以及码流参数,对待处理码流进行解码。
[0082]
如上文所述,webrtcvideochannel::webrtcvideoreceivestream类在获取待处理码流后会根据待处理码流携带的payload_type信息创建相应的解码器(比如一般h264 rtp流的payload_type为96)。而解码器的类型,即硬解码器,或软解码器,是由disablehardwaredecode所传递的布尔值确定的,电子设备依据传递的布尔值,即,硬解码能力参数,确定所创建的解码器的类型,以对待处理码流进行解码。
[0083]
详细请参见图1所示实施例的s13,在此不再赘述。
[0084]
本实施例提供的解码方法,通过分别选择各路待处理码流的硬解码能力,以确定出硬解码能力参数,并将该硬解码能力参数传递给解码线程,使得后续在解码过程中该硬解码能力参数能够发挥其作用,使得解码是分别针对各路待处理码流进行的,实现资源的合理分配。
[0085]
在本实施例中提供了一种解码方法,可用于电子设备,如电脑、手机、平板电脑等,图3是根据本发明实施例的解码方法的流程图,如图3所示,该流程包括如下步骤:
[0086]
s31,获取待处理码流,以及获取待处理码流对应的硬解码能力参数。
[0087]
详细请参见图2所示实施例的s21,在此不再赘述。
[0088]
s32,对待处理码流进行解析,得到待处理码流的码流参数。
[0089]
详细请参见图2所示实施例的s22,在此不再赘述。
[0090]
s33,基于硬解码能力参数以及码流参数,对待处理码流进行解码。
[0091]
具体地,如上文所述,硬解码能力参数可以采用布尔值表示。上述s33可以包括:
[0092]
s331,判断硬解码能力参数是否为预设值。
[0093]
例如,预设值为1,当硬解码能力参数对应的布尔值为1时,就表示待处理码流需要利用软解码;当硬解码能力参数对应的布尔值为0时,就表示待处理码流可以采用其他方式解码。
[0094]
当所述硬解码能力参数为预设值时,执行s332;否则,执行s333。
[0095]
s332,利用码流参数创建软解码器,对待处理码流进行解码。
[0096]
在硬解码能力参数为预设值时,电子设备就利用码流参数创建软解码器,对待处理码流进行解码。
[0097]
s333,获取本地系统的当前状态。
[0098]
当硬解码能力参数不是预设值时,电子设备需要结合本地系统的当前状态确定采用何种方式进行解码。其中,当前状态可以是cpu或gpu使用率、软解码或硬解码的队列长度等等。
[0099]
s334,基于本地系统的当前状态以及码流参数,对待处理码流进行解码。
[0100]
电子设备依据本地系统的当前状态及码流参数,创建解码器。即,有硬解条件就创
建硬解码器;没有条件就创建软解码器。其中,硬解条件可以指本地系统当前的gpu使用率或等待硬解的队列长度等等。将系统的当前状态与所设置的阈值进行比较,以gpu使用率为例,当gpu使用率高于预设值,则确定所要创建的解码器类型为硬解码器;否则,创建软解码器。
[0101]
在本实施例的一些可选实施方式中,上述s334可以包括:
[0102]
(1)利用本地系统的当前状态,确定是否有硬解条件。
[0103]
当有硬解条件时,执行步骤(2);否则,执行步骤(3)。
[0104]
(2)利用码流参数创建硬解码器,对待处理码流进行解码。
[0105]
(3)利用码流参数创建软解码器,对待处理码流进行解码。
[0106]
本实施例提供的解码方法,在硬解码能力参数为预设值时,表示此时对于该待处理码流需要进行软解码,相应地,就可以基于该硬解码能力参数确定此时需要创建的是软解码器,再利用码流参数创建出相应的软解码器,实现资源的合理分配。在解码时结合本地系统的当前状态进行,以进一步保证资源的合理利用。
[0107]
在本实施例中还提供了一种解码装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0108]
本实施例提供一种解码装置,如图4所示,包括:
[0109]
获取模块41,用于获取待处理码流,以及获取所述待处理码流对应的硬解码能力参数;
[0110]
解析模块42,用于对所述待处理码流进行解析,得到所述待处理码流的码流参数;
[0111]
解码模块43,用于基于所述硬解码能力参数以及所述码流参数,对所述待处理码流进行解码。
[0112]
本实施例提供的解码装置,通过获取各个待处理码流对应的硬解码能力参数,利用该硬解码能力参数对待处理码流进行解码,从而单独控制每一路码流的硬解码能力,合理利用cpu和gpu资源。
[0113]
本实施例中的解码装置是以功能单元的形式来呈现,这里的单元是指asic电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
[0114]
上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
[0115]
本发明实施例还提供一种电子设备,具有上述图4所示的解码装置。
[0116]
请参阅图5,图5是本发明可选实施例提供的一种电子设备的结构示意图,如图5所示,该电子设备可以包括:至少一个处理器51,例如cpu(central processing unit,中央处理器),至少一个通信接口53,存储器54,至少一个通信总线52。其中,通信总线52用于实现这些组件之间的连接通信。其中,通信接口53可以包括显示屏(display)、键盘(keyboard),可选通信接口53还可以包括标准的有线接口、无线接口。存储器54可以是高速ram存储器(random access memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non

volatile memory),例如至少一个磁盘存储器。存储器54可选的还可以是至少一个位于远离前述处理器51的存储装置。其中处理器51可以结合图4所描述的装置,存储器54中存储应用程序,且处理器51调用存储器54中存储的程序代码,以用于执行上述任一方法步骤。
[0117]
其中,通信总线52可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。通信总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0118]
其中,存储器54可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random

access memory,缩写:ram);存储器也可以包括非易失性存储器(英文:non

volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:hdd)或固态硬盘(英文:solid

state drive,缩写:ssd);存储器54还可以包括上述种类的存储器的组合。
[0119]
其中,处理器51可以是中央处理器(英文:central processing unit,缩写:cpu),网络处理器(英文:network processor,缩写:np)或者cpu和np的组合。
[0120]
其中,处理器51还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application

specific integrated circuit,缩写:asic),可编程逻辑器件(英文:programmable logic device,缩写:pld)或其组合。上述pld可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:cpld),现场可编程逻辑门阵列(英文:field

programmable gate array,缩写:fpga),通用阵列逻辑(英文:generic array logic,缩写:gal)或其任意组合。
[0121]
可选地,存储器54还用于存储程序指令。处理器51可以调用程序指令,实现如本技术图1至3实施例中所示的解码方法。
[0122]
本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的解码方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read

only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid

state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
[0123]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1