基于缓冲池的图像解码方法、装置、可读介质及电子设备与流程



1.本技术属于云计算技术领域,具体涉及一种基于缓冲池的图像解码方法、基于缓冲池的图像解码装置、计算机可读介质以及电子设备。


背景技术:



2.随着网络技术的快速发展,终端使用者对终端设备的性能有了更高的需求,比如对于在观看视频、玩游戏时,都希望画面清晰顺畅、无卡顿,这也就对视频的编解码延时有着极高的要求,例如当视频的帧率为60fps(frames per second,帧/秒)时,编解码延时需要小于16ms,当视频的帧率为120fps时,编解码延时需要小于8ms,等等。
3.目前,进行视频编解码时,一般不会对网络传入的数据进行管理,即网络传入多少数据,都会立即传入芯片进行编解码,但是如果网络同时传入大量的数据包,而上层框架对数据不作管理,把所有数据包都直接传入芯片中的话,会导致芯片工作负荷过高发热,降低了芯片的工作效率,增加了编解码的延时,最终降低了视频的观赏体验,视频的播放画面卡顿延时严重。


技术实现要素:



4.本技术的目的在于提供一种基于缓冲池的图像解码方法、基于缓冲池的图像解码装置、计算机可读介质以及电子设备,能够克服相关技术中存在的大量数据包同时进入芯片进行解码导致芯片性能下降,解码延时严重,以及视频画面卡顿的问题。
5.本技术的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本技术的实践而习得。
6.根据本技术实施例的一个方面,提供一种基于缓冲池的图像解码方法,该方法包括:获取编码码流,基于所述码流构建对应于单帧图像的帧frame对象;基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。
7.根据本技术实施例的一个方面,提供一种基于缓冲池的图像解码装置,该装置包括:对象构建模块,用于获取编码码流,基于所述编码码流构建对应于单帧图像的帧frame对象;空间申请模块,用于基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;解码模块,用于将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。
8.在本技术的一些实施例中,所述对象构建模块配置为:对所述编码码流进行解析,以获取与所述单帧图像对应的帧信息,所述帧信息包括帧类型、时间戳、帧大小和序列号;根据所述帧信息和与所述单帧图像对应的内存地址构建所述frame对象。
9.在本技术的一些实施例中,所述缓冲池包括:未申请未使用空间、已申请未使用空间和已使用空间;所述frame对象包括与所述单帧图像对应的帧信息和内存地址;所述空间申请模块配置为:基于所述内存地址向所述缓冲池发送存储空间申请指令,并根据所述帧信息中的帧大小和所述帧信息的大小确定所述frame包的大小;在所述frame包的大小小于或等于所述未申请未使用空间的大小时,根据所述frame包的大小获取所述未申请未使用空间中的空间作为申请空间;以及,在所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小时,将所述frame包存储于所述已申请未使用空间中。
10.在本技术的一些实施例中,所述空间申请模块还配置为:在所述frame包的大小大于所述未申请未使用空间时,等待所述已使用空间释放,直至所述未申请未使用空间的大小大于或等于所述frame包的大小;以及,在所述已申请未使用空间中剩余空间的大小小于所述frame包的大小时,等待所述已使用空间释放,直至所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小。
11.在本技术的一些实施例中,所述空间申请模块还配置为:根据所述frame对象中的时间戳和/或索引号将所述frame包按序存储于所述缓冲池中。
12.在本技术的一些实施例中,所述参数包括设定帧率;所述解码模块包括:第一输入单元,用于将所述测试码流以所述设定帧率输入至所述解码端进行解码,以获取基准输出帧率和基准单帧平均解码延时;第一比对单元,用于根据所述设定帧率和第一系数确定第一帧率阈值,并将所述基准输出帧率与所述第一帧率阈值进行比对;第一确定单元,用于当所述基准输出帧率小于所述第一帧率阈值时,将所述设定帧率作为所述最大送帧速度;第二输入单元,用于当所述基准输出帧率大于或等于所述第一帧率阈值时,增大所述设定帧率以获取送帧速度,并将所述测试码流以所述送帧速度输入至所述解码端进行解码,以获取输出帧率和单帧平均解码延时;第一计算单元,用于根据所述送帧速度、所述基准单帧平均解码延时、所述输出帧率和所述单帧平均解码延时确定最大送帧速度。
13.在本技术的一些实施例中,所述第一计算单元包括:第二比对单元,用于根据所述送帧速度和第二系数确定第二帧率阈值,并将所述输出帧率与所述第二帧率阈值进行比对;第二确定单元,用于当所述输出帧率小于所述第二帧率阈值时,将所述送帧速度作为所述最大送帧速度;第二计算单元,用于当所述输出帧率大于或等于所述第二帧率阈值时,根据所述送帧速度、所述基准单帧平均解码延时和所述单帧平均解码延时确定最大送帧速度。
14.在本技术的一些实施例中,所述第二计算单元包括:第三比对单元,用于将所述基准单帧平均解码延时和所述单帧平均解码延时进行比对;第三确定单元,用于当所述单帧平均解码延时大于所述基准单帧平均解码延时时,将所述送帧速度作为所述最大送帧速度;第四计算单元,用于当所述单帧平均解码延时小于或等于所述基准单帧平均解码延时时,根据所述送帧速度确定最大送帧速度。
15.在本技术的一些实施例中,所述第三确定单元包括:第四比对单元,用于将所述送帧速度与帧率阈值进行比对;第四确定单元,用于当所述送帧速度大于所述帧率阈值时,将所述送帧速度作为所述最大送帧速度;更新单元,用于当所述送帧速度小于或等于所述帧率阈值时,更新所述送帧速度,并以更新送帧速度将所述测试码流输入至所述解码端进行解码,以获取更新输出帧率和更新单帧平均解码延时;第五计算单元,用于根据所述更新送
帧速度、所述基准单帧平均解码延时、所述更新输出帧率和所述更新单帧平均解码延时确定所述最大送帧速度。
16.在本技术的一些实施例中,所述基于缓冲池的图像解码装置还包括:获取模块,用于获取网络拥塞时长和等待申请缓冲池存储空间的图像帧数量;清空模块,用于当所述网络拥塞时长大于预设时长,且所述图像帧数量大于预设阈值时,检测所述缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对所述缓冲池进行清空。
17.在本技术的一些实施例中,所述清空模块配置为:当所述缓冲池中存在所述idr帧时,获取与所述idr帧对应的目标索引号;将所述缓冲池中索引号小于所述目标索引号的frame包丢弃,同时将所述idr帧对应的frame包由所述缓冲池发送至所述解码端。
18.在本技术的一些实施例中,所述清空模块配置为:当所述缓冲池中不存在所述idr帧时,向服务器发送idr帧获取请求;接收所述服务器响应所述idr帧获取请求发送的idr帧,清空所述缓冲池,并将包含所述idr帧的frame包由所述缓冲池发送至所述解码端。
19.根据本技术实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的基于缓冲池的图像解码方法。
20.根据本技术实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为经由执行所述可执行指令来执行如以上技术方案中的基于缓冲池的图像解码方法。
21.根据本技术实施例的一个方面,提供一种计算机程序产品,该计算机程序产品包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机执行如以上技术方案中的基于缓冲池的图像解码方法。
22.本技术实施例提供的基于缓冲池的图像解码方法,在获取编码码流后,基于编码码流构建对应于单帧图像的帧frame对象,并基于frame对象向缓冲池发送指令以申请缓冲池中的存储空间,在成功申请到缓冲池中的存储空间后,将与单帧图像对应的frame包存储于缓冲池中,然后将缓冲池中存储的frame包以最大送帧速度输入至解码端进行解码,该最大送帧速度是根据与单帧图像具有相同参数的测试码流对解码端进行动态能力探测后,基于该动态能力调整得到的。本技术一方面能够在网络拥塞时,将网络传入的数据包缓存在缓冲池中,避免大量数据对解码端进行冲击,导致解码端性能下降;另一方面能够通过动态能力探测解码端的负荷能力获得使解码端解码性能最高的最大送帧速度,在以该最大送帧速度将缓冲池中的frame包输入到解码端时,不但能够减缓网络拥塞,还能实现流量稳定控制的效果,提高了解码端的解码性能。
23.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
24.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
25.图1示意性地示出了应用本技术实施例中的基于缓冲池的图像解码方法的系统架
构的结构示意图。
26.图2示意性地示出了本技术实施例中基于缓冲池的图像解码方法的步骤流程示意图。
27.图3示意性地示出了本技术实施例中缓冲池的结构示意图。
28.图4示意性地示出了本技术实施例中的在缓冲池中申请存储空间以缓存frame包的流程示意图。
29.图5示意性地示出了本技术实施例中的获取最大送帧速度的流程示意图。
30.图6示意性地示出了本技术实施例中的根据输出帧率和送帧速度确定最大送帧速度的流程示意图。
31.图7示意性地示出了本技术实施例中的根据基准单帧平均解码延时和单帧平均解码延时确定最大送帧速度的流程示意图。
32.图8示意性地示出了本技术实施例中的根据送帧速度确定最大送帧速度的流程示意图。
33.图9示意性地示出了本技术实施例中基于缓冲池的图像解码装置的结构框图。
34.图10示意性示出了适于用来实现本技术实施例的电子设备的计算机系统结构框图。
具体实施方式
35.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本技术将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
36.此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本技术的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本技术的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本技术的各方面。
37.附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
38.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
39.在本技术的相关技术中,随着音视频技术的发展,音视频框架中的编解码延时要求越来越高,特别是在云游戏、视频通话等场景下,对编解码延时有着极高的要求。以安卓终端为例,目前安卓终端普遍使用由谷歌公司开发的mediacodec编解码接口调用芯片的编解码能力对码流进行编码和解码,但是在安卓终端想要获取低延时编解码,需要依靠芯片的硬件编解码能力。当网络同时传入大量的数据包,而上层框架对数据不做管理,把数据包都直接输入到芯片中,会导致芯片工作负荷过高发热,最终降低芯片的工作效率,增加了编解码的延时,用户会感觉画面卡顿延时严重,降低了用户体验。
40.无论是安卓终端还是搭载其它操作系统的终端,都是通过芯片中的编码器和解码器进行编码和解码,那么在网络拥塞而上层框架对传入的大量数据包不作管理的话,都会存在芯片工作效率降低、编解码延时严重、用户体验差的问题。
41.针对本领域的相关技术,本技术实施例提出了一种基于缓冲池的图像解码方法,本技术中的基于缓冲池的图像解码方法可以应用于任意的涉及视频的场景,例如游戏场景、视频通话场景、直播场景,等等。在对本技术实施例中的基于缓冲池的图像解码方法进行详细说明之前,先对本技术涉及的技术名词进行解释。
42.1.编码:信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码。
43.2.解码:编码的逆过程,将信息从已经编码的形式恢复到编码前原状的过程。
44.3.送帧速度:音视频框架中将数据帧送入芯片里的编解码模块的速度,如60fps,则是每秒送60帧数据到芯片中。
45.4.设定帧率:云游戏过程中用户设定的游戏画面帧率,服务器会以该设定帧率进行编码,客户端也需要以该设定帧率进行解码。
46.5.frame包:缓冲池中缓存的数据的类型名字,其中会包括对应单帧图像的码流数据、帧类型、时间戳、帧大小、索引号index、分辨率。
47.6.单帧平均解码延时:通过统计解码过程每一帧的解码时间取平均得到的解码延时。
48.7.帧率:以帧称为单位的位图图像连续出现在显示器上的频率。
49.8.云游戏:基于云计算技术,游戏在远程服务器上运行,终端客户不需要下载、安装,也不需要考虑终端配置,只要有网络,就能玩运算量非常大的游戏。
50.接下来,对应用本技术技术方案的示例性系统架构进行说明。
51.图1示意性地示出了应用本技术技术方案的示例性系统架构框图。
52.如图1所示,系统架构100可以包括客户端101、服务器102和网络103。其中,客户端101为包括智能手机、平板电脑、笔记本电脑、台式电脑、智能电视、智能车载终端等各种具有显示屏幕的电子设备。在不同场景中,客户端101的数量不同,例如在云游戏场景中,客户端101的数量可以是一个,用户通过客户端101参与云游戏,在视频通话场景中,客户端101的数量为多个,各个客户端101的用户通过客户端101进行视频通话,等等。服务器102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集或者分布式系统,还可以是提供云计算服务的云服务器。网络103可以是能够在客户端101和服务器102之间提供通信链路的各种连接类型的通信介质,例如可以是有线通信链路或者无线通信链路。
53.根据实现需要,本技术实施例中的系统架构可以具有任意数目的客户端、网络和服务器。例如,服务器可以是由多个服务器设备组成的服务器组。另外,本技术实施例提供的技术方案可以应用于客户端101中。
54.在本技术的一个实施例中,客户端101中搭载有芯片,芯片中设置有编解码模块,同时客户端101中还设置有缓冲池,该缓冲池中缓存有一个或多个frame包,frame包是对网络送入客户端101的包含图像帧的数据包进行处理生成的。在对芯片的负荷能力进行动态能力探测,基于动态能力调整得到芯片解码性能最高时对应的缓冲池的最大送帧速度后,可以基于该最大送帧速度将缓冲池中的frame包送入到解码端中进行解码,以获取图像帧
进行渲染显示。
55.在本技术的一个实施例中,在对芯片的负荷能力进行动态能力探测以基于该动态能力调整得到芯片解码性能最高时对应的缓冲池的最大送帧速度时,首先获取客户端在以当前场景下的设定帧率为送帧速度,将测试码流输入至解码端进行解码所确定的基准输出帧率和基准单帧平均解码延时等数据,然后基于设定帧率重新确定送帧速度,并以重新确定的送帧速度将测试码流输入至解码端以获取在重新确定的送帧速度下的解码输出帧率和单帧平均解码延时等数据,最后根据重新确定的送帧速度、所获得的解码输出帧率和单帧平均解码延时、以及对应设定帧率的基准解码输出帧率和基准单帧平均解码延时等数据,确定最大送帧速度。
56.在本技术的一个实施例中,本技术中的基于缓冲池的图像解码方法可用于云游戏、视频通话、直播等场景,相应地,服务器102可以是提供云计算服务的云服务器,也就是说,本技术涉及云存储和云计算技术。
57.云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
58.目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(id,id entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
59.存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(raid,redundant array of independent disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
60.云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
61.作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为iaas(infrastructure as a service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
62.按照逻辑功能划分,在iaas(infrastructure as a service,基础设施即服务)层上可以部署paas(platform as a service,平台即服务)层,paas层之上再部署saas(software as a service,软件即服务)层,也可以直接将saas部署在iaas上。paas为软件
运行的平台,如数据库、web容器等。saas为各式各样的业务软件,如web门户网站、短信发器等。一般来说,saas和paas相对于iaas是上层。
63.下面结合具体实施方式对本技术提供的基于缓冲池的图像解码方法、基于缓冲池的图像解码装置、计算机可读介质以及电子设备等技术方案做出详细说明。
64.图2示意性示出了本技术一个实施例中的基于缓冲池的图像解码方法的步骤流程示意图,该基于缓冲池的图像解码方法由客户端执行,该客户端具体可以是图1中的客户端101。如图2所示,本技术实施例中的基于缓冲池的图像解码方法主要可以包括如下的步骤s210至步骤s230。
65.步骤s210:获取编码码流,基于所述编码码流构建对应于单帧图像的帧frame对象;
66.步骤s220:基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;
67.步骤s230:将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。
68.在本技术实施例提供的基于缓冲池的图像解码方法中,在获取编码码流后,基于该码流构建对应于单帧图像的帧frame对象,并基于frame对象向缓冲池发送指令以申请缓冲池中的存储空间,在成功申请到缓冲池中的存储空间后,将与单帧图像对应的frame包存储与缓冲池中,然后将缓冲池中存储的frame包以最大送帧速度输入至解码端,该最大送帧速度是根据与单帧图像具有相同参数的测试码流对解码端进行动态能力探测后,基于该动态能力调整得到的。本技术一方面能够在网络拥塞时,将网络传入的数据包缓存在缓冲池中,避免大量数据对解码端进行冲击,导致解码端性能下降;另一方面能够通过动态探测解码端的负荷能力获得使芯片解码性能最高的最大送帧速度,在以该最大送帧速度将缓冲池中的frame包输入到解码端时,不但能够减缓网络拥塞,还能实现流量稳定控制的效果,提高了解码端的解码性能。
69.下面对基于缓冲池的图像解码方法的各个方法步骤的具体实现方式进行详细说明。
70.在步骤s210中,获取编码码流,基于所述码流构建对应于单帧图像的帧frame对象。
71.在本技术的一个实施例中,在视频编解码领域,通常都是针对构成视频的每一帧图像分别进行编码,然后将编码形成的数据包依次发送至客户端,通过客户端对每个数据包进行解析以获取其中的图像帧,最后进行渲染并播放。相应地,在本技术的实施例中,通过缓冲池缓存网络拥塞时产生的大量数据包时,可以将该些数据包拆成多个对应单帧图像的frame包,然后将所有的frame包按序排列,并依次传入到解码端中进行解码,其中解码端具体可以是芯片,并由设置于芯片中的解码模块实现解码。
72.在本技术的一个实施例中,在向缓冲池申请存储空间,将frame包缓存至缓冲池之前,需要获取编码码流,并根据该编码码流构建对应于单帧图像的frame对象和frame包。
73.由于一帧图像可以分为多个片,每个片中分成多个宏块,每个宏块分成多个子块,这样就可以将一张大图分解成一个个小块,可以方便地进行空间上的编码。在传输构成视
频的多个图像帧时,通过二进制流的方式进行传输,该二进制流由多个nalu单元(network abstract layer unit,网络抽象层单元)组成,nalu单元包括起始编码、nalu头和nalu负荷(payload)三部分组成,其中起始编码用于标识一个nalu单元的开始,nalu头包括类型参数nal type,nalu负荷具体为rbsp(raw byte sequence payload,原始字节序列载荷)数据,包含了视频的编码数据。因此在客户端接收到网络传送过来的包含单帧图像信息的数据包后,可以先从中提取nalu头以获取nalu类型,然后根据数据包中的rbsp数据拼接形成与单帧图像对应的码流,最后根据得到的nalu类型对rbsp数据进行解析,以获取与该单帧图像对应的帧信息,该帧信息具体包括帧类型、时间戳、帧大小和序列号,进一步地,还可以包括分辨率等信息。其中,帧类型具体分为帧内编码帧(i帧)、前向预测编码帧(p帧)、双向预测内插编码帧(b帧),i帧中还包括即时解码刷新idr帧,即一个图像序列中的第一个图像帧。
74.在获取与单帧图像对应的帧信息后,可以根据帧信息和与单帧图像对应的内存地址构建frame对象,并基于frame对象申请缓冲池中的存储空间,若申请到缓冲池中的存储空间,即可将与单帧图像对应的frame包缓存于缓冲池中,等待被传送至解码端中进行解码,若未申请到缓冲池中的存储空间,则继续等待,直至申请到缓存空间。其中,frame包包括与单帧图像对应的编码码流和帧信息,也就是说,frame包包括单帧图像对应的编码码流、帧类型、时间戳、帧大小和序列号,进一步地,还可以包括分辨率等信息。
75.在步骤s220中,基于所述frame对象申请缓冲池中的存储空间,并将包含所述码流和所述帧信息的frame包存储于所述缓冲池中。
76.在本技术的一个实施例中,frame对象包括与单帧图像对应的帧信息和内存地址,同时缓冲池设置于客户端中,并对应客户端的内存,因此可以根据该内存地址向缓冲池发送存储空间申请指令以申请存储空间,该存储空间即为内存空间。在申请存储空间时,可以根据帧信息中的帧大小以及帧信息的大小判断缓冲池中是否存在足够的存储空间进行分配,其中帧大小对应与单帧图像对应的编码码流的大小,由于frame包由编码码流和帧信息组成,编码码流的大小对应帧大小,因此可以根据帧大小和帧信息的大小得到frame包的大小,进而根据frame包的大小进行存储空间的申请。
77.在本技术的一个实施例中,在客户端中还保存有缓冲池对象,该缓冲池对象保存有缓存的frame包和整个缓冲池的状态信息,缓冲池的存储空间分为三部分,如图3所示,缓冲池300包括已使用空间301、已申请未使用空间302和未申请未使用空间303,其中,已使用空间301中用于存储已输入至解码端但未完成解码的frame包,如果解码出错可以重新从已使用空间301中根据索引号获取相应地frame包进行解码,如果解码完成,则将frame包从已使用空间301中删除;已申请未使用空间302中用于存储已申请存储空间但是未被输入至解码端中的frame包,当frame包被输入至解码端时,frame包从已申请未使用空间302转移至已使用空间301;未申请未使用空间303为等待申请的空间。在本技术实施例中,可以同时向解码端发送多个frame包进行解码,相应地,已使用空间301和已申请未使用空间302中可以同时存储多个frame包,如图3所示,在已使用空间301中存储有三个frame包,在已申请未使用空间302中存储有两个frame包。
78.相应地,缓冲池的状态信息包括:总空间大小、已使用空间的大小、未申请未使用空间的大小、已申请未使用空间的大小、已保存帧数、idr帧的数量,等,其中,总空间大小等于已使用空间、未申请未使用空间和已申请未使用空间的大小之和,并且总空间大小取决
于当前场景中码流的分辨率,单位为frame,例如当前场景中码流的分辨率为720p时,总空间大小可以设定为100frame,已使用空间最多设置为50frame,也就是说缓冲池总共可以存储100个frame包,其中已使用空间最多可以存储50个frame包,若当前场景中码流的分辨率为1080p时,总空间大小可以设定为70frame,已使用空间最多设置为35frame,即缓冲池总共可以存储70个frame包,其中已使用空间最多可存储35个frame包。进一步地,根据总空间大小和已使用空间的大小可以确定可使用空间的大小,即未申请未使用空间和已申请未使用空间的大小之和,例如码流的分辨率为720p时,可使用空间的大小即为50frame,码流的分辨率为1080p时,可使用空间的大小即为65frame,同时,未申请未使用空间的大小和已申请未使用空间的大小可以根据实际需要基于可使用空间的大小进行分配,例如当可使用空间的大小为50frame时,将未申请未使用空间和已申请未使用空间均设置为25frame,等等,本技术对此不作具体限定。
79.在本技术的一个实施例中,在向缓冲池申请存储空间时,是以frame为单位申请的,由于每个frame包的大小不同,因此所申请的存储空间的大小也不同。图4示意性示出了在缓冲池中申请存储空间以缓存frame包的流程示意图,如图4所示,在步骤s401中,判断frame包的大小是否小于或等于未申请未使用空间的大小;如果判定结果为是,则执行步骤s402,如果判定结果为否,则执行步骤s403;在步骤s402中,根据frame包的大小从未申请未使用空间中获取相应的申请空间;在步骤s403中,等待已使用空间释放直到未申请未使用空间的大小大于或等于frame包的大小;在步骤s404中,判断已申请未使用空间中剩余空间的大小是否大于或等于frame包的大小;如果判定结果为是,则执行步骤s405,如果判定结果为否,则执行步骤s406;在步骤s405中,将frame包放入已申请未使用空间;在步骤s406中,等待已使用空间释放,直至已申请未使用空间中剩余空间的大小大于或等于frame包的大小。
80.其中,已申请未使用空间和未申请未使用空间中的可使用空间是动态变化的,当新的frame包传送过来的时候,首先从未申请未使用空间中申请空间,如果frame包的大小小于或等于未申请未使用空间的大小,则将未申请未使用空间中的部分或全部空间作为申请空间分配给frame包,接着判断已申请未使用空间中剩余空间的大小是否大于或等于frame包,如果是,则将frame包存储于已申请未使用空间,释放申请空间,如果否,则等待已使用空间释放,已申请未使用空间中缓存的frame包转移至已使用空间,直到已申请未使用空间中剩余空间的大小大于或等于frame包的大小,以便将申请空间中的frame包转移至已申请未使用空间,同时释放申请空间。如果frame包的大小大于未申请未使用空间的大小,则等待已使用空间释放,已申请未使用空间中的frame包转移至已使用空间,同时申请空间中的frame包转移至已申请未使用空间中,以使申请空间释放,这样未申请未使用空间的大小大于或等于frame包的大小,便可以将其中一部分或者全部空间作为申请空间分配给frame包。值得说明的是,本技术中的未申请未使用空间的大小大于或等于frame包所对应的理论最大值,这样才可以保证当未申请未使用空间未被frame包申请空间时,能够为新的frame包分配相应的申请空间。
81.在本技术的一个实施例中,在将frame包存储于缓冲池时,可以根据frame包中frame对象包含的时间戳和/或索引号对frame包进行排序,并按序存储于缓冲池中,进而在将frame包发送至解码端进行解码时也是按照顺序依次发送的,使得客户端显示的视频图
像是连贯的。值得说明的是,在发送包含图像帧的数据包的源端(服务器)未出现故障时,通常frame包中的时间戳和索引号是相对应的,客户端在接收数据包时也是按照时间的先后顺序接收的,因此可以仅根据索引号或者时间戳对frame包进行排序,但是当源端(服务器)出现故障时,可能导致传送顺序发生混乱,这样就需要同时根据时间戳和索引号进行排序,以保证frame包是按照顺序排序并发送到解码端进行解析的。
82.在步骤s230中,将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。
83.在本技术的一个实施例中,缓冲池在缓存frame包的同时,也将已缓存的frame包发送至解码端进行解码,但是为了实现流量稳定控制的效果,提高解码端的解码性能,同时又要提高frame包的传输效率和解码效率,需要以一个较高且稳定的送帧速度将frame包送入到解码端中,在本技术的实施例中,为了确定最大送帧速度,可以通过对解码端,也就是芯片的负荷能力进行动态能力探测,并基于动态能力进行调整以获取。
84.一般而言,芯片作为解码端,会随着送帧速度的提高而提高工作频率,从而加快芯片解码的速度,但是一旦送帧的速度达到一个阈值时,芯片的解码速度会大幅下降,因此需要探测导致芯片解码速度下降的送帧速度阈值。
85.在本技术的一个实施例中,在进行动态能力探测时,首先需要获取与当前场景中的图像帧所对应的参数配置,然后根据该参数配置获取具有相同参数配置的测试码流,最后再基于该测试码流进行探测。
86.图5示意性示出了获取最大送帧速度的流程示意图,如图5所示,在步骤s501中,获取与当前场景中的图像帧对应的参数,该参数具体包括设定帧率等参数;在步骤s502中,根据该参数获取具有相同参数的测试码流;在步骤s503中,以设定帧率将测试码流输入至解码端,以获取基准输出帧率和基准单帧平均解码延时;在步骤s504中,根据设定帧率和第一系数确定第一帧率阈值,并将基准输出帧率与第一帧率阈值进行比对;在步骤s505中,当基准输出帧率小于第一帧率阈值时,将设定帧率作为所述最大送帧速度;在步骤s506中,当所述基准输出帧率大于或等于所述第一帧率阈值时,增大设定频率以获取送帧速度;在步骤s507中,以送帧速度将测试码流输入至解码端,以获取输出帧率和单帧平均解码延时;在步骤s508中,根据送帧速度、基准单帧平均解码延时、输出帧率和单帧平均解码延时确定最大送帧速度。
87.其中,步骤s502中的测试码流可以为服务器实时传入的与当前视频具有相同分辨率、设定帧率等参数的编码码流。
88.步骤s504中,第一系数具体可以是区间[0.85,0.95]中的任意值,例如可以是0.9,也就是说,当基准输出帧率小于设定帧率的90%时,则认为当前的送帧速度为最大送帧速度。这是因为在正常情况下,解码端的输出帧率与设定帧率是接近的,但是在网络拥塞的情况下,解码端的性能会下降,导致解码端的输出帧率有所下降,如果输出帧率下降至送帧速度的一定比例以下时,说明解码端的解码性能已经开始变弱,因此可以将该条件下的送帧速度作为最大送帧速度,将缓冲池中的frame包发送至解码端进行解码,在保证解码端的解码性能的前提下以较高的效率进行解码,以缓解网络拥塞。
[0089]
步骤s503和s507中所获取的基准输出帧率、基准单帧平均解码延时、输出帧率和
单帧平均解码延时可以是通过统计预设时长的解码结果得到的,例如可以通过编码码流解码2s的解码结果得到,当然还可以是通过统计对编码码流解码其它时长的解码结果得到,本技术实施例对此不作具体限定。
[0090]
步骤s506中,在确定送帧速度时,可以按照固定幅值增大设定帧率或者按照随机幅值增大设定帧率,例如设定帧率为60fps时,可以以10fps、20fps、30fps等固定幅值增大设定帧率,还可以以不同的幅值度增大设定帧率。
[0091]
在本技术的一个实施例中,当基准输出帧率大于或等于第一帧率阈值时,可以根据增大后的送帧速度、基准单帧平均解码延时、与增大后的送帧速度对应的输出帧率和单帧平均解码延时确定最大送帧速度,具体地,可以从三个层面进行判断以获取最大送帧速度,其中,第一个层面是根据输出帧率和增大后的送帧速度确定最大送帧速度,第二个层面是根据基准单帧平均解码延时和单帧平均解码延时确定最大送帧速度,第三个层面是根据增大后的送帧速度确定最大送帧速度。
[0092]
在本技术的一个实施例中,在根据上述三个层面确定最大送帧速度时,三个层面的处理逻辑是相互关联的,例如,可以先从第一个层面确定最大送帧速度,如果无法根据第一个层面确定得到最大送帧速度,则从第二个层面确定最大送帧速度;相应地,如果无法根据第二个层面确定得到最大送帧速度,则从第三个层面确定最大送帧速度。进一步地,当根据第三个层面也无法确定得到最大送帧速度时,则对当前的送帧速度进行更新,也就是在当前的送帧速度的基础上根据固定增幅或者随机增幅再增大当前的送帧速度,以获取更新送帧速度,进而根据更新送帧速度确定最大送帧速度,循环上述流程,直至获取最大送帧速度。
[0093]
值得说明的是,虽然上述实施例中是依次根据第一个层面、第二个层面和第三个层面的判断流程来确定最大送帧速度的,但是本技术实施例包括但不限于上述的判断流程,也就是说,在本技术的实施例中,可以以任意顺序根据第一个层面、第二个层面和第三个层面的处理逻辑来确定最大送帧速度,例如可以先根据第二个层面的判断结果确定是否采用第一个层面的处理逻辑确定最大送帧速度,并根据第一个层面的判断结果确定是否采用第三个层面的处理逻辑确定最大送帧速度,等等。相应地,如果根据最后一次判断结果仍无法确定最大送帧速度时,则重新更新送帧速度,并根据更新后的送帧速度以及相应的参数确定最大送帧速度,直至获取最大送帧速度。
[0094]
接下来,以依次执行第一个层面、第二个层面和第三个层面的处理逻辑为例,对本技术实施例中根据三个不同层面确定最大送帧速度的流程进行详细说明。
[0095]
图6示意性示出了根据输出帧率和送帧速度确定最大送帧速度的流程示意图,如图6所示,在步骤s601中,根据所述设定帧率和第二系数确定第二帧率阈值,并将所述输出帧率与所述第二帧率阈值进行比对;在步骤s602中,当所述输出帧率小于所述第二帧率阈值时,将所述送帧速度作为所述最大送帧速度;在步骤s603中,当所述输出帧率大于或等于所述第一帧率阈值时,根据所述送帧速度、所述基准单帧平均解码延时和所述单帧平均解码延时确定最大送帧速度。
[0096]
其中,第二系数也是位于区间[0.85,0.95]中的任意值,可以与第一系数相同,也可以不同,本技术实施例对此不作具体限定。
[0097]
图7示意性示出了根据基准单帧平均解码延时和单帧平均解码延时确定最大送帧
速度的流程示意图,如图7所示,在步骤s701中,将所述基准单帧平均解码延时和所述单帧平均解码延时进行比对;在步骤s702中,当所述单帧平均解码延时大于所述基准单帧平均解码延时时,将所述送帧速度作为所述最大送帧速度;在步骤s703中,当所述单帧平均解码延时小于或等于所述基准单帧平均解码延时时,根据所述送帧速度确定最大送帧速度。
[0098]
基准单帧平均解码延时是以设定帧率将测试码流传入解码端进行解码得到的,当在设定帧率的基础上通过增大帧率的方式得到当前的送帧速度,并以当前的送帧速度将测试码流传入解码端解码得到的单帧平均解码延时大于基准单帧平均解码延时时,说明对应当前的送帧速度,解码端仍具有较好的解码性能,因此可以将当前的送帧速度作为最大送帧速度。
[0099]
图8示意性示出了根据送帧速度确定最大送帧速度的流程示意图,如图8所示,在步骤s801中,将所述送帧速度与帧率阈值进行比对;在步骤s802中,当所述送帧速度大于所述帧率阈值时,将所述送帧速度作为所述最大送帧速度;在步骤s803中,当所述送帧速度小于或等于所述帧率阈值时,更新所述送帧速度,并根据更新送帧速度将所述测试码流输入至所述解码端进行解码,以获取更新输出帧率和更新单帧平均解码延时;在步骤s804中,根据所述更新送帧速度、所述基准单帧平均解码延时、所述更新输出帧率和所述更新单帧平均解码延时确定所述最大送帧速度。
[0100]
其中,帧率阈值可以是与解码端对应的最大输出帧率,例如在分辨率为1080p时,解码端的最大输出帧率为240fps,那么当送帧速度提高到240fps以上时,直接可以将其认定为最大送帧速度。解码端的最大输出帧率随分辨率的不同而不同,因此在确定帧率阈值时,可以根据当前场景中视频对应的分辨率确定与解码端对应的最大输出帧率作为帧率阈值,进而根据所确定的帧率阈值对送帧速度进行判断。
[0101]
在本技术的一个实施例中,在确定最大送帧速度后,可以将该最大送帧速度设定为缓冲池的最大释放速度,当网络传送数据包的速度大于缓冲池的最大送帧速度时,缓冲池便以最大释放速度将缓存的frame包送入解码端中,直至网络拥塞现象消失。在缓冲池将缓存的frame包传送至解码端时,是按照frame包的索引号将frame包按序发送的,保证了解码端能够按照顺序对frame包对应的码流进行解码,以获取其中的图像帧进行渲染和显示。
[0102]
在本技术的一个实施例中,如果网络拥塞现象严重,缓冲池的所有空间都被占满时,可以通过清空缓冲池的方式,缓解网络拥塞。
[0103]
在本技术的一个实施例中,对网络拥塞程度的判断可以从两方面来判断,分别是根据网络拥塞时长和等待申请缓冲池存储空间的图像帧数量进行判断,当网络拥塞时长大于预设时长,且等待申请缓冲池存储空间的图像帧数量大于预设阈值时,则清空缓冲池以缓解网络拥塞。其中,预设时长和预设阈值可以根据实际需要设定,例如可以将预设时长设置为5s,预设阈值设置为30帧,也就是说,当网络拥塞时长大于5s,且等待申请缓冲池存储空间的图像帧数量大于30帧时,可以通过清空缓冲池的方式缓解网络拥塞。
[0104]
在本技术的一个实施例中,在清空缓冲池时可以根据缓冲池中是否存在idr帧而采用不同的清空方式。具体地,可以检测缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对缓冲池进行清空。当缓冲池中存储的frame包中存在idr帧时,获取该idr帧对应的目标索引号,并将缓冲池中缓存的索引号小于该目标索引号的所有frame包丢弃掉,同时直接将该idr帧对应的frame包送入解码端中;当缓冲池中存储的frame包中
不存在idr帧时,客户端向服务器发送idr帧获取请求,并在接收到服务器响应该idr帧获取请求所发送的idr帧时,清空缓冲池中所有的frame包,并将接收到的idr帧对应的frame包发送至解码端。
[0105]
通过清空缓冲池中的frame包可以增大缓冲池中的可用空间,进而可以缓存更多的frame包,减缓网络拥塞,虽然将缓冲池中的frame包清空对视频的展示效果有些许影响,但是相对于网络拥塞造成的卡顿,清空缓冲池造成的影响可以忽略不计。
[0106]
在本技术的一个实施例中,通过缓解网络拥塞,可以保证网络顺畅,这样可以保证解码端能够顺利消化缓冲池发送的frame包,进而缓冲池也不会囤积frame包,当客户端接收到网络传送的frame包时,可以直接送入到解码端中,这时缓冲池就相当于一个透传的中间层,不需要对frame包做任何的处理。
[0107]
本技术实施例中的基于缓冲池的图像解码方法可以应用于任意涉及到图像帧处理的场景,例如云游戏、视频通话、直播、视频播放,等场景。由于云游戏、视频通话、直播、视频播放等场景对图像的顺畅度有较高的要求,如果发生网络拥塞会导致图像画面卡顿,严重影响玩家、通话方、视频观看者的体验,因此可以采用本技术实施例中的基于缓冲池的图像解码方法对接收到的数据包进行缓存并解码,以保证游戏、视频的画面质量和顺畅度。
[0108]
接下来,以云游戏场景为例,对本技术实施例中的基于缓冲池的图像解码方法进行具体说明。
[0109]
云游戏是在远程服务器上运行的游戏,客户端不需要下载、安装,也不需要考虑终端配置,只要有网络,就能玩运算量非常大的游戏。从数据传输层面而言,由远程服务器对构成云游戏各图像帧的图像信息进行编码,以形成与各图像帧对应的数据包,并将数据包通过网络发送至客户端,客户端在接收到数据包后,将其拆分为frame包缓存至缓冲池中,并以一定的送帧速度发送至解码端中进行解码,以获取相应地图像信息,最后根据获取的图像信息进行渲染,即可在客户端的显示界面中看到清晰流畅的画面。
[0110]
客户端接收数据包,将其拆分为frame包并缓存至缓冲池中时,具体可以通过提取数据包中的nalu头以获取nalu类型,然后根据数据包中多个nalu单元所包含的rbsp数据拼接形成与图像帧对应的码流,最后根据nalu类型对码流进行nalu解析,以获取与图像帧对应的帧信息,帧信息具体可以包括帧类型、时间戳、帧大小和索引号index,进一步地,还可以包括分辨率等信息;接着可以根据帧信息和帧的内存地址构建frame对象,并基于frame对象向缓冲池申请存储空间,缓冲池被划分为已申请未使用空间、未申请未使用空间、已使用空间三部分,当未申请未使用空间的大小大于或等于图像帧对应的frame包的大小时,根据frame包的大小将未申请未使用空间中的一部分或者全部作为申请空间分配给frame包,接着检测已申请未使用空间中剩余空间的大小是否大于或等于frame包的大小,如果剩余空间的大小大于或等于frame包的大小,则将frame包存储于已申请未使用空间中,释放未申请未使用空间,如果剩余空间的大小小于frame包的大小,则等待已使用空间释放,直至已申请未使用空间中剩余空间的大小大于或等于frame包的大小;当未申请未使用空间的大小小于frame包的大小时,等待已使用空间释放,直至未申请未使用空间的大小大于或等于frame包的大小。其中frame包是根据与图像帧对应的码流和帧信息构建的。
[0111]
当网络拥塞时,缓冲池中缓存有多个frame包,为了缓解网络拥塞,提高解码端的解码性能,缓冲池可以以最大送帧速度将缓存的frame包送入到解码端中进行解码。该最大
送帧速度即为缓冲池的最大释放速度,具体可以通过对解码端的负荷能力进行动态能力探测,并基于动态能力调整得到。具体地,可以获取与当前云游戏对应的分辨率和设定帧率等配置参数;接着可以从服务器端实时获取一段具有相同配置参数的测试码流,通过将该测试码流以设定帧率输入至解码端进行解码,统计该测试码流解码2s的输出帧率和单帧平均解码延时作为基准输出帧率和基准单帧平均解码延时;然后将基准输出帧率与第一帧率阈值进行比对,该第一帧率阈值为设定帧率与第一系数的成绩,该第一系数为区间[0.85,0.95]中的任意值,当基准输出帧率小于第一帧率阈值时,将设定帧率作为最大送帧速度,当基准输出帧率大于或等于第一帧率阈值时,增大设定帧率以获取送帧速度,并以该送帧速度将测试码流输入至解码端进行解码,以统计该测试码流解码2s的输出帧率和单帧平均解码延时,其中在增大设定帧率时可以根据固定增幅或者随机增幅增大;最后通过将输出帧率与第二系数作用后的送帧速度进行比对、将单帧平均解码延时和基准单帧平均解码延时进行比对、以及将送帧速度与帧率阈值进行比对,以根据比对结果确定最大送帧速率。其中,第二系数也是区间[0.85,0.95]中的任意值,与第一系数可以相同,也可以不同。
[0112]
在确定最大送帧速度后,将缓冲池中的frame包以该最大送帧速度发送至解码端进行解码,并根据解码得到的图像数据进行渲染以形成云游戏界面,由于缓冲池能够在网络拥塞时缓存部分frame包,并通过稳定的最大送帧速度将frame包送入到解码端中,因此能够减缓网络拥塞所导致的解码端因工作负荷过高引起的工作效率下降,减小了编码延时,提高了云游戏的游戏体验。
[0113]
进一步地,当网络拥塞时长大于预设时长并且等待申请缓冲池存储空间的图像帧数量大于预设阈值时,可以对缓冲池进行清空,以减轻网络拥塞造成的解码压力。在对缓冲池进行清空时,若缓冲池存储的frame包中包含idr帧,则将索引号小于该idr帧对应的目标索引号的frame包丢弃,直接将包含idr帧的frame包发送至解码端进行解码,若缓冲池存储的frame包中不包含idr帧时,则向服务器请求新的idr帧,在接收到包含idr帧的frame包时清空缓冲池,并将该frame包发送至解码端进行解码。
[0114]
本技术中的基于缓冲池的图像解码方法,在获取编码码流后,根据编码码流构建对应于单帧图像的帧frame对象,并基于frame对象向缓冲池发送指令以申请缓冲池中的存储空间,在成功申请到缓冲池中的存储空间后,将包含码流和帧信息的frame包存储于缓冲池中,然后将缓冲池中存储的frame包以最大送帧速度输入至解码端,该最大送帧速度是根据与单帧图像具有相同参数的测试码流对解码端进行动态能力探测后,基于该动态能力调整得到的。本技术一方面能够在网络拥塞时,将网络传入的数据包缓存在缓冲池中,避免大量数据对解码端进行冲击,导致解码端性能下降;另一方面能够通过动态能力探测解码端的负荷能力获得使解码端解码性能最高的最大送帧速度,在以该最大送帧速度将缓冲池中的frame包输入到解码端时,不但能够减缓网络拥塞,还能实现流量稳定控制的效果,提高了解码端的解码性能。
[0115]
应当注意,尽管在附图中以特定顺序描述了本技术中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
[0116]
以下介绍本技术的装置实施例,可以用于执行本技术上述实施例中的基于缓冲池
的图像解码方法。图9示意性地示出了本技术实施例提供的基于缓冲池的图像解码装置的结构框图。如图9所示,基于缓冲池的图像解码装置900包括:对象构建模块910、空间申请模块920和解码模块930,具体地:
[0117]
对象构建模块910,用于获取编码码流,基于所述编码码流构建对应于单帧图像的帧frame对象;空间申请模块920,用于基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;解码模块930,用于将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。
[0118]
在本技术的一些实施例中,基于以上技术方案,所述对象构建模块910配置为:对所述编码码流进行解析,以获取与所述单帧图像对应的帧信息,所述帧信息包括帧类型、时间戳、帧大小和序列号;根据所述帧信息和与所述单帧图像对应的内存地址构建所述frame对象。
[0119]
在本技术的一些实施例中,所述缓冲池包括:未申请未使用空间、已申请未使用空间和已使用空间;所述frame对象包括与所述单帧图像对应的帧信息和内存地址;基于以上技术方案,所述空间申请模块920配置为:基于所述内存地址向所述缓冲池发送存储空间申请指令,并根据所述帧信息中的帧大小和所述帧信息的大小确定所述frame包的大小;在所述frame包的大小小于或等于所述未申请未使用空间的大小时,根据所述frame包的大小获取所述未申请未使用空间中的空间作为申请空间;以及,在所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小时,将所述frame包存储于所述已申请未使用空间中。
[0120]
在本技术的一些实施例中,基于以上技术方案,所述空间申请模块920还配置为:在所述frame包的大小大于所述未申请未使用空间时,等待所述已使用空间释放,直至所述未申请未使用空间的大小大于或等于所述frame包的大小;以及,在所述已申请未使用空间中剩余空间的大小小于所述frame包的大小时,等待所述已使用空间释放,直至所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小。
[0121]
在本技术的一些实施例中,基于以上技术方案,所述空间申请模块920还配置为:根据所述frame对象中的时间戳和/或索引号将所述frame包按序存储于所述缓冲池中。
[0122]
在本技术的一些实施例中,所述参数包括设定帧率;基于以上技术方案,所述解码模块930包括:第一输入单元,用于将所述测试码流以所述设定帧率输入至所述解码端进行解码,以获取基准输出帧率和基准单帧平均解码延时;第一比对单元,用于根据所述设定帧率和第一系数确定第一帧率阈值,并将所述基准输出帧率与所述第一帧率阈值进行比对;第一确定单元,用于当所述基准输出帧率小于所述第一帧率阈值时,将所述设定帧率作为所述最大送帧速度;第二输入单元,用于当所述基准输出帧率大于或等于所述第一帧率阈值时,增大所述设定帧率以获取送帧速度,并将所述测试码流以所述送帧速度输入至所述解码端进行解码,以获取输出帧率和单帧平均解码延时;第一计算单元,用于根据所述送帧速度、所述基准单帧平均解码延时、所述输出帧率和所述单帧平均解码延时确定最大送帧速度。
[0123]
在本技术的一些实施例中,基于以上技术方案,所述第一计算单元包括:第二比对单元,用于根据所述送帧速度和第二系数确定第二帧率阈值,并将所述输出帧率与所述第
二帧率阈值进行比对;第二确定单元,用于当所述输出帧率小于所述第二帧率阈值时,将所述送帧速度作为所述最大送帧速度;第二计算单元,用于当所述输出帧率大于或等于所述第二帧率阈值时,根据所述送帧速度、所述基准单帧平均解码延时和所述单帧平均解码延时确定最大送帧速度。
[0124]
在本技术的一些实施例中,基于以上技术方案,所述第二计算单元包括:第三比对单元,用于将所述基准单帧平均解码延时和所述单帧平均解码延时进行比对;第三确定单元,用于当所述单帧平均解码延时大于所述基准单帧平均解码延时时,将所述送帧速度作为所述最大送帧速度;第四计算单元,用于当所述单帧平均解码延时小于或等于所述基准单帧平均解码延时时,根据所述送帧速度确定最大送帧速度。
[0125]
在本技术的一些实施例中,基于以上技术方案,所述第三确定单元包括:第四比对单元,用于将所述送帧速度与帧率阈值进行比对;第四确定单元,用于当所述送帧速度大于所述帧率阈值时,将所述送帧速度作为所述最大送帧速度;更新单元,用于当所述送帧速度小于或等于所述帧率阈值时,更新所述送帧速度,并以更新送帧速度将所述测试码流输入至所述解码端进行解码,以获取更新输出帧率和更新单帧平均解码延时;第五计算单元,用于根据所述更新送帧速度、所述基准单帧平均解码延时、所述更新输出帧率和所述更新单帧平均解码延时确定所述最大送帧速度。
[0126]
在本技术的一些实施例中,基于以上技术方案,所述基于缓冲池的图像解码装置900还包括:获取模块,用于获取网络拥塞时长和等待申请缓冲池存储空间的图像帧数量;清空模块,用于当所述网络拥塞时长大于预设时长,且所述图像帧数量大于预设阈值时,检测所述缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对所述缓冲池进行清空。
[0127]
在本技术的一些实施例中,基于以上技术方案,所述清空模块配置为:当所述缓冲池中存在所述idr帧时,获取与所述idr帧对应的目标索引号;将所述缓冲池中索引号小于所述目标索引号的frame包丢弃,同时将所述idr帧对应的frame包由所述缓冲池发送至所述解码端。
[0128]
在本技术的一些实施例中,基于以上技术方案,所述清空模块配置为:当所述缓冲池中不存在所述idr帧时,向服务器发送idr帧获取请求;接收所述服务器响应所述idr帧获取请求发送的idr帧,清空所述缓冲池,并将包含所述idr帧的frame包由所述缓冲池发送至所述解码端。
[0129]
本技术各实施例中提供的基于缓冲池的图像解码装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
[0130]
图10示意性地示出了用于实现本技术实施例的电子设备的计算机系统结构框图,该电子设备可以是如图1中所示的客户端101和服务器102。
[0131]
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
[0132]
如图10所示,计算机系统1000包括中央处理器1001(central processing unit,cpu),其可以根据存储在只读存储器1002(read-only memory,rom)中的程序或者从存储部分1008加载到随机访问存储器1003(random access memory,ram)中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有系统操作所需的各种程序和数据。中
央处理器1001、在只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005(input/output接口,即i/o接口)也连接至总线1004。
[0133]
在一些实施例中,以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
[0134]
特别地,根据本技术的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本技术的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本技术的系统中限定的各种功能。
[0135]
需要说明的是,本技术实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读介质或者是上述两者的任意组合。计算机可读介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、闪存、光纤、便携式紧凑磁盘只读存储器(compact disc read-only memory,cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
[0136]
附图中的流程图和框图,图示了按照本技术各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0137]
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本技术的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0138]
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本技术实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台电子设备执行根据本技术实施方式的方法。
[0139]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。
[0140]
应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。

技术特征:


1.一种基于缓冲池的图像解码方法,其特征在于,应用于客户端,包括:获取编码码流,基于所述编码码流构建对应于单帧图像的帧frame对象;基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。2.根据权利要求1所述的方法,其特征在于,所述基于所述编码码流构建对应于单帧图像的帧frame对象,包括:对所述编码码流进行解析,以获取与所述单帧图像对应的帧信息,所述帧信息包括帧类型、时间戳、帧大小和序列号;根据所述帧信息和与所述单帧图像对应的内存地址构建所述frame对象。3.根据权利要求1所述的方法,其特征在于,所述缓冲池包括:未申请未使用空间、已申请未使用空间和已使用空间;所述frame对象包括与所述单帧图像对应的帧信息和内存地址;所述基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中,包括:基于所述内存地址向所述缓冲池发送存储空间申请指令,并根据所述帧信息中的帧大小和所述帧信息的大小确定所述frame包的大小;在所述frame包的大小小于或等于所述未申请未使用空间的大小时,根据所述frame包的大小获取所述未申请未使用空间中的空间作为申请空间;以及在所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小时,将所述frame包存储于所述已申请未使用空间中。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:在所述frame包的大小大于所述未申请未使用空间时,等待所述已使用空间释放,直至所述未申请未使用空间的大小大于或等于所述frame包的大小;以及在所述已申请未使用空间中剩余空间的大小小于所述frame包的大小时,等待所述已使用空间释放,直至所述已申请未使用空间中剩余空间的大小大于或等于所述frame包的大小。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:根据所述frame对象中的时间戳和/或索引号将所接收到的frame包按序存储于所述缓冲池中。6.根据权利要求1所述的方法,其特征在于,所述参数包括设定帧率;所述根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到最大送帧速度,包括:将所述测试码流以所述设定帧率输入至所述解码端进行解码,以获取基准输出帧率和基准单帧平均解码延时;根据所述设定帧率和第一系数确定第一帧率阈值,并将所述基准输出帧率与所述第一帧率阈值进行比对;
当所述基准输出帧率小于所述第一帧率阈值时,将所述设定帧率作为所述最大送帧速度;当所述基准输出帧率大于或等于所述第一帧率阈值时,增大所述设定帧率以获取送帧速度,并将所述测试码流以所述送帧速度输入至所述解码端进行解码,以获取输出帧率和单帧平均解码延时;根据所述送帧速度、所述基准单帧平均解码延时、所述输出帧率和所述单帧平均解码延时确定最大送帧速度。7.根据权利要求6所述的方法,其特征在于,所述根据所述送帧速度、所述基准单帧平均解码延时、所述输出帧率和所述单帧平均解码延时确定最大送帧速度,包括:根据所述送帧速度和第二系数确定第二帧率阈值,并将所述输出帧率与所述第二帧率阈值进行比对;当所述输出帧率小于所述第二帧率阈值时,将所述送帧速度作为所述最大送帧速度;当所述输出帧率大于或等于所述第二帧率阈值时,根据所述送帧速度、所述基准单帧平均解码延时和所述单帧平均解码延时确定最大送帧速度。8.根据权利要求7所述的方法,其特征在于,所述根据所述送帧速度、所述基准单帧平均解码延时和所述单帧平均解码延时确定最大送帧速度,包括:将所述基准单帧平均解码延时和所述单帧平均解码延时进行比对;当所述基准单帧平均解码延时大于所述单帧平均解码延时时,将所述送帧速度作为所述最大送帧速度;当所述基准单帧平均解码延时小于或等于所述单帧平均解码延时时,根据所述送帧速度确定最大送帧速度。9.根据权利要求8所述的方法,其特征在于,所述根据所述送帧速度确定最大送帧速度,包括:将所述送帧速度与帧率阈值进行比对;当所述送帧速度大于所述帧率阈值时,将所述送帧速度作为所述最大送帧速度;当所述送帧速度小于或等于所述帧率阈值时,更新所述送帧速度,并以更新送帧速度将所述测试码流输入至所述解码端进行解码,以获取更新输出帧率和更新单帧平均解码延时;根据所述更新送帧速度、所述基准单帧平均解码延时、所述更新输出帧率和所述更新单帧平均解码延时确定所述最大送帧速度。10.根据权利要求1-9任一项所述的方法,其特征在于,所述方法还包括:获取网络拥塞时长和等待申请缓冲池存储空间的图像帧数量;当所述网络拥塞时长大于预设时长,且所述图像帧数量大于预设阈值时,检测所述缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对所述缓冲池进行清空。11.根据权利要求10所述的方法,其特征在于,所述检测所述缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对所述缓冲池进行清空,包括:当所述缓冲池中存在所述idr帧时,获取与所述idr帧对应的目标索引号;将所述缓冲池中索引号小于所述目标索引号的frame包丢弃,同时将所述idr帧对应的
frame包由所述缓冲池发送至所述解码端。12.根据权利要求10所述的方法,其特征在于,所述检测所述缓冲池中存储的frame包中是否存在立即刷新图像idr帧,并根据检测结果对所述缓冲池进行清空,包括:当所述缓冲池中不存在所述idr帧时,向服务器发送idr帧获取请求;接收所述服务器响应所述idr帧获取请求发送的idr帧,清空所述缓冲池,并将包含所述idr帧的frame包由所述缓冲池发送至所述解码端。13.一种基于缓冲池的图像解码装置,其特征在于,配置于客户端,包括:对象构建模块,用于获取编码码流,基于所述编码码流构建对应于单帧图像的帧frame对象;空间申请模块,用于基于所述frame对象申请缓冲池中的存储空间,并将与所述单帧图像对应的frame包存储于所述缓冲池中;解码模块,用于将所述frame包以最大送帧速度输入至解码端,其中所述最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。14.一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现权利要求1至12中任意一项所述的基于缓冲池的图像解码方法。15.一种电子设备,其特征在于,包括:处理器;以及存储器,用于存储指令;其中,所述处理器执行所述存储器存储的指令用于实现权利要求1至12中任意一项所述的基于缓冲池的图像解码方法。

技术总结


本申请属于云计算技术领域,涉及一种基于缓冲池的图像解码方法、装置、计算机可读介质及电子设备。该方法应用于客户端,包括:获取编码码流,基于编码码流构建对应于单帧图像的帧Frame对象;基于Frame对象申请缓冲池中的存储空间,并将与单帧图像对应的Frame包存储于缓冲池中;将Frame包以最大送帧速度输入至解码端,其中最大送帧速度是根据与所述单帧图像具有相同参数的测试码流对所述解码端进行动态能力探测后,基于所述动态能力调整得到的。本申请能够通过缓冲池缓存数据包,并以最大送帧速度将缓冲池中的Frame包输入到解码端中,避免了解码端性能下降、减缓了网络拥塞,还能实现流量稳定控制的效果,提高了解码端的解码性能。能。能。


技术研发人员:

黄永铖 陈思佳 曹洪彬 曹健 杨小祥 宋美佳 张佳

受保护的技术使用者:

腾讯科技(深圳)有限公司

技术研发日:

2022.08.26

技术公布日:

2022/11/22

本文发布于:2024-09-20 17:52:07,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/2016.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   帧速   图像   空间
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议