CN117596377B - 画面推流方法、装置、电子设备、存储介质及程序产品 - Google Patents
画面推流方法、装置、电子设备、存储介质及程序产品 Download PDFInfo
- Publication number
- CN117596377B CN117596377B CN202410072006.3A CN202410072006A CN117596377B CN 117596377 B CN117596377 B CN 117596377B CN 202410072006 A CN202410072006 A CN 202410072006A CN 117596377 B CN117596377 B CN 117596377B
- Authority
- CN
- China
- Prior art keywords
- virtual scene
- head
- push
- dynamic link
- link library
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 100
- 238000003860 storage Methods 0.000 title claims abstract description 15
- 238000009877 rendering Methods 0.000 claims abstract description 159
- 230000008569 process Effects 0.000 claims description 39
- 230000015654 memory Effects 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 14
- 230000004044 response Effects 0.000 claims description 8
- 238000013075 data extraction Methods 0.000 claims 1
- 210000003128 head Anatomy 0.000 description 64
- 210000001508 eye Anatomy 0.000 description 58
- 208000013057 hereditary mucoepithelial dysplasia Diseases 0.000 description 47
- 238000010586 diagram Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 16
- 238000012545 processing Methods 0.000 description 10
- 230000003993 interaction Effects 0.000 description 8
- 238000011161 development Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 208000002173 dizziness Diseases 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 210000004556 brain Anatomy 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000005452 bending Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 210000005252 bulbus oculi Anatomy 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000004424 eye movement Effects 0.000 description 1
- 230000004886 head movement Effects 0.000 description 1
- 238000007654 immersion Methods 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 201000003152 motion sickness Diseases 0.000 description 1
- 210000003205 muscle Anatomy 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 238000004549 pulsed laser deposition Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000003826 tablet Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/10—Processing, recording or transmission of stereoscopic or multi-view image signals
- H04N13/194—Transmission of image signals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/011—Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
- G06F3/012—Head tracking input arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/011—Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
- G06F3/013—Eye tracking input arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/04815—Interaction with a metaphor-based environment or interaction object displayed as three-dimensional, e.g. changing the user viewpoint with respect to the environment or object
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/006—Mixed reality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/10—Processing, recording or transmission of stereoscopic or multi-view image signals
- H04N13/106—Processing image signals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N13/00—Stereoscopic video systems; Multi-view video systems; Details thereof
- H04N13/30—Image reproducers
- H04N13/332—Displays for viewing with the aid of special glasses or head-mounted displays [HMD]
- H04N13/344—Displays for viewing with the aid of special glasses or head-mounted displays [HMD] with head-mounted left-right displays
-
- 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/60—Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client
- H04N21/63—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
- H04N21/643—Communication protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2203/00—Indexing scheme relating to G06F3/00 - G06F3/048
- G06F2203/01—Indexing scheme relating to G06F3/01
- G06F2203/012—Walk-in-place systems for allowing a user to walk in a virtual environment while constraining him to a given position in the physical environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Human Computer Interaction (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请提供了一种画面推流方法、装置、电子设备、存储介质及程序产品;方法包括:响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定所述目标推流方式;在所述目标推流方式为所述第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;所述目标应用用于渲染所述虚拟场景画面;对所述纹理数据进行编码,得到第一纹理编码结果;将所述第一纹理编码结果发送至头戴式显示设备,以使所述头戴式显示设备解码所述第一纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。通过本申请,能够实现将PC端虚拟场景画面的推流至头戴式显示设备。
Description
技术领域
本申请涉及虚拟现实技术领域,尤其涉及一种画面推流方法、装置、电子设备、存储介质及程序产品。
背景技术
随着虚拟场景相关的应用的不断发展,越来越多的硬件厂商开始使用openxr的渲染及交互协议来实现虚拟画面的展示与交互。例如已经存在多家硬件厂商在硬件设备中植入基于openxr开发的头戴式显示器(HMD,Head Mounted Display)软件装置,以用来适配他们自身硬件的渲染及手柄交互。
相关技术中,很多电脑(PC,Personal Computer)端的虚拟现实应用是通过推流的方式将画面和声音推送到HMD端。但目前缺乏基于openxr协议将虚拟现实应用的画面推流至头戴式显示器的成熟技术。
发明内容
本申请实施例提供一种画面推流方法、装置、电子设备、存储介质及程序产品,能够基于实现将PC端虚拟场景画面的推流至头戴式显示设备。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种画面推流方法,所述方法包括:响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定所述目标推流方式;在所述目标推流方式为所述第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;所述目标应用用于渲染所述虚拟场景画面;对所述纹理数据进行编码,得到第一纹理编码结果;将所述第一纹理编码结果发送至头戴式显示设备,以使所述头戴式显示设备解码所述第一纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。
本申请实施例提供一种画面推流装置,包括:推流方式确定模块,用于响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定所述目标推流方式;纹理数据获取模块,用于在所述目标推流方式为所述第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;所述目标应用用于渲染所述虚拟场景画面;编码模块,用于对所述纹理数据进行编码,得到第一纹理编码结果;编码结果发送模块,用于将所述第一纹理编码结果发送至头戴式显示设备,以使所述头戴式显示设备解码所述第一纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。
在一些实施例中,所述目标应用加载有所述第一推流方式对应的第一动态链接库;所述纹理数据获取模块,还用于通过所述第一动态链接库确定虚拟场景画面的渲染开始时间;在当前时刻到达所述渲染开始时间时,从所述头戴式显示设备获取位姿信息;通过所述第一动态链接库将所述位姿信息发送至所述目标应用,以使所述目标应用基于所述位姿信息渲染所述虚拟场景画面,得到所述虚拟场景画面的纹理数据;在所述虚拟场景画面渲染结束时,通过所述第一动态链接库从所述目标应用获取所述虚拟场景画面的纹理数据。
在一些实施例中,所述头戴式显示设备的位姿信息中包括头部位姿信息以及眼部位姿信息;所述纹理数据获取模块,还用于通过所述第一动态链接库将所述眼部位姿信息发送至所述目标应用;通过所述第一动态链接库将所述头部位姿信息初始化为0,并将初始化为0的头部位姿信息发送至所述目标应用。
在一些实施例中,所述画面推流装置还包括纹理创建模块,用于通过所述第一动态链接库创建多个待渲染纹理;所述纹理数据获取模块,还用于通过所述第一动态链接库将所述虚拟场景画面对应的待渲染纹理发送至所述目标应用,以使所述目标应用基于所述位姿信息渲染所述待渲染纹理,得到所述虚拟场景画面的纹理数据。
在一些实施例中,所述纹理数据获取模块,还用于通过所述第一动态链接库确定所述目标应用的渲染帧率;通过所述第一动态链接库,基于所述渲染帧率确定虚拟场景画面的渲染开始时间。
在一些实施例中,所述纹理数据获取模块,还用于在第i帧虚拟场景画面渲染结束时,通过所述第一动态链接库记录所述第i帧虚拟场景画面的渲染结束时间;i为大于0的整数;针对第i+1帧虚拟场景画面,通过所述第一动态链接库基于所述渲染帧率,以及所述第i帧虚拟场景画面的渲染结束时间,确定所述第i+1帧虚拟场景画面的渲染开始时间。
在一些实施例中,所述画面推流装置还包括第二推流模块,用于在所述目标推流方式为所述第二推流方式的情况下,通过所述第二推流方式对应的推流进程获取所述目标应用的虚拟场景画面的纹理数据;对所述纹理数据进行编码,得到第二纹理编码结果;将所述第二纹理编码结果发送至所述头戴式显示设备,以使所述头戴式显示设备解码所述第二纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。
在一些实施例中,所述第二推流模块还用于将所述第二推流方式对应的第二动态链接库注册到所述第二推流方式对应的推流进程中;从所述头戴式显示设备获取头部位姿信息;通过所述第二动态链接库将所述头部位姿信息写入所述推流进程;所述推流进程用于基于所述头部位姿信息渲染得到所述虚拟场景画面的纹理数据;通过所述第二动态链接库从所述推流进程获取所述纹理数据。
本申请实施例提供一种电子设备,所述电子设备包括:
存储器,用于存储计算机可执行指令或者计算机程序;
处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现本申请实施例提供的画面推流方法。
本申请实施例提供一种计算机可读存储介质,存储有计算机程序或计算机可执行指令,用于被处理器执行时实现本申请实施例提供的画面推流方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或计算机可执行指令,所述计算机程序或计算机可执行指令被处理器执行时,实现本申请实施例提供的画面推流方法。
本申请实施例具有以下有益效果:
在将目标应用的虚拟场景画面推流至头戴式显示设备时,至少从第一推流方式和第二推流方式中确定所述目标推流方式,其中,在使用第一推流方式的情况下,首先从目标应用获取虚拟场景画面的纹理数据,然后,对纹理数据进行编码,得到第一纹理编码结果,再将第一纹理编码结果发送至头戴式显示设备,头戴式显示设备可以解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。因此本申请实施例应用于PC端场景中时,可以选择第一推流方式和第二推流方式中任意一种推流方式,以适配不同硬件厂商开发的头戴式显示设备,例如用户使用的是基于openxr开发的头戴式显示设备,则可选用第一推流方式,直接对接目标应用,获取目标应用的虚拟场景画面的纹理数据,将对纹理数据编码得到第一纹理编码结果发送至头戴式显示设备实现画面推流,进而实现了用户在使用任意硬件厂商开发的头戴式显示设备时,都不仅能够体验头戴式显示设备自身携带的应用,还能够体验PC端的目标应用的虚拟场景画面。
附图说明
图1是本申请实施例中头显的位置和方向表示示意图;
图2为相关技术中的VR渲染与手机安卓渲染的流程示意图;
图3是本申请实施例提供的画面推流***架构的结构示意图;
图4是本申请实施例提供的电子设备的结构示意图;
图5是本申请实施例提供的画面推流方法的流程示意图;
图6是本申请涉及的左右眼画面的交叉融合示意图;
图7是本申请实施例提供的DPT的客户端界面示意图;
图8是本申请实施例提供的DPT选择steamvr推流后的客户端界面示意图;
图9是本申请实施例提供的DPT选择openvr推流后的客户端界面示意图;
图10是本申请实施例提供的游戏编辑器的客户端界面示意图;
图11是本申请实施例提供的游戏编辑器上的关卡预览示意图;
图12是本申请实施例提供的openxr和steamvr的推流过程示意图;
图13是本申请实施例提供的游戏侧与VRClient的交互流程图;
图14是本申请实施例提供的游戏的渲染流程示意图;
图15是本申请实施例提供的VRClient创建的多个纹理示意图;
图16是本申请实施例提供的DPT的图形渲染设备的选择界面示意图;
图17是本申请实施例提供的steamvr内部的渲染流程图;
图18是本申请实施例提供的steamvr推流的流程示意图;
图19是本申请实施例提供的游戏渲染后的左右眼纹理示意图;
图20是本申请实施例提供的头显解码后得到的左右眼纹理示意图;
图21是本申请实施例提供的HMD上显示的左右眼纹理示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
本申请实施例中,术语“模块”或“单元”是指有预定功能的计算机程序或计算机程序的一部分,并与其他相关部分一起工作以实现预定目标,并且可以通过使用软件、硬件(如处理电路或存储器)或其组合来全部或部分实现。同样的,一个处理器(或多个处理器或存储器)可以用来实现一个或多个模块或单元。此外,每个模块或单元都可以是包含该模块或单元功能的整体模块或单元的一部分。
除非另有定义,本申请实施例所使用的所有的技术和科学术语与所属技术领域的技术人员通常理解的含义相同。本申请实施例中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)openxr:用于游戏和虚拟现实技术(VR,Virtual Reality)领域的图像渲染及设备接入软件开发工具包(SDK,Software Development Kit,)。
2)steamvr:也称作openvr,是openxr标准的前身。
3)d3d11和d3d12:Windows***的图形渲染SDK,也称为DirectX或Direct3D(D3D)。目前大部分电脑游戏(PC game,Personal Computer game)使用的是d3d11,少部分新游戏使用了d3d12。
4)取图:将游戏绘制完成的纹理,进行拷贝和传输,一般用于二次渲染和视频编码。
5)推流:在本申请中,推流是指将虚拟场景画面经过编码后发送到显示端进行显示。例如,在VR游戏中,推流是指将游戏的左右眼画面和声音,进行音视频编码发送到头显侧(例如头戴式显示器HMD)进行播放;头显侧将Tracking数据发回到游戏侧(例如Windows端)进行游戏操控。
6)Tracking数据(轨迹数据):VR中的术语,主要包括HMD的位姿信息和两个手柄的位姿信息。
7)编码:一般包括硬件编码和软件编码两种编码方式,硬件编码是指使用图形处理器(GPU,Graphics Processing Unit)的算力来实现快速视频编码的技术,它的编码速度相对于中央处理器(CPU,Central Processing Unit)更快;软件编码是指用CPU的算力进行视频编码,因为CPU的缓存和算力有限,不适合高分辨率和实时度较高的场景。
8)VRClient:本申请中是指动态链接库,可以是openvr_client.dll或openxr_client.dll,它们分别由steamvr或实现了openxr协议的游戏所调用,主要目的用于和游戏编辑器对接,例如,控制游戏绘制的渲染帧率,为游戏创建纹理并交给游戏绘制等操作都在VRClient中进行。
9)头戴式显示器HMD:一般指VR眼镜,有时也称为头盔或头显。在monado SDK中会针对每个厂商创建一个软件装置来对接硬件的输入(手柄按键、头部Tracking数据等),通过将上述硬件的输入写入到游戏编辑器,实现对游戏的操控。
10)四元数(Quaternion):四元数常用于表示三维空间的旋转变换,也可以认为是三维复数区域,其中x、y、z为虚部,w为实部(固定值为1)。
11)位姿信息:包括位置(position)和方向(orientation),如图1所示,位置表示了头显的上下左右和前后的位移;方向通常也和四元数关联起来,用于表示头显的在空间中的定向:x轴(俯仰,pitch)、y轴(偏航,yaw)和z轴(滚动,roll)。
12)monado:一个基于openxr协议的开源SDK,是一些厂商联合开发的扩展现实(XR,Extended Reality)SDK,已逐步成为VR以及XR业界的标准。monado SDK编译后可运行于HMD,也可以运行在Windows端。
直接安装在HMD中的VR游戏仍然是极少部分,大多数VR游戏安装于PC端(例如Windows端,本申请中都以Windows端举例说明,但也可以适用于PC端的其他操作***),并通过推流的方式将VR游戏的画面和声音推送到HMD供用户体验。因此,Windows端的推流软件在VR游戏的开发以及运行中不可或缺。相关技术中,目前Windows***的推流软件无法适用于基于openxr协议的monado开源项目,导致使用monado SDK的HMD无法体验Windows端的VR应用。
另外,HMD可以通过get_tracked_pose接口获取头部的位置和方向。get_tracked_pose接口更多的是用于头盔的移动预测,用于减少头部实际移动和画面移动的延迟。用户在使用VR时产生的眩晕感,有一部分就来自于身体和画面的不同步,所以get_tracked_pose接口就是为了让游戏和头盔尽可能的画面同步。HMD还可以通过get_view_poses接口获取两个眼球的位置和方向,以及视场(fov),其中,视场由HMD的硬件参数决定。但是上述通过多个接口获取位姿信息的方案是在HMD端实现的,相关技术中尚无一个方案是在串流(推流)的场景进行写入数据的,也即没有可以用于Windows端推流场景的monado SDK实现方案。若在推流场景中,将头显的头部和双眼的位姿信息,按照上述逻辑进行写入Windows端的游戏编辑器,会出现很严重的眩晕感,当用户转动头部时,周围的场景也会跟着转动,造成了类似站在转盘上的感觉。正常的场景是用户转动头部,周围的场景不应该跟着转动,而是双眼看到的物体跟着眼球进行运动并且符合大脑的预期,晕动症在于眼睛看到的物体的运动,与头部肌肉转动的不能一致,也就是不符合大脑预期。
openxr的游戏运行会与手机端游戏运行存在明显差异,以某家硬件设备的openxrruntime(XR运行环境)为例,如图2所示,手机端未连接HMD时,假设游戏在手机端游戏运行即为安卓模式,在安卓渲染过程中,首先进行创建窗口,即创建游戏画面显示的窗口,然后基于显示引擎渲染游戏画面,将渲染完成的游戏画面发送至显示器(手机界面)进行显示。手机端连接HMD时,基于SDK切换模式,openxr的游戏运行即为VR模式,在VR渲染的过程中,会进行左眼纹理渲染以及右眼纹理渲染,将渲染完成的左右眼纹理发送至显示器(HMD)。openxr会为VR的显示屏渲染左右眼两幅纹理,在渲染过程中,会进行时间预测以及位姿预测。时间预测是预测VR下一帧图像的渲染时间和上屏显示时间,位姿预测会依赖于时间预测给出的渲染时间和上屏显示时间,预测用户下一个姿势的位移坐标。例如,如果用户正在显示一个图像出现在一个物体的顶部,当用户已经旋转了头部时(VR眼镜戴在头上),这个物体可能仍然停留在那里,或者比用户预期的或快或慢移动。但通过使用上述时间预测和位姿预测,可以实现更佳的图像和物体之间的对应关系。
同理,在VR游戏推流时,Windows端的VR游戏也实时运行了一个openxr runtime。它会根据显卡渲染和设定的渲染帧率来预测VR游戏下一帧的渲染时间。由于有两个openxrruntime(HMD和Windows),故头显预测的头部位姿(位置和方向)不能精确的与Windowsopenxr runtime相结合(因为Windows侧的渲染预测时间是根据显卡、游戏逻辑来进行计算的),因此将头部和双眼的位姿信息传递给Windows openxr runtime的get_tracked_pose和get_view_poses接口后,会导致眼睛看到的图像会稍微快进或延迟转动,进而造成眩晕感。
随着越来越多的厂商开始以monado作为openxr的实现SDK,在monado SDK的基础上开发一个用于自身硬件推流用的虚拟HMD势在必行。因此,基于相关技术中所存在的上述至少一个问题,本申请实施例基于monado SDK开发了一个虚拟的HMD装置(XR_DirectPreview_Tool,简称DPT)用于VR游戏的推流使用,既可以支持openxr推流,也能支持steamvr推流,以弥补monado在PC端VR游戏推流功能的空白。本申请实施例提供的画面推流方法可以应用于DPT上,基于monado SDK源代码实现openxr的推流方式,接收来自于HMD的轨迹数据,并将VR游戏渲染完成后的纹理数据进行编码后发送到HMD进行显示。
其中,本申请实施例提供的画面推流方法中,首先,响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式;然后,在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;目标应用用于渲染虚拟场景画面;再然后,对纹理数据进行编码,得到第一纹理编码结果;最后,将第一纹理编码结果发送至头戴式显示设备,以使头戴式显示设备解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。如此,将本申请实施例提供的画面推流方法应用于Windows端场景中时,可以实现Windows端虚拟场景画面的推流。
这里,首先说明本申请实施例的画面推流设备的示例性应用,该画面推流设备是用于实现画面推流方法的电子设备。在一种实现方式中,本申请实施例提供的画面推流设备(即电子设备)可以实施为终端,也可以实施为服务器。在一种实现方式中,本申请实施例提供的画面推流设备可以实施为笔记本电脑,平板电脑,台式计算机,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备,智能机器人,智能家电和智能车载设备等任意的具备数据处理、画面推流功能的终端;在另一种实现方式中,本申请实施例提供的画面推流设备还可以实施为服务器,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,Content Delivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。下面,将说明画面推流设备实施为服务器时的示例性应用。
参见图3,图3是本申请实施例提供的画面推流***的架构示意图,为实现支撑一个画面推流应用,通过画面推流应用将目标应用的虚拟场景画面推流至头戴式显示设备,本申请实施例的终端上至少安装有该画面推流应用以及目标应用。画面推流***100中至少包括头戴式显示设备500、终端400、网络300和服务器200,其中服务器200是画面推流应用的服务器。服务器200可以构成本申请实施例的画面推流设备,即通过服务器200实现本申请实施例的画面推流方法。终端400通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
在对目标应用的虚拟场景画面进行推流时,用户可以通过终端400上运行的画面推流应用输入目标推流方式选择操作,终端400响应于目标推流方式选择操作生成针对目标推流方式的选择指令,并通过网络300将针对目标推流方式的选择指令发送给服务器200。服务器200接收到针对目标推流方式的选择指令之后,响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式;然后,在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;目标应用用于渲染虚拟场景画面;再然后,对纹理数据进行编码,得到第一纹理编码结果;最后,将第一纹理编码结果发送至头戴式显示设备500,以使头戴式显示设备500解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
在一些实施例中,还可以由终端400执行本申请实施例的画面推流方法,也就是说,用户可以通过终端400上运行的画面推流应用输入针对目标推流方式的选择指令,终端400响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式;然后,在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;目标应用用于渲染虚拟场景画面;再然后,对纹理数据进行编码,得到第一纹理编码结果;最后,将第一纹理编码结果发送至头戴式显示设备500,以使头戴式显示设备500解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
本申请实施例所提供的画面推流方法还可以基于云平台并通过云技术来实现,例如,上述服务器200可以是云端服务器。通过云端服务器响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式;然后,在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;目标应用用于渲染虚拟场景画面;再然后,对纹理数据进行编码,得到第一纹理编码结果;最后,将第一纹理编码结果发送至头戴式显示设备500,以使头戴式显示设备500解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
这里需要说明的是,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络***的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台***进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的***后盾支撑,其可以通过云计算来实现。
参见图4,图4是本申请实施例提供的电子设备的结构示意图,图4所示的电子设备包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线***440耦合在一起。可理解,总线***440用于实现这些组件之间的连接通信。总线***440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线***440。
处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器 410的一个或多个存储设备。
存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。
在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作***451,包括用于处理各种基本***服务和执行硬件相关任务的***程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他电子设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作***设备和显示内容和信息的用户接口);
输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图4示出了存储在存储器450中的画面推流装置455,其可以是程序和插件等形式的软件,包括以下软件模块:推流方式确定模块4551、纹理数据获取模块4552、编码模块4553和编码结果发送模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的画面推流方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、数字信号处理器(DSP,Digital Signal Processor)、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
本申请各实施例提供的画面推流方法可以由电子设备来执行,其中,该电子设备可以是服务器也可以是终端,即本申请各实施例的画面推流方法可以通过服务器来执行,也可以通过终端来执行,或者也可以通过服务器与终端之间交互执行。
图5是本申请实施例提供的画面推流方法的一个可选的流程示意图,下面将结合图5示出的步骤进行说明,如图5所示,以画面推流方法的执行主体为服务器为例进行说明,方法包括以下步骤S101至步骤S104:
步骤S101,响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式。
这里,用户可以通过终端上的画面推流应用(DPT)输入针对目标推流方式的选择指令。DPT可以至少支持两种推流方式:第一推流方式和第二推流方式。其中,第一推流方式可以为openxr推流方式,openxr推流方式基于monado软件开发包SDK实现。第二推流方式可以为steamvr推流方式。响应于针对目标推流方式的选择指令,可以选择使用openxr推流方式或steamvr推流方式来进行推流。
步骤S102,在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据。
目标应用用于渲染虚拟场景画面。
这里,目标应用为虚拟现实的相关应用,可以支持HMD显示目标应用的虚拟场景画面。示例性的,在用户体验目标应用的场景下,DPT可以部署在用户的个人PC端(例如Windows端),目标应用可以为VR游戏,目标应用的虚拟场景画面为VR游戏的游戏画面。在目标应用的开发场景下,DPT可以部署在云服务器端,目标应用可以为VR游戏的游戏编辑器,目标应用的虚拟场景画面为VR游戏的游戏画面。其中,VR游戏的游戏编辑器为制作开发VR游戏的工具,例如Unity(游戏引擎)和UE(虚幻引擎,Unreal Engine)4等,游戏开发者可以在游戏编辑器中编辑VR游戏的某一关卡场景,或者编辑关卡中的每一帧游戏场景。需要说明的是,本申请实施例中目标应用的启动步骤与目标推流方式的选择步骤不存在先后顺序。也即,用户可以先启动目标应用,再启动DPT选择目标推流方式;或者,用户也可以先启动DPT选择目标推流方式,再启动目标应用。
本申请实施例中,目标应用在运行过程中会渲染虚拟场景画面,得到虚拟场景画面的纹理数据。其中,纹理是一种图像格式,主要是用于画面的渲染,例如VR游戏中虚拟场景画面的渲染。虚拟场景画面的纹理数据可以包括虚拟场景画面对应的图像上每一像素点的纹理坐标以及RGB(红Red、绿Green、蓝Blue)值。示例性的,在目标推流方式为openxr推流方式时,可以直接从游戏编辑器获取VR游戏的虚拟场景画面的纹理数据。
在一些实施例中,目标应用加载有第一推流方式对应的第一动态链接库。步骤S102中从目标应用获取虚拟场景画面的纹理数据可以通过以下方式实现:通过第一动态链接库确定虚拟场景画面的渲染开始时间;在当前时刻到达渲染开始时间时,从头戴式显示设备获取位姿信息;通过第一动态链接库将位姿信息发送至目标应用,以使目标应用基于位姿信息渲染虚拟场景画面,得到虚拟场景画面的纹理数据;头戴式显示设备上运行有monado SDK,并通过monado SDK项目获取位姿信息;在虚拟场景画面渲染结束时,通过第一动态链接库从目标应用获取虚拟场景画面的纹理数据。
这里,第一动态链接库为openxr_client.dll,是可以被实现了openxr协议的VR游戏所调用的VRClient。示例性的,在确定目标推流方式为openxr方式后,画面推流应用DPT可以在Windows注册表中注册openxr对接的openxr_client.dll路径。之后,DPT可以在注册表路径下写入上述路径,上述路径可以指向一个json文件,里面指定了目标应用可以通过openxr插件对接的运行时库,这个openxr_client.dll即为运行时库。用户可以预先在第一动态链接库中写入渲染帧率。然后,可以通过第一动态链接库基于渲染帧率确定每一帧虚拟场景画面的渲染开始时间。帧率为每秒帧数(FPS,Frames Per Second),渲染帧率是指目标应用每秒绘制虚拟场景画面的次数,例如游戏每秒绘制图像的次。渲染帧率通常可以设置为30FPS、60FPS、72FPS和90FPS。
本申请实施例中,在对目标应用的虚拟场景画面进行推流前,可以通过第一动态链接库创建多个待渲染纹理。在通过第一动态链接库将位姿信息发送至目标应用之前,还可以通过第一动态链接库将虚拟场景画面对应的待渲染纹理发送至目标应用,以使目标应用基于位姿信息渲染待渲染纹理,得到虚拟场景画面的纹理数据。
这里,第一动态链接库中可以预先创建多个共享纹理,此时,共享纹理可为空白的画布。共享纹理可以包括多种纹理类型,例如深度纹理、颜色纹理等。通常情况下,虚拟场景画面渲染只需要用到颜色纹理,因此可以通过第一动态链接库将多个共享纹理中的颜色纹理确定为待渲染纹理。每一帧虚拟场景画面对应一个待渲染纹理。针对任一帧虚拟场景画面,在当前时刻到达该帧虚拟场景画面的渲染开始时间时,可以通过第一动态链接库将该帧虚拟场景画面所需的待渲染纹理发送至目标应用。然后,可以通过第一动态链接库获取当前时刻头戴式显示设备的位姿信息,并将该位姿信息也发送至目标应用。目标应用基于该位姿信息对上述待渲染纹理进行渲染,得到该帧虚拟场景画面的纹理数据。在该帧虚拟场景画面渲染结束时,可以通过第一动态链接库从目标应用获取该帧虚拟场景画面的纹理数据。
其中,DPT可以从头戴式显示设备获取头戴式显示设备的位姿信息,再写入至第一动态链接库。示例性的,头戴式显示设备可以为HMD。其中,头戴式显示设备也是基于monadoSDK实现的,头戴式显示设备上运行的monado SDK可以直接获取头部位姿信息、眼部位姿信息,以及头戴式显示设备连接的手柄信息,并将上述头部位姿信息、眼部位姿信息以及手柄信息等发送至DPT。眼部位姿信息可以包括左眼位姿信息以及右眼位姿信息。纹理数据可以包括左眼纹理数据以及右眼纹理数据。左眼纹理数据是目标应用基于左眼位姿信息对待渲染纹理渲染得到的虚拟场景画面的纹理数据,在HMD解码得到左眼纹理数据后,可以得到用于向用户左眼提供的左眼画面。右眼纹理数据是目标应用基于右眼位姿信息对待渲染纹理渲染得到的虚拟场景画面的纹理数据,在HMD解码得到右眼纹理数据后,可以得到用于向用户右眼提供的右眼画面。参见图6,HMD可以通过monado SDK中的get_view_poses接口,获取VR游戏的左眼纹理数据以及右眼纹理数据,对左眼纹理数据进行绘制得到左眼画面,对右眼纹理数据进行绘制得到右眼画面,其中,将左眼画面与右眼画面交叉融合即可得到用户在HMD上所看见的双眼画面。
本申请实施例通过第一动态链接库获取头戴式显示设备的位姿信息,并将每一帧虚拟场景画面对应的位姿信息以及待渲染纹理发送至目标应用,使得目标应用基于位姿信息对待渲染纹理进行渲染得到纹理数据,通过第一动态链接库获取纹理数据,对其进行编码后发送至HMD解码显示,实现了基于monado SDK的渲染以及推流过程,实现用户在使用monado SDK开发的头戴式显示设备时,不仅能够体验头戴式显示设备自身携带的应用,还能够体验Windows端的目标应用的虚拟场景画面。
在一些实施例中,通过第一动态链接库确定虚拟场景画面的渲染开始时间,可以基于以下方式实现:通过第一动态链接库确定目标应用的渲染帧率;通过第一动态链接库,基于渲染帧率确定虚拟场景画面的渲染开始时间。
这里,用户可以预先在第一动态链接库中写入预设的渲染帧率。但实际目标应用的渲染帧率需要通过第一动态链接库基于显卡性能等各方面因素确定。本申请实施例在此不做具体说明。在确定目标应用的渲染帧率后,针对任一帧虚拟场景画面,可以通过第一动态链接库,基于渲染帧率以及上一帧虚拟场景画面的渲染结束时间,确定虚拟场景画面的渲染开始时间。
在一些实施例中,通过第一动态链接库,基于渲染帧率确定虚拟场景画面的渲染开始时间,可以基于以下方式实现:在第i帧虚拟场景画面渲染结束时,通过第一动态链接库记录第i帧虚拟场景画面的渲染结束时间;i为大于0的整数;针对第i+1帧虚拟场景画面,通过第一动态链接库基于渲染帧率,以及第i帧虚拟场景画面的渲染结束时间,确定第i+1帧虚拟场景画面的渲染开始时间。
本申请实施例中,针对第i帧虚拟场景画面,在第i帧虚拟场景画面渲染结束时,可以通过第一动态链接库记录第i帧虚拟场景画面的渲染结束时间。同时,目标应用会通知第一动态链接库第i帧虚拟场景画面渲染完成,将第i帧虚拟场景画面的纹理数据放入缓存队列,以使第一动态链接库从缓存队列中获取第i帧虚拟场景画面的纹理数据。然后,通过第一动态链接库基于渲染帧率,以及第i帧虚拟场景画面的渲染结束时间,确定第i+1帧虚拟场景画面的渲染开始时间。需要说明的是,本申请实施例对基于渲染帧率和上一帧虚拟场景画面的渲染结束时间确定当前帧渲染开始时间的具体方法不作具体限定。示例性的,以1s为一个时间单位,渲染帧率为在时间单位内的渲染次数,若渲染帧率为60fps,在获取第i帧虚拟场景画面的渲染结束时间后,可以基于该渲染结束时间计算1s内剩余的时间,以及基于60fps计算1s内剩余的可渲染次数,并基于1s内剩余的时间和可渲染次数平均分配每次渲染所需时间,进而确定第i+1帧的渲染开始时间,实现平滑渲染。
在当前时刻到达第i+1帧虚拟场景画面的渲染开始时间时,通过第一动态链接库向目标应用发送第i+1帧虚拟场景画面的待渲染纹理,开启第i+1帧虚拟场景画面的渲染。
本申请实施例通过第一动态链接库,基于渲染帧率以及上一帧虚拟场景画面的渲染结束时间,确定当前帧虚拟场景画面的渲染开始时间,以实现每一帧虚拟场景画面的平滑渲染,提高画面渲染效果,进而提升虚拟场景画面推流至HMD后的显示效果,提高虚拟场景画面的播放流畅性。
在一些实施例中,头戴式显示设备的位姿信息中包括头部位姿信息以及眼部位姿信息。通过第一动态链接库将位姿信息发送至目标应用,可以基于以下方式实现:通过第一动态链接库将眼部位姿信息发送至目标应用;通过第一动态链接库将头部位姿信息初始化为0,并将初始化为0的头部位姿信息发送至目标应用。
本申请实施例中,头戴式显示设备的位姿信息可以包括头部位姿信息以及眼部位姿信息。头部位姿信息包括用户头部的位置以及方向信息。眼部位姿信息包括用户双眼的位置、方向信息以及视场信息。在当前时刻到达第i帧虚拟场景画面的渲染开始时间时,通过第一动态链接库向目标应用发送第i帧虚拟场景画面的待渲染纹理,然后,通过第一动态链接库向目标应用发送HMD传回的眼部位姿信息。通过第一动态链接库将HMD传回的头部位姿信息中位置以及方向的值都填充为零0,然后通过第一动态链接库将初始化为0的头部位姿信息发送至目标应用。由于目标应用接收到的头部位姿信息的值为0,目标应用将不会使用头部位姿信息对待渲染纹理进行渲染。目标应用将仅仅基于眼部位姿信息对第i帧虚拟场景画面的待渲染纹理进行渲染,得到第i帧虚拟场景画面的纹理数据。
相关技术中,monado SDK基于openxr协议要求HMD获取位姿信息时,需要同时传入头部位姿信息及眼部位姿信息,但这种方法只适合于运行在HMD的VR游戏,而不适用于推流场景。故本申请实施例通过在推流时将头部位姿信息初始化为0,可以实现Windows端的VR游戏在渲染时不参考头部的位姿预测,而只参考现有的双眼位姿。头部位姿信息都填充为零,使得VR游戏不会用头部位姿信息来做预测和渲染,能够确保推流时用户看到的画面不会有眩晕感,且沉浸感能够达到与steamvr一致的效果。
步骤S103,对纹理数据进行编码,得到第一纹理编码结果。
这里,DPT在获取第一动态连接库发送的每一帧虚拟场景画面的纹理数据后,可以对纹理数据进行编码,得到每一帧虚拟场景画面对应的第一纹理编码结果。本申请实施例对纹理数据的编码方式不作具体限定,可以使用软件编码的方式,也可以使用硬件编码的方式。同时,还可以对每一帧虚拟场景画面所使用的音频进行编码,得到音频编码结果。
步骤S104,将第一纹理编码结果发送至头戴式显示设备,以使头戴式显示设备解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
这里,DPT可以将第一纹理编码结果以及音频编码结果共同发送至HMD。HMD在接收到第一纹理编码结果以及音频编码结果后,对第一纹理编码结果以及音频编码结果进行解码得到虚拟场景画面的纹理数据以及音频,并基于纹理数据和音频向用户显示虚拟场景画面。
在一些实施例中,在目标推流方式为第二推流方式的情况下,通过第二推流方式对应的推流进程获取目标应用的虚拟场景画面的纹理数据;对纹理数据进行编码,得到第二纹理编码结果;将第二纹理编码结果发送至头戴式显示设备,以使头戴式显示设备解码第二纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
这里,第二推流方式可以为steamvr推流方式。第二推流方式对应的推流进程即为steamvr推流应用。在确定目标推流方式为第二推流方式后,DPT可以启动steamvr推流应用,并通过steamvr推流应用获取目标应用的每一帧虚拟场景画面的纹理数据。而后,DPT对每一帧虚拟场景画面的纹理数据进行编码,得到每一帧虚拟场景画面对应的第二纹理编码结果。同时,DPT还可以对每一帧虚拟场景画面所使用的音频进行编码,得到音频编码结果。将第二纹理编码结果以及音频编码结果共同发送至头戴式显示设备,以使头戴式显示设备解码第二纹理编码结果以及音频编得到纹理数据和音频,并基于纹理数据和音频向用户显示虚拟场景画面。
本申请实施例通过接入steamvr推流应用,在实现openxr推流方式的同时,还可以支持steamvr推流方式,以兼容未使用openxr协议开发的HMD设备或VR游戏,提高该推流方法的普适性。
在一些实施例中,通过第二推流方式对应的推流进程获取目标应用的虚拟场景画面的纹理数据,可以基于以下方式实现:将第二推流方式对应的第二动态链接库注册到第二推流方式对应的推流进程中;从头戴式显示设备获取头部位姿信息;通过第二动态链接库将头部位姿信息写入推流进程;推流进程用于基于头部位姿信息渲染得到虚拟场景画面的纹理数据;通过第二动态链接库从推流进程获取纹理数据。
这里,第二推流方式对应的第二动态链接库即为openvr_client.dll,是可以被steamvr所调用的VRClient。示例性的,在确定目标推流方式为steamvr方式后,可以将openvr_client.dll注册到steamvr推流应用。steamvr推流应用可以直接对接目标应用。DPT从HMD获取头部位姿信息后,通过openvr_client.dll将头部位姿信息发送至steamvr推流应用。steamvr推流应用可以基于头部位姿信息计算眼部位姿信息,并基于头部位姿信息和眼部位姿信息渲染得到目标应用的虚拟场景画面的纹理数据。最后,通过第二动态链接库从推流进程获取纹理数据。
本申请实施例在将目标应用的虚拟场景画面推流至头戴式显示设备时,至少从第一推流方式和第二推流方式中确定目标推流方式,其中,在使用第一推流方式的情况下,首先从目标应用获取虚拟场景画面的纹理数据,然后,对纹理数据进行编码,得到第一纹理编码结果,再将第一纹理编码结果发送至头戴式显示设备,头戴式显示设备可以解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。由于第一推流方式是基于monado软件开发包SDK实现的,因此本申请实施例应用于Windows端场景中时,可以基于monado SDK实现Windows端虚拟场景画面的推流,以使基于monado SDK开发的头戴式显示设备也可以适配Windows端的目标应用,进而实现用户在使用monado SDK开发的头戴式显示设备时,不仅能够体验头戴式显示设备自身携带的应用,还能够体验Windows端的目标应用的虚拟场景画面。另外,本申请实施例提供的画面推流方法,在第一推流方式中,目标应用对待渲染纹理进行渲染得到虚拟场景画面的纹理数据时,将HMD的头部位姿信息初始化为0,仅仅使用眼部位姿信息对待渲染纹理进行渲染,能够确保推流过程中当用户转动头部时,周围的场景也不会跟着转动,防止眩晕问题的发生。本申请实施例提供的画面推流方法还可以支持第二推流方式,以兼容未使用openxr协议开发的HMD设备或VR游戏,提高该画面推流方法的普适性。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例提供一种画面推流方法,该方法可以应用于本申请实施例提供的画面推流应用DPT(XR_DirectPreview_Tool)上,DPT安装在Windows端,既可以支持openxr推流(第一推流方式),也能支持steamvr推流(第二推流方式)。其中,本申请实施例提供的画面推流方法中第一推流方式是基于monado软件开发包SDK实现的,因此本申请实施例可以基于monado SDK实现Windows端虚拟场景画面的推流。
本申请实施例的方案可以应用在VR游戏的开发场景中,也可以应用在用户体验VR游戏的场景中,下面将以VR游戏的开发场景为例,对本申请实施例提供的画面推流方法以及画面推流应用DPT进行说明。
在VR游戏的开发场景中,DPT可以部署在云服务器,以供多个用户共同使用,用户可以为游戏开发人员。图7是本申请实施例提供的DPT的客户端界面示意图。参见图7,用户可以通过DPT客户端界面中的选择框701执行交互操作,该交互操作可以是对选择框701中“推流平台选择”下的“1.openxr推流”或“2.steamvr推流”的点击操作。参见图8,在用户选择steamvr进行推流时,DPT会拉起steamvr进程801(第二推流方式对应的推流进程),并注册推流工具的VRClient(openvr_client.dll,第二动态链接库)到steamvr环境中。参见图9,openvr_client.dll可以从steamvr处拿到VR游戏(目标应用)的左右眼纹理(虚拟场景画面的纹理数据),并将左右眼纹理发送给DPT进行视频编码,最后将编码后的数据(第二纹理编码结果)发送给头显HMD进行解码并显示画面。DPT还可以对左右眼纹理进行预览纹理操作。参见图10,在用户选择openxr进行推流时,云服务器可以将VR游戏的游戏编辑器(例如UE)打开。参见图11,可以直接在游戏编辑器里将当前关卡的画面推流到头显HMD。用户不需要再次部署PC主机和等待UE打包,就可以直接体验当前的关卡内容。
DPT同时兼容openxr和steamvr两个功能模块,openvr_client.dll负责实现steamvr的渲染和取图;openxr_client.dll可以抛开steamvr的平台来和游戏编辑器对接,直接从游戏实现渲染和取图。steamvr依托于steam平台,存在大量游戏内容,因此VR硬件厂商的推流工具会优先接入steamvr作为其推流平台。相对于steamvr的openvr_client.dll,openxr_client.dll的实现更为复杂,直接和游戏编辑器(或游戏)对接,负责完成游戏的渲染,下一帧画面渲染的时间预测,输入设备的事件写入等。相关技术中尚无成熟度较好的openxr渲染及推流工具。参见图12,图12是本申请实施例提供的openxr和steamvr的推流过程示意图。DPT1201负责通过通用串行总线(USB,Universal Serial Bus)或无线网络(WIFI)连接VR设备(HMD)1202,获取HMD1202的位姿信息以及手柄信息等。在openxr推流过程中,DPT1201将位姿信息以及手柄信息发送至openxr_client.dll,openxr_client.dll实现openxr协议,并对接游戏编辑器(UE或Unity或Native APP原生应用程序)的渲染逻辑。openxr_client.dll将位姿信息以及手柄信息发送至游戏编辑器,以使游戏编辑器基于位姿信息以及手柄信息完成左右眼纹理渲染。openxr_client.dll从游戏编辑器获取左右眼纹理,并将左右眼纹理发送至DPT1201。DPT1201对左右眼纹理进行视频编码后,和音频编码一起发送至HMD1202。在steamvr推流过程中,DPT1201将位姿信息以及手柄信息发送至openvr_client.dll。openvr_client.dll实现openvr协议,并对接steamvr。openvr_client.dll将位姿信息以及手柄信息发送至steamvr,以使steamvr基于位姿信息以及手柄信息完成左右眼纹理渲染。openvr_client.dll从steamvr获取左右眼纹理,并发送给DPT1201。DPT1201对左右眼纹理进行视频编码后,和音频编码一起发送至HMD1202。
下面对本申请实施例提供的openxr推流方式作具体说明。
参见图13,图13是本申请实施例提供的游戏侧与VRClient的交互流程图。步骤S1301,申请GPU型号。首先游戏会通过openxr的xrGetD3D11GraphicsRequirementsKHR接口向VRClient申请游戏所在终端的GPU型号。步骤S1302,返回GPU型号。VRClient向游戏返回GPU型号。步骤S1303,创建D3D设备并申请纹理。游戏侧基于返回的GPU型号创建D3D设备。游戏通过xrCreateSwapchain接口向VRClient申请纹理。步骤S1304,创建共享纹理并返回给游戏。VRClient创建共享纹理,并将用于左右眼纹理绘制的共享纹理返回至游戏。步骤S1305,纹理绘制并通知绘制状态。游戏对VRClient返回的共享纹理进行绘制,得到左右眼纹理。当游戏渲染完每一帧左右眼纹理的图像后,通过xrEndFrame接口来通知VRClient绘制状态为已完成。步骤S1306,拷贝共享纹理。此时VRClient可以从游戏的纹理中拷贝一份纹理并传递给外部进程使用,即传递给DPT进行编码。
参见图14,图14是本申请实施例提供的游戏的渲染流程示意图。步骤S1401,记录渲染开始时间和帧序号。首先,游戏调用xrWaitFrame接口和xrBenginFrame接口,使动态链接库(VRClient)记录每帧图像的渲染时间和帧序号。步骤S1402,获取进入至等待绘制模式的纹理。然后,游戏通过xrAcquireSwapchainImage接口从VRClient处获得可渲染的纹理序号,参见图15,VRClient中可以创建多个纹理(纹理1、纹理2、纹理3),依次让游戏渲染,实现异步拷贝纹理。然后,游戏通过xrWaitSwapchainImage接口获取进入至等待绘制模式的纹理。xrWaitSwapchainImage接口是用于等待选中的纹理进入到等待绘制的模式,具体实现方法可以参考OpenGL和Vulkan中不同的实现模式,来让纹理进入至等待绘制模式。步骤S1403,获取位姿信息。游戏调用xrLocateViews和xrLocateSpace接口获取HMD的位姿信息,位姿信息主要用于模拟头部上下左右和前后的位置改变。步骤S1404,进行渲染。游戏基于上述获取的位姿信息,对等待绘制模式的纹理进行渲染(Execute Graphics Work)。步骤S1405,释放纹理。渲染完成后游戏会调用xrReleaseSawapchain接口,使VRClient释放纹理。步骤S1406,记录渲染完成时间。游戏调用xrEndFrame接口表示当前一帧图像被绘制完成,通知VRClient纹理已经渲染完成,并记录渲染完成的时间。用户可以通过xrWaitFrame接口、xrBenginFrame接口以及xrEndFrame接口这3个xr的接口,控制渲染帧率,例如游戏开发人员可以在VRClient配置60FPS或90FPS的渲染帧率,上述3个接口就可以根据指定的渲染帧率,来控制游戏的渲染周期。游戏在调用xrEndFrame接口后,可以将渲染完成的纹理放到缓存队列中,然后DPT从缓存队列中获取渲染完成的纹理,并对其进行视频编码后发送给头显进行解码播放。参见图16,本申请实施例提供的DPT可以实现d3d11和d3d12两种图形设备的渲染,用户可以在图16中的图形设备选择框1601根据实际需要来切换不同的图形设备。
下面对本申请实施例提供的steamvr推流方式作具体说明。
参见图17,图17是本申请实施例提供的steamvr内部的渲染流程图。steamvr的渲染和openxr不同,steamvr在内部实现了openvr和openxr的两种渲染模式,但最终还是以openvr的方式提供至外部调用,以便于兼容老旧的游戏及推流工具。也即,steamvr内部包括openxr插件(openxr plugin)以及openvr插件(openvr plugin),但只使用openvr_client.dll动态链接库进行推流。参见图18,图18是本申请实施例提供的steamvr推流的流程示意图。openvr_client.dll被steamvr加载到steamvr的进程中,然后DPT将从头显那获取到的Tracking数据发送给openvr_client.dll,由openvr_client.dll将Tracking数据写入至steamvr的接口。当游戏渲染完一帧图像后会通知到steamvr,接着steamvr会将游戏的左右眼纹理发送给openvr_client.dll,最后由openvr_client.dll将游戏的左右眼纹理发送给DPT进行视频编码和发送。
本申请实施例提供的画面推流方法是基于monado SDK实现的,相对应的,外接的HMD端也运行有monado SDK,以实现安装于HMD端的VR游戏的渲染运行。下面对HMD端的渲染方式作具体说明。头显HMD也运行有一套openxr runtime(monado SDK的实现),每个硬件厂商会根据自身的硬件环境及参数去实现一套自己的openxr runtime。openxr runtime首先会通过openxr runtime自身的硬件环境(屏幕刷新、渲染的帧率)来计算位姿信息及预测位姿信息;然后对外通过openxr的接口(xrLocateViews和xrLocateSpace)暴露给用户调用。本申请实施例在推流时,可以通过xrLocateViews和xrLocateSpace这两个接口来获取头部和双眼的position及orientation。将位姿信息发送给Windows侧的DPT后,游戏会基于位姿信息绘制左右眼纹理,绘制后的左右眼纹理可以参见图19。DPT将左右眼纹理进行编码发送给头显后,头显解码出来的纹理也是左右眼纹理,但其通过了头显硬件的光学畸变二次渲染上屏显示后,如图20所示,就变成了两幅带有椭圆和弯曲效果的图片。参见图21,上述左右眼纹理在平面上看着是扭曲的,但经过VR透镜投影到人眼后,就会变得比较自然。
本申请实施例提供的画面推流方法能够实现和steamvr基本体验一致的推流效果,在monado SDK还未开源推出推流用的HMD时,可以通过本申请实施例提供的画面推流方法来达到位姿移动和推流的效果。需要说明的,本申请实施例提供的画面推流方法中,还可以将头显的预测的时间信息,传递给Windows端,让游戏渲染时参考头显预测的时间信息以及位姿信息。
可以理解的是,在本申请实施例中,涉及到用户信息等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面继续说明本申请实施例提供的画面推流装置455的实施为软件模块的示例性结构,在一些实施例中,如图4所示,存储在存储器450的画面推流装置455中的软件模块可以包括:
推流方式确定模块4551,用于响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定目标推流方式。
纹理数据获取模块4552,用于在目标推流方式为第一推流方式的情况下,从目标应用获取虚拟场景画面的纹理数据;目标应用用于渲染虚拟场景画面。
编码模块4553,用于对纹理数据进行编码,得到第一纹理编码结果。
编码结果发送模块4554,用于将第一纹理编码结果发送至头戴式显示设备,以使头戴式显示设备解码第一纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
在一些实施例中,目标应用加载有第一推流方式对应的第一动态链接库;纹理数据获取模块4552,还用于通过第一动态链接库确定虚拟场景画面的渲染开始时间;在当前时刻到达渲染开始时间时,从头戴式显示设备获取位姿信息;通过第一动态链接库将位姿信息发送至目标应用,以使目标应用基于位姿信息渲染虚拟场景画面,得到虚拟场景画面的纹理数据;在虚拟场景画面渲染结束时,通过第一动态链接库从目标应用获取虚拟场景画面的纹理数据。
在一些实施例中,头戴式显示设备的位姿信息中包括头部位姿信息以及眼部位姿信息;纹理数据获取模块4552,还用于通过第一动态链接库将眼部位姿信息发送至目标应用;通过第一动态链接库将头部位姿信息初始化为0,并将初始化为0的头部位姿信息发送至目标应用。
在一些实施例中,画面推流装置455还包括纹理创建模块,用于通过第一动态链接库创建多个待渲染纹理;纹理数据获取模块4552,还用于通过第一动态链接库将虚拟场景画面对应的待渲染纹理发送至目标应用,以使目标应用基于位姿信息渲染待渲染纹理,得到虚拟场景画面的纹理数据。
在一些实施例中,纹理数据获取模块4552,还用于通过第一动态链接库确定目标应用的渲染帧率;通过第一动态链接库,基于渲染帧率确定虚拟场景画面的渲染开始时间。
在一些实施例中,纹理数据获取模块4552,还用于在第i帧虚拟场景画面渲染结束时,通过第一动态链接库记录第i帧虚拟场景画面的渲染结束时间;i为大于0的整数;针对第i+1帧虚拟场景画面,通过第一动态链接库基于渲染帧率,以及第i帧虚拟场景画面的渲染结束时间,确定第i+1帧虚拟场景画面的渲染开始时间。
在一些实施例中,画面推流装置还包括第二推流模块,用于在目标推流方式为第二推流方式的情况下,通过第二推流方式对应的推流进程获取目标应用的虚拟场景画面的纹理数据;对纹理数据进行编码,得到第二纹理编码结果;将第二纹理编码结果发送至头戴式显示设备,以使头戴式显示设备解码第二纹理编码结果得到纹理数据,并基于纹理数据显示虚拟场景画面。
在一些实施例中,第二推流模块还用于将第二推流方式对应的第二动态链接库注册到第二推流方式对应的推流进程中;从头戴式显示设备获取头部位姿信息;通过第二动态链接库将头部位姿信息写入推流进程;推流进程用于基于头部位姿信息渲染得到虚拟场景画面的纹理数据;通过第二动态链接库从推流进程获取纹理数据。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机可执行指令或计算机程序,处理器执行该计算机可执行指令或计算机程序,使得该电子设备执行本申请实施例上述的画面推流方法。
本申请实施例提供一种存储有计算机可执行指令的计算机可读存储介质,其中存储有计算机可执行指令或者计算机程序,当计算机可执行指令或者计算机程序被处理器执行时,将引起处理器执行本申请实施例提供的画面推流方法,例如,如图5示出的画面推流方法。
在一些实施例中,计算机可读存储介质可以是RAM、ROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,计算机可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,计算机可执行指令可以但不一定对应于文件***中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,HyperText Markup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,计算机可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。
综上,通过本申请实施例可以基于monado SDK实现Windows端虚拟场景画面的推流。
以上,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (11)
1.一种画面推流方法,其特征在于,所述方法包括:
响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定所述目标推流方式,其中,所述第一推流方式为openxr推流方式,所述第二推流方式为steamvr推流方式;
在所述目标推流方式为所述第一推流方式的情况下,通过所述第一推流方式对应的第一动态链接库从头戴式显示设备对应的目标应用获取虚拟场景画面的纹理数据,其中,所述第一动态链接库通过所述目标应用加载得到,所述目标应用用于基于所述头戴式显示设备的位姿信息渲染所述虚拟场景画面,得到所述虚拟场景画面的纹理数据;
在所述目标推流方式为所述第二推流方式的情况下,将所述第二推流方式对应的第二动态链接库注册到所述第二推流方式对应的推流进程中,并通过所述第二动态链接库从所述第二推流方式对应的推流进程获取所述目标应用的虚拟场景画面的纹理数据,其中,所述推流进程用于基于所述头戴式显示设备的头部位姿信息渲染得到虚拟场景画面的纹理数据;
对所述纹理数据进行编码,得到纹理编码结果;
将所述纹理编码结果发送至所述头戴式显示设备,以使所述头戴式显示设备解码所述纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。
2.根据权利要求1所述的方法,其特征在于,所述通过所述第一推流方式对应的第一动态链接库从头戴式显示设备对应的目标应用获取虚拟场景画面的纹理数据,包括:
通过所述第一动态链接库确定虚拟场景画面的渲染开始时间;
在当前时刻到达所述渲染开始时间时,从所述头戴式显示设备获取所述头戴式显示设备的位姿信息;
通过所述第一动态链接库将所述头戴式显示设备的位姿信息发送至所述目标应用,以使所述目标应用基于所述头戴式显示设备的位姿信息渲染所述虚拟场景画面,得到所述虚拟场景画面的纹理数据;
在所述虚拟场景画面渲染结束时,通过所述第一动态链接库从所述目标应用获取所述虚拟场景画面的纹理数据。
3.根据权利要求2所述的方法,其特征在于,所述头戴式显示设备的位姿信息包括头部位姿信息以及眼部位姿信息;
所述通过所述第一动态链接库将所述头戴式显示设备的位姿信息发送至所述目标应用,包括:
通过所述第一动态链接库将所述眼部位姿信息发送至所述目标应用;
通过所述第一动态链接库将所述头部位姿信息初始化为0,并将初始化为0的头部位姿信息发送至所述目标应用。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
通过所述第一动态链接库创建多个待渲染纹理;
通过所述第一动态链接库将所述头戴式显示设备的位姿信息发送至所述目标应用之前,所述方法还包括:
通过所述第一动态链接库将所述虚拟场景画面对应的待渲染纹理发送至所述目标应用,以使所述目标应用基于所述头戴式显示设备的位姿信息渲染所述待渲染纹理,得到所述虚拟场景画面的纹理数据。
5.根据权利要求2所述的方法,其特征在于,所述通过所述第一动态链接库确定虚拟场景画面的渲染开始时间,包括:
通过所述第一动态链接库确定所述目标应用的渲染帧率;
通过所述第一动态链接库,基于所述渲染帧率确定虚拟场景画面的渲染开始时间。
6.根据权利要求5所述的方法,其特征在于,所述通过所述第一动态链接库,基于所述渲染帧率确定虚拟场景画面的渲染开始时间,包括:
在第i帧虚拟场景画面渲染结束时,通过所述第一动态链接库记录所述第i帧虚拟场景画面的渲染结束时间;i为大于0的整数;
针对第i+1帧虚拟场景画面,通过所述第一动态链接库基于所述渲染帧率,以及所述第i帧虚拟场景画面的渲染结束时间,确定所述第i+1帧虚拟场景画面的渲染开始时间。
7.根据权利要求1所述的方法,其特征在于,所述通过所述第二动态链接库从所述第二推流方式对应的推流进程获取所述目标应用的虚拟场景画面的纹理数据,包括:
从所述头戴式显示设备获取所述头戴式显示设备的头部位姿信息;
通过所述第二动态链接库将所述头戴式显示设备的头部位姿信息写入所述推流进程;
通过所述第二动态链接库从所述推流进程获取所述纹理数据。
8.一种画面推流装置,其特征在于,所述装置包括:
推流方式确定模块,用于响应于针对目标推流方式的选择指令,至少从第一推流方式和第二推流方式中确定所述目标推流方式,其中,所述第一推流方式为openxr推流方式,所述第二推流方式为steamvr推流方式;
纹理数据获取模块,用于在所述目标推流方式为所述第一推流方式的情况下,通过所述第一推流方式对应的第一动态链接库从头戴式显示设备对应的目标应用获取虚拟场景画面的纹理数据,其中,所述第一动态链接库通过所述目标应用加载得到,所述目标应用用于基于所述头戴式显示设备的位姿信息渲染所述虚拟场景画面,得到所述虚拟场景画面的纹理数据;
所述纹理数据提取模块,还用于在所述目标推流方式为所述第二推流方式的情况下,将所述第二推流方式对应的第二动态链接库注册到所述第二推流方式对应的推流进程中,并通过所述第二动态链接库从所述第二推流方式对应的推流进程获取所述目标应用的虚拟场景画面的纹理数据,其中,所述推流进程用于基于所述头戴式显示设备的头部位姿信息渲染得到虚拟场景画面的纹理数据;
编码模块,用于对所述纹理数据进行编码,得到纹理编码结果;
编码结果发送模块,用于将所述纹理编码结果发送至所述头戴式显示设备,以使所述头戴式显示设备解码所述纹理编码结果得到所述纹理数据,并基于所述纹理数据显示所述虚拟场景画面。
9.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储计算机可执行指令;
处理器,用于执行所述存储器中存储的计算机可执行指令时,实现权利要求1至7任一项所述的画面推流方法。
10.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时实现权利要求1至7任一项所述的画面推流方法。
11.一种计算机程序产品,包括计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时实现权利要求1至7任一项所述的画面推流方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410072006.3A CN117596377B (zh) | 2024-01-18 | 2024-01-18 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410072006.3A CN117596377B (zh) | 2024-01-18 | 2024-01-18 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117596377A CN117596377A (zh) | 2024-02-23 |
CN117596377B true CN117596377B (zh) | 2024-05-28 |
Family
ID=89918693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410072006.3A Active CN117596377B (zh) | 2024-01-18 | 2024-01-18 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117596377B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831353A (zh) * | 2020-07-09 | 2020-10-27 | 平行云科技(北京)有限公司 | 基于OpenXR标准的运行库、数据交互方法、设备及介质 |
CN114222149A (zh) * | 2021-11-17 | 2022-03-22 | 武汉斗鱼鱼乐网络科技有限公司 | 一种推流方法、装置、介质及计算机设备 |
CN116546228A (zh) * | 2023-07-04 | 2023-08-04 | 腾讯科技(深圳)有限公司 | 用于虚拟场景的推流方法、装置、设备及存储介质 |
CN116954824A (zh) * | 2023-07-28 | 2023-10-27 | 张洋华 | 一种支持多种扩展现实 (xr) 技术规范应用程序与2d应用程序多进程混合运行的运行时***、数据交互方法、设备及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10310266B2 (en) * | 2016-02-10 | 2019-06-04 | Advanced Micro Devices, Inc. | Method and system for streaming information in wireless virtual reality |
-
2024
- 2024-01-18 CN CN202410072006.3A patent/CN117596377B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831353A (zh) * | 2020-07-09 | 2020-10-27 | 平行云科技(北京)有限公司 | 基于OpenXR标准的运行库、数据交互方法、设备及介质 |
CN114222149A (zh) * | 2021-11-17 | 2022-03-22 | 武汉斗鱼鱼乐网络科技有限公司 | 一种推流方法、装置、介质及计算机设备 |
CN116546228A (zh) * | 2023-07-04 | 2023-08-04 | 腾讯科技(深圳)有限公司 | 用于虚拟场景的推流方法、装置、设备及存储介质 |
CN116954824A (zh) * | 2023-07-28 | 2023-10-27 | 张洋华 | 一种支持多种扩展现实 (xr) 技术规范应用程序与2d应用程序多进程混合运行的运行时***、数据交互方法、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117596377A (zh) | 2024-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hilfert et al. | Low-cost virtual reality environment for engineering and construction | |
US11425220B2 (en) | Methods, systems, and computer program products for implementing cross-platform mixed-reality applications with a scripting framework | |
CN113661471B (zh) | 混合渲染 | |
Linowes et al. | Augmented reality for developers: Build practical augmented reality applications with unity, ARCore, ARKit, and Vuforia | |
US9818228B2 (en) | Mixed reality social interaction | |
US20230333864A1 (en) | Management framework for mixed reality devices | |
US20170206708A1 (en) | Generating a virtual reality environment for displaying content | |
KR102433857B1 (ko) | 혼합 현실에서 동적 가상 콘텐츠들을 생성하기 위한 디바이스 및 방법 | |
CN107358659B (zh) | 基于3d技术的多画面融合显示方法及存储设备 | |
CN109189302B (zh) | Ar虚拟模型的控制方法及装置 | |
US9761056B1 (en) | Transitioning from a virtual reality application to an application install | |
US10891801B2 (en) | Method and system for generating a user-customized computer-generated animation | |
KR20180068709A (ko) | 유니티 기반의 가상현실(vr) 인터랙션 게임 서비스 제공 시스템 | |
TW202103111A (zh) | 用於圖形處理之資產感知計算架構 | |
Borycki | Programming for Mixed Reality with Windows 10, Unity, Vuforia, and UrhoSharp | |
CN117596377B (zh) | 画面推流方法、装置、电子设备、存储介质及程序产品 | |
CN116958344A (zh) | 虚拟形象的动画生成方法、装置、计算机设备及存储介质 | |
CN115624740A (zh) | 一种虚拟现实设备及其控制方法、装置、***及互动*** | |
RU2810701C2 (ru) | Гибридный рендеринг | |
US20240009560A1 (en) | 3D Image Implementation | |
WO2023169089A1 (zh) | 一种视频播放方法、装置、电子设备、介质和程序产品 | |
Roberts | The AR/VR Technology Stack: A Central Repository of Software Development Libraries, Platforms, and Tools | |
Steed | Recreating visual reality in virtuality | |
Dahl | Real-time Object Removal in Augmented Reality | |
CN116016892A (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 |