数据编码方法及装置与流程

文档序号:35622726发布日期:2023-10-05 18:55阅读:26来源:国知局
数据编码方法及装置与流程

本公开涉及数据处理领域,尤其涉及一种数据编码方法及装置。


背景技术:

1、当前,云桌面系统的应用越来越广泛,可存在linux桌面场景中,例如ubuntu系统、redhat系统等有图形界面的linux系统。

2、在现有linux系统的桌面数据采集过程中,调桌面采集均属于软采(即,软件采集),之后的编码也是软编(即,软件编码,利用中央处理器和内存进行编码),这种软采、软编的缺点之一即为当中央处理器和内存的其中之一或均达到瓶颈之后,整体的采集流程的性能都会下降,从而导致整体桌面采集帧率低。

3、因此,本公开主要解决由于ubuntu系统、redhat系统等带图形界面的linux系统下桌面图像的采集及编码效率低,从而导致的整体桌面帧率无法提高的问题。


技术实现思路

1、本公开实施例提供一种数据编码方法及装置,能够提升整体桌面采集帧率,以及桌面图像的采集及编码效率,改善用户的体验。所述技术方案如下:

2、根据本公开实施例的第一方面,提供一种数据编码方法,该方法包括:初始化目标编码参数,所述目标编码参数用于通过图像处理器获取待编码数据;创建目标编码器,所述目标编码器用于通过所述图像处理器进行所述待编码数据的编码;通过所述目标编码器,根据所述目标编码参数获取所述待编码数据并进行编码。

3、其中,目标编码参数用于通过图像处理器(graphics processing unit,gpu)获取待编码数据,目标编码器用于通过gpu进行待编码数据的编码,作为一种示例,目标编码器可以为nvencode编码器。

4、示例地,初始化目标编码参数可以包括初始化glx参数、初始化nvfbc参数,以及创建capturesession参数。其中,glx(opengl extension to the x window system),为linux用于提供gl(即,图形库,graphics library)与窗口交互、窗口管理等的一组应用程序接口(application programming interface,api);nvfbc为一种利用显卡缓存录像视频的功能。

5、举例而言,初始化glx参数,可以通过xopendisplay创建display对象,创建一个glxcontext(即,glx上下文),以及创建glxpixmap并设置为当前,得到默认显示器的glxfbconfig配置以及glxcontext(即,glx上下文)。其中,glx(opengl extension to thex window system),为linux用于提供gl(即,图形库,graphics library)与窗口交互、窗口管理等的一组应用程序接口(application programming interface,api)。

6、以及,初始化nvfbc参数,可以通过上述得到的glxfbconfig配置和glxconfig创建nvfbchandle,并得到nvfbchandle句柄。其中,nvfbc为一种利用显卡缓存录像视频的功能。

7、此外,创建capturesession(捕捉对话)参数,可以构建captureparams(捕捉参数),通过captureparams创建capturesession,并设置nvfbctoglsetup(directx到opengl的翻译层),得到默认显示器的桌面分辨率。

8、基于上述方案,通过硬件采集与硬件编码(即,通过图像处理器进行待编码数据的采集与编码)的方式,可以提升整体桌面采集帧率,以及桌面图像的采集及编码效率,改善用户的体验。例如,改善现有技术中处理帧率无法提升,只能采集处理二十余帧的情况。

9、在一些实施例中,所述通过所述目标编码器,根据所述目标编码参数获取所述待编码数据并进行编码,包括:判断所述目标编码参数是否完成初始化,以及所述目标编码器是否完成创建;在所述目标编码参数完成初始化,以及所述目标编码器完成创建的情况下,通过显卡缓存获取所述待编码数据;通过所述目标编码器,根据所述目标编码参数对所述待编码数据进行编码。

10、具体地,首先,判断目标编码参数是否完成初始化,以及目标编码器是否完成创建;其次,在目标编码参数完成初始化,以及目标编码器完成创建的情况下,通过显卡缓存获取待编码数据,在目标编码参数未完成初始化,和/或目标编码器未完成创建的情况下,初始化目标编码参数,和/或创建目标编码器,直至目标编码参数完成初始化,以及目标编码器完成创建;最后,通过目标编码器,根据目标编码参数对待编码数据进行编码,例如,将待编码数据编码为h264/h265。

11、在一些实施例中,所述在所述目标编码参数完成初始化,以及所述目标编码器完成创建的情况下,通过显卡缓存获取所述待编码数据,包括:在所述目标编码参数完成初始化,以及目标编码器完成创建的情况下的情况下,创建目标编码指令,在所述目标编码指令的一个周期内,通过所述显卡缓存获取原始数据;将原始数据的像素格式转化为目标像素格式,得到所述待编码数据。

12、举例而言,在目标编码参数完成初始化,以及目标编码器完成创建的情况下,可以创建目标编码指令,该目标编码指令用于控制获取原始数据的流程。在目标编码指令的一个周期内可以通过显卡缓存(即,nvfbc的方式)获取原始数据(例如,当前桌面图像数据),并将原始数据(例如,当前桌面图像数据)的像素格式转化为目标像素格式(例如,nv12),得到待编码数据,输送至目标编码器。

13、在一些实施例中,所述目标编码指令包括开始工作状态、暂停工作状态,以及终止工作状态。

14、具体地,目标编码指令可以包括开始工作状态(start)、暂停工作状态(pause),以及终止工作状态(stop),用于控制获取原始数据的流程。

15、在一些实施例中,所述创建目标编码器,包括:创建目标会话、设置预设参数、初始化编码参数,以及创建目标缓存区。

16、举例而言,包括创建目标会话可以为创建encodesession(编码会话),即通过构建sessionparams(会话参数),调用nvencopenencodesession()以创建encodesession(编码会话)。

17、其次,设置预设参数,可以通过nvencgetencodepresettconfig设置目标编码器的预设参数,包括码流的清晰度,以及视频编码格式为h264或h265等。

18、此外,初始化编码参数,可以为构建目标编码器initparams(初始参数),包括帧率、码流大小、原图尺寸、编码尺寸等参数,并通过nvencinitializeencoder()初始化目标编码器。

19、最后,创建目标缓存区,可以通过接口createbitstreambuffer(),创建目标缓存区,用于接收编码器编的码流。其中,作为一种示例,目标缓存区可以为bitstreambuffer(即,比特流缓冲区)。

20、根据本公开实施例的第二方面,提供一种数据编码装置,包括存储器和处理器。存储器拥有存储程序。当程序在所述处理器中执行时,处理器用于:初始化目标编码参数,所述目标编码参数用于通过图像处理器获取待编码数据;创建目标编码器,所述目标编码器用于通过所述图像处理器进行所述待编码数据的编码;通过所述目标编码器,根据所述目标编码参数获取所述待编码数据并进行编码。

21、其中,目标编码参数用于通过gpu获取待编码数据,目标编码器用于通过gpu进行待编码数据的编码,作为一种示例,目标编码器可以为nvencode编码器。

22、示例地,初始化目标编码参数可以包括初始化glx参数、初始化nvfbc参数,以及创建capturesession参数。其中,glx(opengl extension to the x window system),为linux用于提供gl(即,图形库,graphics library)与窗口交互、窗口管理等的一组应用程序接口(application programming interface,api);nvfbc为一种利用显卡缓存录像视频的功能。

23、举例而言,初始化glx参数,可以通过xopendisplay创建display对象,创建一个glxcontext(即,glx上下文),以及创建glxpixmap并设置为当前,得到默认显示器的glxfbconfig配置以及glxcontext(即,glx上下文)。其中,glx(opengl extension to thex window system),为linux用于提供gl(即,图形库,graphics library)与窗口交互、窗口管理等的一组应用程序接口(application programming interface,api)。

24、以及,初始化nvfbc参数,可以通过上述得到的glxfbconfig配置和glxconfig创建nvfbchandle,并得到nvfbchandle句柄。其中,nvfbc为一种利用显卡缓存录像视频的功能。

25、此外,创建capturesession(捕捉对话)参数,可以构建captureparams(捕捉参数),通过captureparams创建capturesession,并设置nvfbctoglsetup(directx到opengl的翻译层),得到默认显示器的桌面分辨率。

26、基于上述方案,通过硬件采集与硬件编码(即,通过图像处理器进行待编码数据的采集与编码)的方式,可以提升整体桌面采集帧率,以及桌面图像的采集及编码效率,改善用户的体验。例如,改善现有技术中处理帧率无法提升,只能采集处理二十余帧的情况。

27、在一些实施例中,所述处理器具体用于,判断所述目标编码参数是否完成初始化,以及所述目标编码器是否完成创建;在所述目标编码参数完成初始化,以及所述目标编码器完成创建的情况下,通过显卡缓存获取所述待编码数据;通过所述目标编码器,根据所述目标编码参数对所述待编码数据进行编码。

28、具体地,首先,判断目标编码参数是否完成初始化,以及目标编码器是否完成创建;其次,在目标编码参数完成初始化,以及目标编码器完成创建的情况下,通过显卡缓存获取待编码数据,在目标编码参数未完成初始化,和/或目标编码器未完成创建的情况下,初始化目标编码参数,和/或创建目标编码器,直至目标编码参数完成初始化,以及目标编码器完成创建;最后,通过目标编码器,根据目标编码参数对待编码数据进行编码,例如,将待编码数据编码为h264/h265。

29、在一些实施例中,所述处理器具体用于:在所述目标编码参数完成初始化,以及目标编码器完成创建的情况下的情况下,创建目标编码指令,在所述目标编码指令的一个周期内,通过所述显卡缓存获取原始数据;将原始数据的像素格式转化为目标像素格式,得到所述待编码数据。

30、举例而言,在目标编码参数完成初始化,以及目标编码器完成创建的情况下,可以创建目标编码指令,该目标编码指令用于控制获取原始数据的流程。在目标编码指令的一个周期内可以通过显卡缓存(即,nvfbc的方式)获取原始数据(例如,当前桌面图像数据),并将原始数据(例如,当前桌面图像数据)的像素格式转化为目标像素格式(例如,nv12),得到待编码数据,输送至目标编码器。

31、在一些实施例中,所述目标编码指令包括开始工作状态、暂停工作状态,以及终止工作状态。

32、具体地,目标编码指令可以包括开始工作状态(start)、暂停工作状态(pause),以及终止工作状态(stop),用于控制获取原始数据的流程。

33、在一些实施例中,所述处理器具体用于:创建目标会话、设置预设参数、初始化编码参数,以及创建目标缓存区。

34、举例而言,包括创建目标会话可以为创建encodesession(编码会话),即通过构建sessionparams(会话参数),调用nvencopenencodesession()以创建encodesession(编码会话)。

35、其次,设置预设参数,可以通过nvencgetencodepresettconfig设置目标编码器的预设参数,包括码流的清晰度,以及视频编码格式为h264或h265等。

36、此外,初始化编码参数,可以为构建目标编码器initparams(初始参数),包括帧率、码流大小、原图尺寸、编码尺寸等参数,并通过nvencinitializeencoder()初始化目标编码器。

37、最后,创建目标缓存区,可以通过接口createbitstreambuffer(),创建目标缓存区,用于接收编码器编的码流。其中,作为一种示例,目标缓存区可以为bitstreambuffer(即,比特流缓冲区)。

38、根据本公开实施例的第三方面,提供一种数据编码的设备,数据编码的处理设备包括处理器和存储器,存储器中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的数据编码方法中所执行的步骤。

39、根据本公开实施例的第四方面,提供一种计算机可读存储介质,其特征在于,所述计算机程序存储介质具有程序指令,当所述程序指令被处理器执行时,使得处理器执行第一方面所述的方法。

40、根据本公开实施例的第五方面,提供一种芯片系统,其特征在于,所述芯片系统包括至少一个处理器,当程序指令在所述至少一个处理器中执行时,使得所述至少一个处理器执行第一方面所述的方法。

41、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

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