CN116546228A - 用于虚拟场景的推流方法、装置、设备及存储介质 - Google Patents
用于虚拟场景的推流方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116546228A CN116546228A CN202310808651.2A CN202310808651A CN116546228A CN 116546228 A CN116546228 A CN 116546228A CN 202310808651 A CN202310808651 A CN 202310808651A CN 116546228 A CN116546228 A CN 116546228A
- Authority
- CN
- China
- Prior art keywords
- priority
- authority
- sdk
- rendering
- virtual scene
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 301
- 238000003860 storage Methods 0.000 title claims abstract description 18
- 230000008569 process Effects 0.000 claims abstract description 252
- 238000009877 rendering Methods 0.000 claims abstract description 173
- 230000000694 effects Effects 0.000 claims abstract description 22
- 238000005111 flow chemistry technique Methods 0.000 claims abstract description 5
- 238000004590 computer program Methods 0.000 claims description 18
- 238000005457 optimization Methods 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 30
- 238000010586 diagram Methods 0.000 description 28
- 230000006870 function Effects 0.000 description 15
- 210000003128 head Anatomy 0.000 description 11
- 238000012545 processing Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012913 prioritisation Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000013475 authorization Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/218—Source of audio or video content, e.g. local disk arrays
- H04N21/2181—Source of audio or video content, e.g. local disk arrays comprising remotely distributed storage units, e.g. when movies are replicated over a plurality of video servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/234—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
- H04N21/23412—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs for generating or manipulating the scene composition of objects, e.g. MPEG-4 objects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/234—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
- H04N21/2343—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements
- H04N21/234309—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4 or from Quicktime to Realvideo
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/25—Management operations performed by the server for facilitating the content distribution or administrating data related to end-users or client devices, e.g. end-user or client device authentication, learning user preferences for recommending movies
- H04N21/254—Management at additional data server, e.g. shopping server, rights management server
- H04N21/2541—Rights Management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/25—Management operations performed by the server for facilitating the content distribution or administrating data related to end-users or client devices, e.g. end-user or client device authentication, learning user preferences for recommending movies
- H04N21/262—Content or additional data distribution scheduling, e.g. sending additional data at off-peak times, updating software modules, calculating the carousel transmission frequency, delaying a video stream transmission, generating play-lists
- H04N21/26208—Content or additional data distribution scheduling, e.g. sending additional data at off-peak times, updating software modules, calculating the carousel transmission frequency, delaying a video stream transmission, generating play-lists the scheduling operation being performed under constraints
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/478—Supplemental services, e.g. displaying phone caller identification, shopping application
- H04N21/4781—Games
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请提供了一种用于虚拟场景的推流方法、装置、设备及存储介质,涉及虚拟场景应用技术领域。该方法包括:在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限;基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;对所述编码视频流进行推流处理。上述方案能够保证推流过程中的编码的帧率,进而调高推流效果。
Description
技术领域
本申请实施例涉及虚拟场景应用技术领域,特别涉及一种用于虚拟场景的推流方法、装置、设备及存储介质。
背景技术
随着虚拟场景相关的应用的不断发展,在对虚拟场景的画面进行推流时,可以通过图形处理器(Graphics Processing Unit,GPU)对虚拟场景的画面进行硬编码,以提高推流性能。
在相关技术中,在对虚拟场景的画面进行推流的过程中,终端的GPU需要承担虚拟场景的画面渲染的任务,以及,对虚拟场景的推流画面进行编码的任务。
然而,在上述方案中,当GPU性能不足时,GPU对虚拟场景的推流画面的编码帧率会下降,导致推流的画面出现卡顿等情况,影响对虚拟场景的推流效果。
发明内容
本申请实施例提供了一种用于虚拟场景的推流方法、装置、设备及存储介质,能够提高对虚拟场景的推流效果。所述技术方案如下:
一个方面,提供了一种用于虚拟场景的推流方法,所述方法包括:
在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,所述第一权限是具有对图形渲染软件开发工具包SDK驱动组件的属性进行设置的权限;
基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述第一优先级高于所述图形渲染SDK驱动组件调度GPU资源的默认优先级;
基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;
对所述编码视频流进行推流处理。
另一方面,提供了一种用于虚拟场景的推流装置,所述装置包括:
令牌权限设置模块,用于在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,所述第一权限是具有对图形渲染SDK驱动组件的属性进行设置的权限;
优先级设置模块,用于基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述第一优先级高于所述图形渲染SDK驱动组件调度GPU资源的默认优先级;
编码驱动模块,用于基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;
推流模块,用于对所述编码视频流进行推流处理。
又一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行以实现上述用于虚拟场景的推流方法。
再一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现上述用于虚拟场景的推流方法。
还一方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述各种可选实现方式中提供的用于虚拟场景的推流方法。
本申请实施例提供的技术方案可以包括如下有益效果:
在对虚拟场景的画面进行推流的过程中,可以设置推流进程的访问令牌的权限,使得推流进程的访问令牌具有对图形渲染软件开发工具包SDK驱动组件的属性进行设置的权限,然后对推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级进行调高,后续基于图形渲染SDK驱动组件,驱动GPU对虚拟场景的画面进行编码时,能够有更高的概率调度到GPU的资源进行编码,从而保证推流过程中的编码的帧率,进而调高推流效果。
附图说明
图1是本申请一个示例性实施例提供的实施环境的示意图;
图2是本申请涉及的一种推流架构图;
图3是本申请涉及的另一种推流架构图;
图4是本申请涉及的GPU运行性能界面图;
图5是本申请涉及的帧率示意图;
图6是本申请一个实施例提供的用于虚拟场景的推流方法的流程图;
图7是本申请实施例涉及的推流工具的输出日志示意图;
图8是本申请涉及的一种用于虚拟场景的推流框架图;
图9是本申请另一个实施例提供的用于虚拟场景的推流方法的流程图;
图10是本申请又一个实施例提供的用于虚拟场景的推流方法的流程图;
图11是本申请再一个实施例提供的用于虚拟场景的推流方法的流程图;
图12是本申请一示例性实施例涉及的推流过程硬件编码的流程框架图;
图13是本申请涉及的一种推流平台选择示意图;
图14是本申请涉及的关卡图像示意图;
图15是本申请涉及的另一种关卡图像示意图;
图16是本申请涉及的另一种推流平台选择示意图;
图17是本申请涉及的VR场景画面示意图;
图18是头显等待连接的界面图;
图19是本申请涉及的头显的画面显示示意图;
图20是本申请涉及的进程优先级查看示意图;
图21是本申请一个实施例提供的用于虚拟场景的推流装置的框图;
图22是本申请一个实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
1)openxr:用于游戏和VR领域的图像渲染及设备接入SDK。
2)steamvr:也称作openvr,是openxr标准的前身。
3)d3d11和d3d12:Windows系统的图形渲染软件开发工具包(SoftwareDevelopment Kit,SDK),也称为:DirectX或Direct3D(D3D)。目前大部分游戏使用的是d3d11,少部分新游戏使用了d3d12。
4)帧率:每秒帧数(Frames Per Second,FPS),本申请中指游戏每秒绘制图像的次数,通常有60、72和90fps。
5)纹理:一种图像格式,主要是用于游戏画面的渲染。
6)取图:将游戏绘制完成的纹理,进行拷贝和传输,一般用于二次渲染和视频编码。
7)游戏编辑器:用于制作游戏的工具,如Unity和虚幻引擎(Unreal Engine,UE)4。
8)推流:在本申请中,推流是指将虚拟场景的画面经过编码后发送到显示端进行显示。比如,在虚拟现实(Virtual Reality,VR)游戏中,推流是指将游戏的左右眼画面和声音,进行音视频编码发送到头显侧进行播放;头显将Tracking数据发回到游戏侧(比如电脑)进行游戏操控。
9)Tracking数据:VR中的术语,主要由头部显示器(Head-Mounted Display, HMD)的位姿信息和两个手柄的位姿信息来组成。
10)硬件编码:一般指使用GPU的算力来实现快速视频编码的技术,它的编码速度相对于中央处理器CPU更快。
11)软件编码:是指用CPU的算力进行视频编码,因为CPU的缓存和算力有限,不适合高分辨率和实时度较高的场景。
12)VRClient:本申请中是指动态链接库,可以是openvr_client.dll或openxr_client.dll,它们分别由steamvr或实现了openxr协议的游戏所调用,主要目的用于和游戏编辑器对接,比如,控制游戏绘制的帧率,为游戏创建纹理并交给游戏绘制等操作都在VRClient中进行。
图1示出了本申请一个示例性实施例提供的实施环境的示意图。该实施环境可以包括:第一终端110,此外,该实施环境还包括VR显示设备120或者推流服务器130;可选的,该实施环境还可以包括虚拟场景服务器140。
其中,上述涉及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
具体来说,第一终端110安装和运行有虚拟场景对应的应用程序111,以及推流应用112,该应用程序111可以单独运行虚拟场景,或者,与虚拟场景服务器140进行数据交互以运行虚拟场景。比如,该应用程序111可以是传统游戏类应用程序或者VR游戏类应用程序等等。第一终端110中设置有GPU,且该GPU可以提供虚拟场景的画面渲染的任务,以及,对虚拟场景的画面进行硬件编码以支持推流的任务。
图1中仅示出了一个终端,但在不同实施例中存在多个其它终端可以接入VR显示设备120、推流服务器130或者虚拟场景服务器140。可选地,还存在一个或多个终端是开发者对应的终端,在该终端上安装有开发上述应用程序111或者推流应用112的开发平台。
第一终端110以及其它终端通过无线网络或有线网络与VR显示设备120、推流服务器130或者虚拟场景服务器140相连。
VR显示设备120可以包括显示器以及输入组件,其中,显示器可以用于显示虚拟场景的画面的编码视频流,输入组件用于接收用户的输入数据,并将输入数据返回给第一终端110;其中,上述输入组件可以包括传感器(比如运动传感器、触摸传感器、光线传感器等等)和物理按键中的至少一种,上述输入数据可以包括传感器数据和物理按键的按压数据等等。
推流服务器130或者虚拟场景服务器140包括一台服务器、多台服务器组成的服务器集群、云计算平台和虚拟化中心中的至少一种。推流服务器130可以为终端中运行的推流应用112提供虚拟场景的编码视频流的转发推送功能,也就是将编码视频流转发推送到网页或者客户端进行显示;虚拟场景服务器140可以为终端中运行的应用程序111提供虚拟场景运行的后台支持。可选地,推流服务器130或者虚拟场景服务器140承担主要计算工作,终端承担次要计算工作;或者,推流服务器130或者虚拟场景服务器140承担次要计算工作,终端承担主要计算工作;或者,推流服务器130或者虚拟场景服务器140,与终端之间采用分布式计算架构进行协同计算。
在一个示意性的例子中,推流服务器130包括存储器131、处理器132、用户账号数据库133、推流服务模块134、面向用户的输入/输出接口(Input/Output Interface,I/O接口)135。其中,处理器132用于加载服务器130中存储的指令,处理用户账号数据库133和推流服务模块134中的数据;用户账号数据库133用于存储第一终端110以及其它终端所使用的用户账号的数据,比如用户账号的头像、用户账号的名称、用户账号的等级;推流服务模块134用于提供网络推流服务(比如编码视频流接收、转发、时延控制)等等;面向用户的I/O接口135用于通过无线网络或有线网络和第一终端110建立通信交换数据。
在一个示意性的例子中,虚拟场景服务器140包括存储器141、处理器142、用户账号数据库143、场景服务模块144、面向用户的输入/输出接口(Input/Output Interface,I/O接口)145。其中,处理器142用于加载服务器140中存储的指令,处理用户账号数据库143和场景服务模块144中的数据;用户账号数据库143用于存储第一终端110以及其它终端所使用的用户账号的数据,比如用户账号的头像、用户账号的名称、用户账号的等级;场景服务模块144用于提供虚拟场景的后台处理服务(比如,与应用程序111同步虚拟场景的状态)等等;面向用户的I/O接口145用于通过无线网络或有线网络和第一终端110建立通信交换数据。
相关技术中的推流方案通常是独立于游戏进程之外进行二次渲染和视频编码的,这样做的好处是不会和游戏进程抢CPU和内存等资源,并且如果推流软件的运行发生了错误,也不会影响到游戏进程。
相关技术中的推流方案主要分为两种:一种是传统游戏的推流,一种是VR游戏推流。
以基于steamvr的VR游戏推流方案为例,请参考图2,其示出了本申请涉及的一种推流架构图。如图2所示,UNITY 201、虚幻引擎202、原生应用203都是游戏或游戏编辑器,它们遵循openvr或openxr的协议来加载对应的插件,也就是openxr插件(openxr_plugin)和openvr插件(openvr_plugin),这些插件会和steamvr进程进行通信,一旦通信建立后,游戏的渲染、帧率和Tracking都交给steamvr进行控制。openvr_client.dll是各种推流工具实现的逻辑,它主要负责从steamvr那拿到游戏渲染好的左右眼纹理,并从推流进程那获取到头显的Tracking信息,再将Tracking通过steamvr写入到游戏,实现游戏视角的移动和手柄操控。
请参考图3,其示出了本申请涉及的另一种推流架构图。如图3所示,当openvr_client.dll从steamvr取到图时,就会将纹理放到一个共享内存里,共享内存的纹理可以被另外一个进程也就是推流进程访问,推流进程拿到纹理后就开始进行视频编码,并将编码后的数据发送到头显进行显示。
传统的主机游戏的推流或直播录播过程与上述图2类似,不同之处在于,传统的主机游戏的推流是指将编码得到的视频数据流推送至网页或客户端进行播放,而不是推送到头显。
在传统的游戏推流场景或VR游戏推流场景中,如果出现硬件编码帧率下降就会造成卡顿或画面跳变等不好的体验效果,例如,在大型主机游戏和VR游戏中,由于其渲染的分辨率较高和渲染的效果较为复杂时,GPU的3D渲染性能就会被拉满,导致推流的显示效果差。
请参考图4,其示出了本申请涉及的GPU运行性能界面图。如图4所示,GPU(也称为显卡)的显存分为两块,一块用于3D的渲染与纹理拷贝,另外一块用于推流视频的编解码。当游戏渲染的性能开销较大时,显卡3D的负载就会爬升,接近峰值时会影响到视频编码进程的性能,比如,如图4所示,显卡的渲染负载41远高于编码负载42。
显卡也在进行视频编码,则会出现显卡编码的帧率,跟不上游戏渲染的帧率的情况,请参考图5,其示出了本申请涉及的帧率示意图,如图5所示,从日志输出结果51中可以看出,游戏渲染的帧率是60+的fps,但显卡的编码帧率只有20-30fps。
本申请后续实施例所示的方案,可以应用在GPU同时进行虚拟场景的画面渲染和推流的硬件编码的场景中,以保证对虚拟场景的推流效果。
请参考图6,其示出了本申请一个实施例提供的用于虚拟场景的推流方法的流程图。为了便于说明,仅以各步骤执行主体为计算机设备进行介绍说明。上述计算机设备可以为终端;上述终端可以是上述图1所示的第一终端110;该方法可以包括如下几个步骤。
步骤610:在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,第一权限是具有对图形渲染SDK驱动组件的属性进行设置的权限。
在本申请实施例中,当终端同时运行虚拟场景对应的应用程序和推流应用的过程中,虚拟场景对应的应用程序可以创建渲染进程,该渲染进程用于调用GPU进行虚拟场景的画面的渲染,同时,上述推流应用可以创建推流进程,该推流进程用于调用GPU进行虚拟场景的画面推流的编码。
在本申请实施例中,上述将推流进程的访问令牌的权限设置为第一权限的过程,可以由上述推流进程来执行,也可以由推流应用创建的其它进程来执行。
上述图形渲染SDK驱动组件,也可以称为DirectX或D3D设备,上述渲染进程和推流进程可以各自创建一个图形渲染SDK驱动组件,用于调用GPU的处理资源进行渲染/编码。
在本申请实施例中,一个进程可以具有自己的访问令牌,进程的访问令牌具有自己的权限,一个进程的访问令牌的权限,可以显示该进程在操作系统中可执行的操作。
比如,在通常情况下,一个推流进程的访问令牌不具有第一权限,也就是不具有对图形渲染SDK驱动组件的属性进行设置的权限,而在本申请实施例所示的方案中,可以临时提高推流进程的访问令牌的权限,使得推流进程的访问令牌有对图形渲染SDK驱动组件的属性进行设置的权限。
其中,图形渲染SDK驱动组件可以包含一项或多项属性,这一项或多项属性中的全部或者部分属性可以进行设置(比如初始设置或者修改设置等等)。
步骤620:基于第一权限,将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;第一优先级高于图形渲染SDK驱动组件调度GPU资源的默认优先级。
在本申请实施例中,图形渲染SDK驱动组件的属性中可以包括该图形渲染SDK驱动组件调度图形处理器GPU资源的优先级。
在本申请实施例中,推流组件的硬件编码也是通过调用显卡的算力,来进行视频的编码。
与CPU的时间片类似,显卡也有优先级调用的概念,可以认为多个Windows进程都有可能访问显卡并让其执行运算,推流组件的硬件编码也是通过调用显卡的算力,来进行视频的编码。而上述各个进程的图形渲染SDK驱动组件中,优先级高的图形渲染SDK驱动组件的调用请求将会给显卡优先执行。
在通常情况下,推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级(即上述图形渲染SDK驱动组件调度GPU资源的默认优先级)不会太高,比如,编码进程的图形渲染SDK驱动组件调度GPU资源的默认优先级,通常会低于渲染进程的图形渲染SDK驱动组件调度GPU资源的优先级;而本申请实施例所示的方案,在对推流进程的访问令牌的权限设置了第一权限的情况下,通过推流进程的访问令牌,可以通过推流进程,将该推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级进行调高,使得推流进程的图形渲染SDK驱动组件能够通过更高的优先级来调度图形处理器GPU资源以进行推流的硬件编码。
在一些实施例中,上述第一优先级为调度GPU资源的优先级中的最高优先级。
在上述实施例中,终端(比如终端中运行的推流应用或推流进程)可以将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为(实时优先级)即最高优先级,该方案不需要考虑推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的权限对于其它进程(比如渲染进程或者其它使用硬件加速功能的进程)调度GPU的影响,操作步骤较为简单,优先级设置的效率较高。
推流应用或推流进程可以调用第四应用程序编程接口(ApplicationProgramming Interface,API)来将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级,其中,上述接口属于d3d设备驱动层的接口。
在一些实施例中,以上述终端运行的操作系统时windows系统为例,上述第四API可以是D3DKMTSetProcessSchedulingPriorityClass。
以推流进程的图形渲染SDK驱动组件是D3D11设备为例,调用D3DKMTSetProcessSchedulingPriorityClass的代码可以如下:
// 设定当前的显卡调度优先级
D3DKMTSetProcessSchedulingPriorityClass(GetCurrentProcess(),
D3DKMT_SCHEDULINGPRIORITYCLASS_REALTIME);
// D3D11设备优先级设为最高
IDXGIDevice1* pDXGIDevice1 = nullptr;
if (SUCCEEDED(m_d3dDevice->QueryInterface(__uuidof(IDXGIDevice1),(void**)&pDXGIDevice1)))
{
pDXGIDevice1->SetGPUThreadPriority(7);
pDXGIDevice1->Release();
}
其中,上述D3DKMTSetProcessSchedulingPriorityClass接口/函数用于设置进程的调度优先级。该接口的参数可以如下:
[in] unnamedParam1:为其设置调度优先级的进程的句柄;
[in] unnamedParam2:D3DKMT_SCHEDULINGPRIORITYCLASS枚举值,指示要为进程设置的优先级。
在另一些实施例中,上述第一优先级不低于渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级。
比如,终端(比如终端中运行的推流应用或推流进程)可以根据渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级,设置上述第一优先级,使得第一优先级不低于渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级。该方案可以兼顾除了渲染任务和推流编码任务之外的其它任务的优先级,比如,用户在通过渲染线程和推流线程来渲染虚拟场景的图像和生成推流的编码视频帧时,可能还需要对虚拟场景中出现的文本进行人工智能(Artificial Intelligence,AI)识别和语音合成等任务的处理,且这些任务涉及机器学习处理,也可以调度GPU进行硬件加速,而在用户看来,这些任务的优先级可能还要高于渲染和编码,此时,渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级可能会低于上述文本识别和语音任务的进程中的图形渲染SDK驱动组件调度GPU资源的优先级,这种情况下,终端中运行的推流应用或推流进程可以先获取渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级,并设置为推流进程中的图形渲染SDK驱动组件设置一个不低于上述渲染进程中的图形渲染SDK驱动组件调度GPU资源的优先级的第一优先级,该第一优先级可以低于文本识别和语音任务的进程中的图形渲染SDK驱动组件调度GPU资源的优先级,避免推流进程影响文本识别和语音合成任务,也可以高于或者等于文本识别和语音任务的进程中的图形渲染SDK驱动组件调度GPU资源的优先级,优先保证推流进程的执行。
步骤630:基于图形渲染SDK驱动组件,驱动GPU对虚拟场景的画面进行编码,获得虚拟场景的编码视频流。
在本申请实施例中,终端(比如终端中运行的推流进程)可以通过自身创建的图形渲染SDK驱动组件,向GPU请求资源,以调用GPU对虚拟场景的画面进行编码,得到虚拟场景的编码视频流。
步骤640:对编码视频流进行推流处理。
推流进程调用GPU对虚拟场景的画面进行编码得到编码视频流的同时,可以对编码视频流进行推流处理,比如,将编码视频流中的已编码的视频帧推送到VR头显或者直播客户端进行显示。
当推流时遇到编码帧率低于游戏渲染帧率的情况时,用户可以观察到显示端(比如VR头显或者直播客户端)中显示的画面不停的跳变,并且,如果能查看推流工具的日志的话,可以发现推流工具(推流应用)的日志的输出能够提示渲染的帧率高于编码的帧率,比如,请参考图7,其示出了本申请实施例涉及的推流工具的输出日志示意图。如图7所示,推流工具输出的日志701中,渲染的帧率为72 FPS,但编码的帧率在60 FPS左右。
经过调试可知,在高负载的渲染场景下,当游戏窗口在推流窗口进程上层时,可能会让视频编码帧率降低。
如果推流进程移动到游戏窗口上层,那么视频编码的帧率就会变得和渲染的帧率保持一致。
由于用户在游戏过程中,基本都是全屏覆盖场景,让用户将推流进程的窗口放到游戏窗口上层,会影响用户的游戏体验。而在操作系统(比如Windows)的工作模式中,一个进程对应窗口在最顶层(Top Most)运行时,它能获得更多的调度分配,基于此,本申请所示方案通过调高推流进程调度GPU资源的优先级,以加快视频编码帧率。
综上所述,本申请实施例所示的方案,在对虚拟场景的画面进行推流的过程中,可以设置推流进程的访问令牌的权限,使得推流进程的访问令牌具有对图形渲染软件开发工具包SDK驱动组件的属性进行设置的权限,然后对推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级进行调高,后续基于图形渲染SDK驱动组件,驱动GPU对虚拟场景的画面进行编码时,能够有更高的概率调度到GPU的资源进行编码,从而保证推流过程中的编码的帧率,进而调高推流效果。
基于上述图6所示的实施例,请参考图8,其示出了本申请涉及的一种用于虚拟场景的推流框架图。以上述终端中具有GPU 81,且运行有虚拟场景的推流进程82以及渲染进程83为例,其中,渲染进程83调用GPU 81进行虚拟场景的画面渲染,在传统游戏场景下,渲染进程83还将GPU 81渲染的虚拟场景的画面推给终端的显示器84进行显示。
如图8所示,在推流过程中,推流进程82可以先提升自身的访问令牌82a的权限,使得通过该访问令牌82a可以设置D3D设备调度GPU资源的优先级,然后,通过该访问令牌82a的权限,将推流进程82创建的D3D设备82b的优先级设置为一个较高(相比于D3D设备的默认优先级)的优先级(即上述第一优先级);之后,推流进程82即可以通过D3D设备82b,以较高的优先级调度GPU进行推流的编码。
基于图6所示的实施例,请参考图9,其示出了本申请一个实施例提供的用于虚拟场景的推流方法的流程图。如图9所示,上述图6所示实施例中的步骤610可以实现为步骤610a和步骤610b。
步骤610a:调用第一应用程序编程接口API获取推流进程的访问令牌。
在本申请实施例中,在设置访问令牌的权限之前,终端(比如终端中运行的推流应用或者推流进程)可以先获取推流进程的访问令牌。
比如,以终端中的操作系统是Windows系统为例,推流应用或者推流进程可以调用以下API:OpenProcessToken,来获取推流进程的访问令牌。
步骤610b:调用第二API将推流进程的访问令牌的权限设置为第一权限。
在获取到访问令牌之后,终端(比如终端中运行的推流应用或者推流进程)可以进一步调用API来设置推流进程的访问令牌的权限。
在一些实施例中,第二API可以用于启用或禁用指定的访问令牌中的权限。也就是说,本实施例通过启用或禁用指定的访问令牌中的权限的API,实现了对推流进程的访问令牌的权限设置,从而保证后续能够成功的提升推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级。
比如,还是以终端中的操作系统是Windows系统为例,推流应用或者推流进程可以调用以下API:AdjustTokenPrivileges,以将推流进程的访问令牌的权限设置为第一权限。
其中,Windows系统中,AdjustTokenPrivileges的功能包括用于启用或禁用指定访问令牌中的权限。
其中,该AdjustTokenPrivileges的调用代码可以如下:
BOOL AdjustTokenPrivileges(
[in] HANDLE TokenHandle, //访问令牌的句柄;
[in] BOOL DisableAllPrivileges,
[in,optional] PTOKEN_PRIVILEGES NewState, //这一行输入参数指向TOKEN_PRIVILEGES结构的指针;
[in] DWORD BufferLength,
[out,optional] PTOKEN_PRIVILEGES PreviousState, //这一行输出参数指向函数用TOKEN_PRIVILEGES结构填充的缓冲区的指针;
[out,optional] PDWORD ReturnLength //指向一个变量的指针,该变量接收PreviousState参数所指向的缓冲区的所需大小;
);
上述代码中,TOKEN_PRIVILEGES结构指定权限及其属性的数组。下面介绍AdjustTokenPrivileges函数根据权限属性所采取的操作:
SE_PRIVILEGE_ENABLED:该功能启用权限;
SE_PRIVILEGE_REMOVED:该权限将从令牌中的权限列表中删除,列表中的其他权限将重新排序以保持连续;
None:该功能禁用权限。
如果AdjustTokenPrivileges函数执行成功,则可以返回非零值。如果函数执行失败,则可以返回零值。
在本申请上述方案中,终端首先调用API接口获取推流进程的访问令牌,然后再调用另一API接口设置推流进程的访问令牌的权限,从而提供一种能够对推流进程的访问令牌的权限进行设置的方案,保证后续能够成功的提升推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级。
在一些实施例中,在调用第二API将推流进程的访问令牌的权限设置为第一权限之前,还包括:
调用第三API查询第一权限的权限值,权限值是访问令牌的权限在操作系统中的标识;
上述调用第二API将推流进程的访问令牌的权限设置为第一权限的过程可以包括:
基于第一权限的权限值调用第二API,以将推流进程的访问令牌的权限设置为第一权限。
其中,在获取到访问令牌之后,并且在设置推流进程的访问令牌的权限之前,终端可能还需要确定要设置的第一权限的权限值,以便能够正确的通过调用第二API来将推流进程的访问令牌的权限设置为第一权限。
比如,终端可以通过调用第三API,来检索操作系统中本地使用的,上述第一权限的本地唯一标识符(Locally Unique Identifier,LUID),用来表示第一权限在本地的权限名称。
比如,还是以终端中的操作系统是Windows系统为例,推流应用或者推流进程可以调用以下API:LookupPrivilegeValue,以检索第一权限在Windows系统上使用的LUID,以在本地表示第一权限名称。
后续在调用第二API将推流进程的访问令牌的权限设置为第一权限时,可以通过上述第一权限的权限值,调用上述第二API,以将推流进程的访问令牌的权限设置为第一权限。比如,基于上述第一权限的权限值,设置第二API调用时的输入参数:[in,optional]PTOKEN_PRIVILEGES NewState。
基于图6或图9所示的实施例,请参考图10,其示出了本申请一个实施例提供的用于虚拟场景的推流方法的流程图。如图10所示,上述图6或图9所示实施例中,在步骤630之前还可以包括步骤622。
步骤622:响应于推流进程的图形渲染SDK驱动组件支持命令队列的优先级设置,基于第一权限,将推流进程的图形渲染SDK驱动组件的命令队列的优先级设置为第二优先级,第二优先级高于图形渲染SDK驱动组件的命令队列的默认优先级。
在一些实施例中,上述推流进程的图形渲染SDK驱动组件可能会支持命令队列的优先级设置。
比如,当图形渲染SDK驱动组件是D3D12设备时,该图形渲染SDK驱动组件的命令队列(ID3D12CommandQueue)的优先级是可设置的。
其中,ID3D12CommandQueue可以将d3d对显卡的调度细分为多个单独的命令,并放在一个命令队列中依次执行。开发者可以在命令队列中获得更细粒度的对显卡的调用,这样可以提升程序渲染逻辑的自由度,也能提升渲染的性能。
上述终端可以通过第五API将推流进程的图形渲染SDK驱动组件的命令队列的优先级设置为第二优先级。
比如,以上述终端的操作系统是Windows系统为例,上述第五API可以是D3D12_COMMAND_QUEUE_PRIORITY。
其中,通过D3D12_COMMAND_QUEUE_PRIORITY设置D3D12设备的命令队列的优先级的代码可以如下:
D3D12_COMMAND_QUEUE_DESC queueDesc = {};
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
// 显卡调度优先级为最高,D3D12命令队列执行优先级为全局最高
if (bHigthPriority)
{
D3DKMTSetProcessSchedulingPriorityClass(GetCurrentProcess(),
D3DKMT_SCHEDULINGPRIORITYCLASS_REALTIME);
queueDesc.Priority=
D3D12_COMMAND_QUEUE_PRIORITY_GLOBAL_REALTIME;
}
其中,D3D12_COMMAND_QUEUE_PRIORITY可以用于定义命令队列的优先级。
其中,通过D3D12_COMMAND_QUEUE_PRIORITY定义的命令队列的优先级可以如下:
D3D12_命令_队列_优先级_正常:值为0,表示正常优先级;
D3D12_命令队列优先级高:值为100,表示高度优先;
D3D12_命令队列优先级全局优先级:值为1000,表示全局实时优先级。
在本申请实施例中,当上述推流进程的图形渲染SDK驱动组件可能会支持命令队列的优先级设置时,除了将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级之外,还需要提升推流进程的图形渲染SDK驱动组件的命令队列的优先级,以保证推流进程能够有更高的概率调度到GPU的资源进行编码,从而保证推流过程中的编码的帧率,进而提高推流效果。
在一些实施例中,第二优先级为图形渲染SDK驱动组件的命令队列的优先级中的最高优先级。
在上述实施例中,终端(比如终端中运行的推流应用或推流进程)可以将推流进程的图形渲染SDK驱动组件的命令队列的优先级设置为(实时优先级)即最高优先级,该方案不需要考虑推流进程的图形渲染SDK驱动组件的命令队列的优先级对于其它进程的命令队列的优先级的影响,操作步骤较为简单,优先级设置的效率较高。
此外,与另一些实施例中,上述第二优先级不低于渲染进程中的图形渲染SDK驱动组件的命令队列的优先级。
基于图6、图9或图10所示的实施例,请参考图11,其示出了本申请一个实施例提供的用于虚拟场景的推流方法的流程图。如图11所示,上述图6、图9或图11所示实施例中,在步骤610之前还可以包括步骤602。
步骤602:将推流进程的优先级设置为第三优先级;第三优先级为进程的优先级中的最高优先级。
在本申请实施例中,终端还可以提升修改推流进程的进程优先级。
其中,提升进程的优先级,就可以使得进程从系统获取到更多的CPU时间片来处理自己的任务。每个进程需要处理自身的运算时,其依赖操作系统为其分配CPU资源才能够进行运算。优先级越高的进程分配到的CPU时间片就越多。这个优先级的概念也适用于显卡(GPU)的资源调度。也就是说,将推流进程的进程优先级调到最高,可以让推流进程能够获取更多的Windows调度资源,并且让进程内的线程都能够提升运行优先级。
以上述操作系统是Windows系统为例,将推流进程的优先级设置最高优先级(实时优先级)的代码可以如下:
// 设定进程优先级为实时
HANDLE hProcess = GetCurrentProcess();
if (SetPriorityClass(hProcess,REALTIME_PRIORITY_CLASS))
{
SetProcessPriorityBoost(hProcess,true);
}
在一些实施例中,上述各个实施例中步骤620可以实现为:响应于渲染帧率与编码帧率之间的关系满足第一优化条件,基于第一权限,将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;渲染帧率是GPU对虚拟场景进行渲染的帧率,编码帧率是GPU对虚拟场景的画面进行编码的帧率。
在上述实施例中,终端可以实时获取虚拟场景的渲染帧率和编码帧率,当检测到渲染帧率和编码帧率之间的关系满足第一优化条件时,提高推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级,以保证推流进程能够有更高的概率调度到GPU的资源进行编码,从而保证推流过程中的编码的帧率,进而提高推流效果,可选的,当检测到渲染帧率和编码帧率之间的关系不满足第一优化条件时,可以不提高推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级,从而保证GPU对虚拟场景的渲染效率,保证虚拟场景显示的流畅度;也就是说,上述方案能够在保证推流效果的情况下,在一定程度上兼顾虚拟场景显示的流畅度。
在一些实施例中,第一优化条件包括以下条件中的至少一种:
编码帧率低于第一帧率阈值,且渲染帧率不低于第二帧率阈值;第一帧率阈值小于或者等于第二帧率阈值;
以及,编码帧率低于渲染帧率,且编码帧率与渲染帧率之间的差值大于帧率差值阈值。
其中,当上述编码帧率低于第一帧率阈值,且渲染帧率不低于第二帧率阈值时,或者,当编码帧率远低于渲染帧率时,表示GPU对推流进程的编码速度赶不上渲染速度,会导致推流过程中的画面卡顿/丢失,此时,终端可以提高推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级,保证推流过程中的编码的帧率,进而提高推流效果。
在一些实施例中,上述各个实施例中步骤620可以实现为:在创建推流进程的图形渲染SDK驱动组件时,基于第一权限,将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
在上述实施例中,终端在创建推流进程时,即提高推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级,该方案不需要考虑渲染帧率和编码帧率的具体数值,操作步骤较为简单,优先级设置的效率较高。
在一些实施例中,上述各个实施例中步骤620可以实现为:
获取虚拟场景的画面的显示参数,显示参数用于指示虚拟场景的画面的显示效果;
基于虚拟场景的画面的显示参数,获取GPU性能需求;
获取GPU的性能参数;
响应于GPU的性能参数不满足GPU性能需求,基于第一权限,将推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
其中,上述虚拟场景的画面的显示参数可以包括虚拟场景的分辨率、虚拟场景的阴影效果、虚拟场景的光线效果等参数,这些参数可以表示虚拟场景的画面的显示效果。
上述GPU性能需求,可以是指GPU在按照虚拟场景的画面的显示参数优先渲染虚拟场景的画面,同时进行推流的编码的情况下,保证不影响编码帧率所需要的性能。
通常来说,虚拟场景的画面的显示效果越高,渲染进程对GPU的性能需求也越高,而渲染进程对GPU的性能需求越高,渲染线程可能占用的GPU的资源也越高,如果GPU优先向渲染线程分配处理资源,那么编码线程对GPU资源的调用就会受到影响,这种情况下,如果终端检测到GPU的性能参数不满足GPU性能需求,则可以提高推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级,保证推流过程中的编码的帧率,进而提高推流效果。
本申请上述实施例所示的方案,提出一种在显卡高负载下的渲染和硬件编码帧率对齐的方法,通过提升推流进程及其d3d驱动及设备层的调度优先级,使得Windows能分配更多的调度时间片给到推流进程的编码任务,以提升编码的帧率。上述方案解决了显卡高负载下渲染和编码帧率不一致的问题,使得显卡在高负载的情况下,也能做到渲染和编码帧率对齐的效果,最终可以使推流视频的帧率尽可能的平滑,不至于出现跳变等情况。
以上述方案应用于Windows系统为例,请参考图12,其示出了本申请一示例性实施例涉及的推流过程硬件编码的流程框架图。如图12所示,以VR游戏推流为例,该推流过程硬件编码的流程可以包括如下步骤。
S1201,推流进程启动。
本申请涉及的推流应用可以支持openxr推流和steamvr推流中的至少一种;比如,请参考图13,其示出了本申请涉及的一种推流平台选择示意图。如图13所示,在openxr的推流方式下:先运行该推流应用,在推流平台选择栏1301中选择openxr推流,推流应用会在Windows注册表中注册openxr对接的VRClient动态链接库路径(VRClient就是指定openxr运行时库,可以是steamvr的或者DirectPreview的)。之后,推流应用可以在注册表路径下写入DirectPreview的库的路径,比如:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenXR\1。
上述路径可以指向一个json文件,里面指定了游戏通过openxr插件对接的运行时库,这个openxr_client.dll就是运行时库。
该文件可以表示如下:
{
“file_format_version”:“1.0.0”,
“runtime”:
{
“library_path”:“D:\\tools\\xxxxxxx\\openxr_client.dll”
}
}
然后,打开游戏编辑器(比如UE4),其会读取注册表并找到需要加载的openxr_client.dll,加载成功后,其以VR预览启动的按钮就会启用。
此时点击VR预览,UE4会弹出个独立窗口,显示当前运行的关卡图像,请参考图14,其示出了本申请涉及的关卡图像示意图。此时,UE4里看到的画面是整幅图片,而不是左右眼的两张图片。
接着在推流应用的界面,点击预览纹理,即可将UE4的左右眼图像取到自己的窗口上。请参考图15,其示出了本申请涉及的另一种关卡图像示意图。此时显示的是从UE4里拿到了左右眼的两张纹理。
取到左右眼的纹理后,推流应用既可以渲染到窗口上进行展示,也能将纹理编码为视频流,推送到VR设备上进行显示。
请参考图16,其示出了本申请涉及的一种推流平台选择示意图。如图16所示,在steamvr推流方式下,在推流平台选择栏1601中选择steamxr推流,推流应用在steamvr调用vrpathreg程序注册自己的openvr_client.dll,steamvr游戏启动时,会从vrpathreg拉起该openvr_client.dll,然后将游戏的纹理送给该openvr_client,也能向steamvr写入Tracking数据以控制游戏。
头显的APP选择局域网推流并连接上PC端的推流应用后,就可以将steamvr加载起来,并将Tracking写入到steamvr的游戏中,请参考图17,其示出了本申请涉及的VR场景画面示意图,其中显示了推流软件取到的steamvr home的VR场景画面。
其中,请参考图18,其示出了头显等待连接的界面图。其中,图18示出了头显的APP软件等待连接PC端的推流软件的界面。
请参考图19,其示出了本申请涉及的头显的画面显示示意图。如图19所示,当连接成功后,推流软件就将steamvr home的画面推送到了头显进行显示。
S1202,提升进程优先级。
在上述推流应用在对VR游戏的游戏画面进行推流的场景中,推流进程启动时,该推流进程可以先修改自己的进程优先级为实时(Realtime),即最高优先级,从而让推流进程获取更多的Windows调度资源,并且让进程内的线程都能够提升运行优先级。
请参考图20,其示出了本申请涉及的进程优先级查看示意图。如图20所示,在推流进程的进程优先级设置完成后,在Windows任务管理器的界面中可以看到:推流应用的进程优先级2001的内容为实时。
S1203,提升推流进程的访问令牌的权限。
将推流进程的访问令牌的权限进行提升,以让其可以设定底层D3D驱动设备属性的权限。
其中,本申请可以使用以下3个接口来提升进程令牌访问权限:
OpenProcessToken、LookupPrivilegeValue和AdjustTokenPrivileges。
其中,上述3个接口都是Windows的API,首先通过“OpenProcessToken”来获取推流进程的访问令牌,然后通过这个令牌来调用:LookupPrivilegeValue函数,检索指定的权限在操作系统上使用的本地唯一标识符,以在本地表示指定的权限名称。最后通过AdjustTokenPrivileges函数启用或禁用上述访问令牌中的权限。默认情况下,Windows的进程是没有权限操作一些底层接口及驱动的,因此,本申请所示的方案要通过以上3个函数来开启对应的权限,进而提升推流进程下的d3d设备对GPU的调度优先级。
S1204,将D3D设备对GPU的调度优先级设置为实时。
创建d3d设备时,可以先调用D3DKMTSetProcessSchedulingPriorityClass接口将进程所使用的显卡设备(即上述D3D设备)的调度优先级设为实时。其中,上述步骤S1204可以进一步分为以下步骤S1204a和S1204b。
S1204a,对于D3D11设备,可以调用上述接口,将D3D11设备的调度优先级设为实时。
S1204b,对于D3D12设备,除了将调度优先级设为实时之外,还需要将D3D12的命令队列的优先级也同时设为最高。
S1205,上述设定完成后,即可以将D3D设备指针,发送给显卡接口进行使用,这样在编码时即使编程进程在后台,也能够保证编码的性能达到最优。
通过以上操作,可以将D3D11和D3D12游戏渲染的纹理实时的让显卡进行编码,解决了显卡在高负载下帧率下降的问题。
也就是说,Windows操作系统在显卡渲染高负载情况下,会默认将所有的显卡调度时间片都分配给游戏进程,而没有考虑显卡的编码任务的调度时间片。而本申请上述实施例所示的方案,通过提升推流进程,以及推流进程下的D3D设备的优先级,使得显卡在渲染高负载情况下,也能够正常向推流进程分配GPU资源。
通过本申请实施例所示的方案,当渲染负载高导致编码帧率下降时,可以通过提升显卡和D3D设备调度的优先级,来提升编码的帧率。
通过本申请实施例所示的方案,既可以适配传统的游戏推流场景,如云游戏或录屏直播游戏,也能适配VR类的推流游戏。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图21,其示出了本申请一个实施例提供的用于虚拟场景的推流装置的框图。该装置可以包括以下模块。
令牌权限设置模块2101,用于在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,所述第一权限是具有对图形渲染SDK驱动组件的属性进行设置的权限;
优先级设置模块2102,用于基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述第一优先级高于所述图形渲染SDK驱动组件调度GPU资源的默认优先级;
编码驱动模块2103,用于基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;
推流模块2104,用于对所述编码视频流进行推流处理。
在一些实施例中,所述令牌权限设置模块2101,用于,
调用第一应用程序编程接口API获取所述推流进程的访问令牌;
调用第二API将所述推流进程的访问令牌的权限设置为第一权限。
在一些实施例中,令牌权限设置模块2101,还用于在调用第二API将所述推流进程的访问令牌的权限设置为第一权限之前,调用第三API查询所述第一权限的权限值,所述权限值是所述访问令牌的权限在操作系统中的标识;
所述令牌权限设置模块2101,用于基于所述第一权限的权限值调用所述第二API,以将所述推流进程的访问令牌的权限设置为所述第一权限。
在一些实施例中,所述第二API用于启用或禁用指定的访问令牌中的权限。
在一些实施例中,所述第一优先级为调度GPU资源的优先级中的最高优先级。
在一些实施例中,所述优先级设置模块2102,还用于,
在编码驱动模块2103基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流之前,响应于所述推流进程的图形渲染SDK驱动组件支持命令队列的优先级设置,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件的命令队列的优先级设置为第二优先级,所述第二优先级高于图形渲染SDK驱动组件的命令队列的默认优先级。
在一些实施例中,所述第二优先级为图形渲染SDK驱动组件的命令队列的优先级中的最高优先级。
在一些实施例中,所述优先级设置模块2102,还用于在令牌权限设置模块2101将推流进程的访问令牌的权限设置为第一权限之前,将所述推流进程的优先级设置为第三优先级;所述第三优先级为进程的优先级中的最高优先级。
在一些实施例中,所述优先级设置模块2102,用于,
响应于渲染帧率与编码帧率之间的关系满足第一优化条件,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述渲染帧率是GPU对所述虚拟场景进行渲染的帧率,所述编码帧率是所述GPU对所述虚拟场景的画面进行编码的帧率;
或者,在创建所述推流进程的图形渲染SDK驱动组件时,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
在一些实施例中,所述第一优化条件包括以下条件中的至少一种:
所述编码帧率低于第一帧率阈值,且所述渲染帧率不低于第二帧率阈值;所述第一帧率阈值小于或者等于所述第二帧率阈值;
以及,所述编码帧率低于所述渲染帧率,且所述编码帧率与所述渲染帧率之间的差值大于帧率差值阈值。
在一些实施例中,所述优先级设置模块2102,用于,
获取所述虚拟场景的画面的显示参数,所述显示参数用于指示所述虚拟场景的画面的显示效果;
基于所述虚拟场景的画面的显示参数,获取GPU性能需求;
获取GPU的性能参数;
响应于GPU的所述性能参数不满足所述GPU性能需求,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
图22示出了本申请一个示例性实施例提供的计算机设备2200的结构框图。该计算机设备2200可以是终端设备,比如:个人电脑、VR设备、AR设备、智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器。计算机设备2200还可能被称为用户设备、便携式终端等其他名称。
通常,计算机设备2200包括有:处理器2201和存储器2202。
存储器2202可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是有形的和非暂态的。存储器2202还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器2202中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器2201所执行以实现本申请实施例中提供的方法中,由终端执行的全部或者部分步骤。
在一些实施例中,计算机设备2200还可选包括有:外围设备接口2203和至少一个外围设备。具体地,外围设备包括:射频电路2204、触摸显示屏2205、摄像头2206、音频电路2207和电源2208中的至少一种。
在一些实施例中,计算机设备2200还包括有一个或多个传感器2209。该一个或多个传感器2209包括但不限于:加速度传感器2210、陀螺仪传感器2211、压力传感器2212、光学传感器2213以及接近传感器2214。
本领域技术人员可以理解,上述示出的结构并不构成对计算机设备2200的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在一示例性实施例中,还提供了一种计算机可读存储介质,用于存储至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现上述各个实施例所示的方法中的全部或部分步骤。例如,该计算机可读存储介质可以是只读存储器、随机存取存储器、只读光盘、磁带、软盘和光数据存储设备等。
在一示例性实施例中,还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述各个实施例所示的方法中的全部或部分步骤。
本申请在收集用户的相关数据之前以及在收集用户的相关数据的过程中,都可以显示提示界面、弹窗或输出语音提示信息,该提示界面、弹窗或语音提示信息用于提示用户当前正在搜集其相关数据,使得本申请仅仅在获取到用户对该提示界面或者弹窗发出的确认操作后,才开始执行获取用户相关数据的相关步骤,否则(即未获取到用户对该提示界面或者弹窗发出的确认操作时),结束获取用户相关数据的相关步骤,即不获取用户的相关数据。
换句话说,本申请所采集的所有用户数据都是在用户同意并授权的情况下进行采集的,且相关用户数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
上述用户的相关数据包括信息(包括但不限于用户的账号)、数据(包括但不限于用户输入的文本数据、存储的文本/图片数据、展示的文本/图片数据等)及信号等数据。例如,本申请中涉及的用户数据是在充分授权的情况下获取的。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (14)
1.一种用于虚拟场景的推流方法,其特征在于,所述方法包括:
在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,所述第一权限是具有对图形渲染软件开发工具包SDK驱动组件的属性进行设置的权限;
基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述第一优先级高于所述图形渲染SDK驱动组件调度GPU资源的默认优先级;
基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;
对所述编码视频流进行推流处理。
2.根据权利要求1所述的方法,其特征在于,所述将推流进程的访问令牌的权限设置为第一权限,包括:
调用第一应用程序编程接口API获取所述推流进程的访问令牌;
调用第二API将所述推流进程的访问令牌的权限设置为第一权限。
3.根据权利要求2所述的方法,其特征在于,所述调用第二API将所述推流进程的访问令牌的权限设置为第一权限之前,还包括:
调用第三API查询所述第一权限的权限值,所述权限值是所述访问令牌的权限在操作系统中的标识;
所述调用第二API将所述推流进程的访问令牌的权限设置为第一权限,包括:
基于所述第一权限的权限值调用所述第二API,以将所述推流进程的访问令牌的权限设置为所述第一权限。
4.根据权利要求2所述的方法,其特征在于,所述第二API用于启用或禁用指定的访问令牌中的权限。
5.根据权利要求1所述的方法,其特征在于,所述第一优先级为调度GPU资源的优先级中的最高优先级。
6.根据权利要求1所述的方法,其特征在于,所述基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流之前,还包括:
响应于所述推流进程的图形渲染SDK驱动组件支持命令队列的优先级设置,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件的命令队列的优先级设置为第二优先级,所述第二优先级高于图形渲染SDK驱动组件的命令队列的默认优先级。
7.根据权利要求6所述的方法,其特征在于,所述第二优先级为图形渲染SDK驱动组件的命令队列的优先级中的最高优先级。
8.根据权利要求1至7任一所述的方法,其特征在于,所述将推流进程的访问令牌的权限设置为第一权限之前,还包括:
将所述推流进程的优先级设置为第三优先级;所述第三优先级为进程的优先级中的最高优先级。
9.根据权利要求1至7任一所述的方法,其特征在于,所述基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级,包括:
响应于渲染帧率与编码帧率之间的关系满足第一优化条件,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述渲染帧率是GPU对所述虚拟场景进行渲染的帧率,所述编码帧率是所述GPU对所述虚拟场景的画面进行编码的帧率;
或者,
在创建所述推流进程的图形渲染SDK驱动组件时,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
10.根据权利要求9所述的方法,其特征在于,所述第一优化条件包括以下条件中的至少一种:
所述编码帧率低于第一帧率阈值,且所述渲染帧率不低于第二帧率阈值;所述第一帧率阈值小于或者等于所述第二帧率阈值;
以及,所述编码帧率低于所述渲染帧率,且所述编码帧率与所述渲染帧率之间的差值大于帧率差值阈值。
11.根据权利要求1至7任一所述的方法,其特征在于,所述基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级,包括:
获取所述虚拟场景的画面的显示参数,所述显示参数用于指示所述虚拟场景的画面的显示效果;
基于所述虚拟场景的画面的显示参数,获取GPU性能需求;
获取GPU的性能参数;
响应于GPU的所述性能参数不满足所述GPU性能需求,基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级。
12.一种用于虚拟场景的推流装置,其特征在于,所述装置包括:
令牌权限设置模块,用于在对虚拟场景的画面进行推流的过程中,将推流进程的访问令牌的权限设置为第一权限,所述第一权限是具有对图形渲染SDK驱动组件的属性进行设置的权限;
优先级设置模块,用于基于所述第一权限,将所述推流进程的图形渲染SDK驱动组件调度图形处理器GPU资源的优先级设置为第一优先级;所述第一优先级高于所述图形渲染SDK驱动组件调度GPU资源的默认优先级;
编码驱动模块,用于基于所述图形渲染SDK驱动组件,驱动GPU对所述虚拟场景的画面进行编码,获得所述虚拟场景的编码视频流;
推流模块,用于对所述编码视频流进行推流处理。
13.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器存储有至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行以实现如权利要求1至11任一所述的用于虚拟场景的推流方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至11任一所述的用于虚拟场景的推流方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310808651.2A CN116546228B (zh) | 2023-07-04 | 2023-07-04 | 用于虚拟场景的推流方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310808651.2A CN116546228B (zh) | 2023-07-04 | 2023-07-04 | 用于虚拟场景的推流方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116546228A true CN116546228A (zh) | 2023-08-04 |
CN116546228B CN116546228B (zh) | 2023-09-22 |
Family
ID=87450972
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310808651.2A Active CN116546228B (zh) | 2023-07-04 | 2023-07-04 | 用于虚拟场景的推流方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116546228B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117596377A (zh) * | 2024-01-18 | 2024-02-23 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140286390A1 (en) * | 2013-03-20 | 2014-09-25 | Nvidia Corporation | Encoder controller graphics processing unit and method of encoding rendered graphics |
US20180373546A1 (en) * | 2017-06-22 | 2018-12-27 | Vmware, Inc. | Hybrid software and gpu encoding for ui remoting |
CN113542757A (zh) * | 2021-07-20 | 2021-10-22 | Oppo广东移动通信有限公司 | 云应用的图像传输方法、装置、服务器及存储介质 |
CN113794887A (zh) * | 2021-08-17 | 2021-12-14 | 镕铭微电子(济南)有限公司 | 一种游戏引擎中视频编码的方法及相关设备 |
-
2023
- 2023-07-04 CN CN202310808651.2A patent/CN116546228B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140286390A1 (en) * | 2013-03-20 | 2014-09-25 | Nvidia Corporation | Encoder controller graphics processing unit and method of encoding rendered graphics |
US20180373546A1 (en) * | 2017-06-22 | 2018-12-27 | Vmware, Inc. | Hybrid software and gpu encoding for ui remoting |
CN113542757A (zh) * | 2021-07-20 | 2021-10-22 | Oppo广东移动通信有限公司 | 云应用的图像传输方法、装置、服务器及存储介质 |
CN113794887A (zh) * | 2021-08-17 | 2021-12-14 | 镕铭微电子(济南)有限公司 | 一种游戏引擎中视频编码的方法及相关设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117596377A (zh) * | 2024-01-18 | 2024-02-23 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
CN117596377B (zh) * | 2024-01-18 | 2024-05-28 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN116546228B (zh) | 2023-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108762937B (zh) | 配置信息发送方法、获取方法、装置及终端 | |
WO2021057830A1 (zh) | 一种信息处理方法及电子设备 | |
CN113542757B (zh) | 云应用的图像传输方法、装置、服务器及存储介质 | |
CN109032793B (zh) | 资源配置的方法、装置、终端及存储介质 | |
US7631309B2 (en) | Methods and system for managing computational resources of a coprocessor in a computing system | |
US20140347372A1 (en) | Load balancing between general purpose processors and graphics processors | |
US5646866A (en) | Preloading files for subsequent processing | |
CN112749022B (zh) | 相机资源访问方法、操作系统、终端和虚拟相机 | |
CN111818120A (zh) | 端云用户交互方法、系统及相应设备、存储介质 | |
US20150135200A1 (en) | Method, system and an executable piece of code for the virtualization of a hardware resource associated with a computer system | |
WO2022257699A1 (zh) | 图像画面显示方法、装置、设备、存储介质及程序产品 | |
JP7100154B2 (ja) | プロセッサコアのスケジューリング方法、装置、端末及び記憶媒体 | |
CN110955499B (zh) | 处理器核心配置方法、装置、终端及存储介质 | |
CN110795056B (zh) | 调节显示参数的方法、装置、终端及存储介质 | |
EP3311565B1 (en) | Low latency application streaming using temporal frame transformation | |
CN116546228B (zh) | 用于虚拟场景的推流方法、装置、设备及存储介质 | |
CN113457160A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
US20240307767A1 (en) | Cloud Data Processing | |
CN112799801B (zh) | 一种模拟鼠标指针绘制方法、装置、设备和介质 | |
CN110968395A (zh) | 一种在模拟器中处理渲染指令的方法及移动终端 | |
US20210236928A1 (en) | Asset aware computing architecture for graphics processing | |
CN111124668A (zh) | 内存释放方法、装置、存储介质及终端 | |
CN114968152B (zh) | 减少virtio-gpu额外性能损耗的方法 | |
CN113473226B (zh) | 提高视频渲染效率的方法、装置、计算机设备及存储介质 | |
WO2021052488A1 (zh) | 一种信息处理方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40091417 Country of ref document: HK |