CN111831353A - 基于OpenXR标准的运行库、数据交互方法、设备及介质 - Google Patents
基于OpenXR标准的运行库、数据交互方法、设备及介质 Download PDFInfo
- Publication number
- CN111831353A CN111831353A CN202010655829.0A CN202010655829A CN111831353A CN 111831353 A CN111831353 A CN 111831353A CN 202010655829 A CN202010655829 A CN 202010655829A CN 111831353 A CN111831353 A CN 111831353A
- Authority
- CN
- China
- Prior art keywords
- client
- application program
- module
- runtime
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 230000003993 interaction Effects 0.000 title claims abstract description 15
- 230000006854 communication Effects 0.000 claims abstract description 34
- 238000004891 communication Methods 0.000 claims abstract description 32
- 230000009471 action Effects 0.000 claims description 20
- 238000009877 rendering Methods 0.000 claims description 20
- 239000011159 matrix material Substances 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 12
- 210000001747 pupil Anatomy 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims description 6
- 238000012544 monitoring process Methods 0.000 claims description 6
- 238000013519 translation Methods 0.000 claims description 6
- 239000000284 extract Substances 0.000 claims description 4
- 230000003139 buffering effect Effects 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 239000011521 glass Substances 0.000 description 10
- 230000006870 function Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013467 fragmentation Methods 0.000 description 3
- 238000006062 fragmentation reaction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请提供基于OpenXR标准的运行库、数据交互方法、设备及介质,其中所述运行库包括:标识获取模块,用于获取唯一标识,所述唯一标识与客户端发送的VR/AR应用程序请求相匹配,所述运行库用于在VR/AR应用程序启动时被所述VR/AR应用程序加载;配置信息读取模块,用于根据所述获取的唯一标识读取相应命名共享内存中的配置信息;网络通信模块,用于和客户端之间建立UDP socket链接;视频流生成模块,用于生成视频流并将所述视频流发送给所述网络通信模块。本申请通过创建唯一标识可以实现VR/AR应用程序和客户端之间的一对一绑定,从而可实现一台PC上可同时启动多个客户端所请求的不同VR/AR的应用程序而不会混乱,能够有效节约***资源和成本。
Description
技术领域
本申请涉及虚拟现实技术领域,具体而言,涉及基于OpenXR标准的运行库、数据交互方法、设备及介质。
背景技术
VR(Virtual Reality,虚拟现实)和AR(Augmented Reality,增强现实)近年来受到了人们的广泛关注,但是随之而来的问题是,虽然大量的硬件和软件公司已开始在该领域加倍努力,尽管种类繁多,但越来越多的设备(每个设备都有自己不兼容的API)SDK正在增加碎片化的问题的严重性。
API碎片导致应用程序开发人员不得不花费大量时间,金钱和资源来与各种硬件集成以达到兼容更多硬件设备的目标。甚至大型团队也被迫选择他们支持的平台和设备,而对于小型团队而言,问题甚至更加严重。他们缺乏大型团队那样的金钱与各种资源,这将导致VR与AR市场严重的两极分化。使资源的丰富性和多样性受到很大的打击。
因此,Valve公司推出了OpenVR,OpenVR是一套VR/AR设备通用的API,OpenVR的推出,确实解决了API碎片化的问题,但是OpenVR的运行库即SteamVR并不是开源的,这导致我们没有二次开发的机会,对于一些定制化的需求无法得到满足,而且OpenVR限制了一台计算机上只能运行一个VR/AR应用程序实例,这一限制带来的后果就是计算机资源的浪费。假如一台计算机的资源,足够运行5个有同样资源消耗的VR/AR应用程序,在你选择OpenVR后,一台计算机上,只能运行一个VR/AR应用程序。假如我们设立一台VR/AR应用程序的服务器,那么我们的服务器在同一时刻只能为一个用户提供服务。
目前已有一些企业按照OpenXR的规范开发运行库,例如微软基于OpenXR开发出了自己的runtime以及oculus发布的runtime,但是微软的runtime只能连接自家的VR/AR设备HoloLens系列,oculus发布的runtime同样也只针对自己的设备,导致运行库的兼容性较差;此外,传统VR/AR大多数采用插线的方式,即将VR/AR设备和PC使用一根HDMI线或者DP线进行连接,使得用户不能随时随地移动,使用便捷性较差,用户体验不佳。
发明内容
有鉴于此,本申请提供基于OpenXR标准的运行库、数据交互方法、设备及介质,旨在实现通用性和兼容性较好的运行库解决方案,以使得用户可以在不同的VR/AR设备畅享VR/AR内容。
为实现上述目的,本申请采用的技术方案如下:
第一方面,本申请提供基于OpenXR标准的运行库,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,所述运行库包括:
标识获取模块,用于获取唯一标识,所述唯一标识与客户端发送的VR/AR应用程序请求相匹配,所述运行库用于在VR/AR应用程序启动时被所述VR/AR应用程序加载,,所述唯一标识用于标识所述命名共享内存,所述命名共享内存中写有发送所述VR/AR应用程序请求的客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
配置信息读取模块,用于根据所述获取的唯一标识读取相应命名共享内存中的配置信息;
网络通信模块,用于和客户端之间建立UDP socket链接,并接收来自客户端的姿态数据以及将生成的视频流发送给所述客户端;
视频流生成模块,用于对接收的姿态数据进行处理,生成视频流并将所述视频流发送给所述网络通信模块。
可选的,所述视频流生成模块具体包括:
数据运算模块,用于将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据提供给VR/AR应用程序;
纹理提取模块,用于将VR/AR应用程序根据获得的已处理姿态数据渲染完成后的左眼和右眼纹理提取出来,并发送给渲染编码模块;
渲染编码模块:用于将收到的纹理重新渲染出来,并将渲染好的纹理编码打包成视频流,提交给网络通信模块。
可选的,所述运行库还包括:
缓冲队列模块,用于缓冲从客户端接收的姿态数据;
监控模块,用于监控姿态数据缓冲队列的长度;
刷新模块,用于运行库接收到姿态数据后,根据客户端的刷新率,调整提供给VR/AR应用程序姿态信息的频率。
可选的,所述运行库还包括:
第一按键集合模块,用于存储VR/AR应用程序所关注的手柄按键动作集合;
第二按键集合模块,用于存储客户端可以发送的手柄按键动作集合;
按键动作发送模块,用于取所述第一案件集合模块和所述第二按键集合模块中存储的按键动作的交集,并将所述交集提供给VR/AR应用程序。
第二方面,本申请提供基于OpenXR标准的运行库的数据交互方法,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,所述方法包括:
PC机中的服务端接收来自客户端的VR/AR应用程序请求,所述VR/AR应用程序请求中包含有客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
所述服务端解析所述VR/AR应用程序请求中的配置信息,将解析出的所述配置信息写入命名共享内存,并创建与所述VR/AR应用程序请求相匹配的唯一标识来标识所述命名共享内存;
所述运行库被所述客户端所请求的VR/AR应用程序加载;
所述运行库获取与所述VR/AR应用程序请求相匹配的唯一标识,并通过所述唯一标识读取相应内存中的配置信息;
所述运行库和所述客户端之间建立UDP socket链接后,所述客户端向所述运行库发送姿态数据;
所述运行库接收所述姿态数据后进行处理,生成视频流并将所述视频流发送给所述客户端。
可选的,所述运行库接收所述姿态数据进行处理,生成视频流并将所述视频流发送给所述客户端的具体方法包括:
所述运行库将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据提供给VR/AR应用程序;
所述VR/AR应用程序根据获得的已处理姿态数据渲染完成左眼和右眼纹理,生成纹理信息并将所述纹理信息发送给所述运行库;
所述运行库接收所述纹理信息并提取其中的纹理;
所述运行库将收到的纹理重新渲染出来,并将渲染好的纹理编码打包成视频流,发送给所述客户端。
可选的,所述运行库接收所述姿态数据之后还包括:
将所述姿态数据放入缓冲队列中。
可选的,所述客户端和所述运行库之间建立UDP socket链接的具体方法为:
所述运行库启动UDP socket服务,并将UDP协议绑定的端口号提供给所述客户端;
所述客户端根据所述端口号连接所述运行库。
第三方面,本申请实施例还提供一种设备,包括:处理器、存储器及通信单元;
所述存储器存储有所述处理器可执行的机器可读指令,当所述设备运行时,所述处理器与所述存储器之间通过所述通信单元通信;
其中,所述处理器执行所述机器可读指令,以执行上述各方面所述的方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述各方面所述的方法。
本申请的有益效果是:
1、本申请通过创建唯一标识可以实现VR/AR应用程序和客户端之间的一对一绑定,从而可实现一台PC上可同时启动多个客户端所请求的不同VR/AR的应用程序而不会混乱,能够有效节约***资源和成本;
2、本申请运行库通过UDP协议与客户端进行通信,使得所有能够与运行库建立UDP通信链接的客户端都可连接本申请运行库,而对客户端的厂家、型号以及软硬件配置不作具体限制,因此,本申请运行库具有更好的通用性和兼容性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请基于OpenXR标准的运行库的架构框图;
图2为本申请视频流生成模块的结构框图;
图3为本申请基于OpenXR标准的运行库的数据交互方法的流程图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。
运行库和VR/AR(VR或AR)应用程序是一对一的关系,每启动一个VR/AR应用程序,VR/AR应用程序就要对应的去加载一次运行库,每一次加载都会在内存中创建一块独立的空间给运行库,也就是其实每次加载的运行库都是独立的。假如启动3个VR/AR应用程序:A,B,C,说明有3个客户端也即3个VR/AR眼镜:甲,乙,丙,那么每个运行库都需要知道要将自己编码完成的视频发送给哪一个客户端,必须是严格一对一的关系,假如甲眼镜启动的是A应用程序,那么它就应该接收到由A应用程序加载的运行库所采集到并且编码后的A应用程序的图像,而不能是B应用程序或者C应用程序。同时,甲眼镜所发送的姿态信息也应该发送给A应用程序加载的那个运行库,而不是B应用程序加载的或者C应用程序加载的。
假如甲,乙,丙3个VR/AR眼镜来自3个不同的厂商,那么这3个眼镜对接收的视频的参数要求也可能有所不同,例如:分辨率和FOV(视场角)。即使分辨率和FOV要求的是一样的,有一些VR/AR应用程序需要较高的FPS(帧率)可能才有比较好的体验,但是有些VR/AR应用程序则不需要那么高的FPS,而且每个客户端的用户的身高可能不一样,在VR/AR应用程序中,使用者的身高可能是影响使用者体验的一大参数,以上种种独立的个性化的参数也是需要每个客户端对应的运行库去处理然后再通过运行库和VR/AR应用程序应用程序之间的接口传递给VR/AR应用程序的。
为了解决如何实现VR/AR应用程序与客户端之间一对一匹配的技术问题,本申请第一方面,提供基于OpenXR标准的运行库,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,如图1所示,所述运行库包括:
标识获取模块110,用于获取唯一标识,所述唯一标识与客户端发送的VR/AR应用程序请求相匹配,所述运行库用于在VR/AR应用程序启动时被所述VR/AR应用程序加载,所述唯一标识用于标识所述命名共享内存,所述命名共享内存中写有发送所述VR/AR应用程序请求的客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
通常,启动一个VR/AR应用程序就要对应的加载一个运行库,虽然是同一个运行库,但是在内存中是不同的个体,拥有不同的内存区间。运行库靠共享内存的方式与外部进程进行进程通信。每一个运行库和外部进程通信都有单独的一块共享内存,运行库本质是一个动态库。
在本申请中,服务端每接收到一个客户端发送的VR/AR应用程序请求,就产生一个与所述的VR/AR应用程序请求相匹配的唯一标识,用于标识存储有客户端配置信息的命名共享内存。运行库的导出函数不仅仅有OpenXR标准指定的导出接口,还新增有用于传入所述唯一标识的接口,在运行库被正确加载之前,也就是在应用程序调用OpenXR规范指定的接口之前,该新增接口先被调用来传入一个当前操作***内的所述唯一标识。
具体的,所述唯一标识可用作所述命名共享内存名称的后缀,例如,所述命名共享内存的名称是CloudLark_123456,其中123456即为所述唯一标识。
具体的,所述客户端存在于客户端设备中,所述客户端设备可为智能眼镜或VR一体机等等,所述身高信息为VR/AR应用程序体验者或使用者的身高信息。
配置信息读取模块120,用于根据所述获取的唯一标识读取相应命名共享内存中的配置信息;
运行库获得所述唯一标识之后,以所述唯一标识作为命名共享内存的标识来读取该块共享内存中的内容。需要说明的是,运行库的每次加载都有独立的一块与外部进程通信的共享内存。
网络通信模块130,用于和客户端之间建立UDP socket链接,并接收来自客户端的姿态数据以及将生成的视频流发送给所述客户端;
在本申请中,客户端和运行库之间的通信用的是UDP协议,所以要做到客户端与VR/AR应用程序之间的一对一,也即客户端与VR/AR应用程序所加载的运行库之间的一对一,运行库需要告知客户端UDP协议绑定的端口号,当UDP组件启动后,运行库会将UDP端口号告知客户端,客户端根据这个端口号发送姿态数据给运行库,或者接收运行库编码后的视频流。
视频流生成模块140,用于对接收的姿态数据进行处理,生成视频流并将所述视频流发送给所述网络通信模块。
由于所述唯一标识与所述VR/AR应用程序请求相匹配,而所述VR/AR应用程序请求与其客户端相匹配,且每启动一个VR/AR应用程序,就会对应加载一次运行库,所以运行库获取所述唯一标识来读取相应客户端的信息即实现了运行库和客户端之间的匹配,也即实现了加载所述运行库的VR/AR应用程序和客户端之间的一对一匹配。
本申请通过创建唯一标识可以实现VR/AR应用程序和客户端之间的一对一匹配,从而可实现一台PC上可同时启动多个客户端所请求的不同VR/AR的应用程序而不会混乱;此外,运行库通过UDP协议与客户端进行通信,使得所有能够与运行库建立UDP通信链接的客户端都可连接本申请运行库,而对客户端的厂家、型号以及软硬件配置不作具体限制,因此,本申请运行库具有更好的通用性和兼容性。
具体的,如图2所示,所述视频流生成模块140包括:
数据运算模块141,用于将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据提供给VR/AR应用程序;
为了使得渲染出来的画面有立体感,本申请需要结合瞳距计算左右眼的姿态数据,所述瞳距的默认值为0.064米,也可根据实际情况具体设定。
纹理提取模块142,用于将VR/AR应用程序根据提供的已处理姿态数据渲染完成后的左眼和右眼纹理提取出来,并发送给渲染编码模块;
具体地,所述VR/AR应用程序获得已处理姿态数据后,根据所述已处理姿态数据渲染完成左眼和右眼纹理,生成纹理信息,并将所述纹理信息发送给运行库的纹理提取模块142,所述纹理提取模块142将所述纹理信息中的左眼和右眼纹理提取出来。
在实际通信过程中,所述VR/AR应用程序会调用运行库的接口告诉运行库纹理是左右眼分开的,还是左右眼合成的,如果是左右眼独立分开的,那么所述纹理提取模块142需要将左右眼纹理合成后再提交给渲染编码模块143,如果是左右眼合成的,则直接提交给渲染编码模块143。
渲染编码模块143,用于将收到的纹理重新渲染出来,并将渲染好的纹理编码打包成视频流,提交给网络通信模块130。
渲染编码模块143将收到的纹理重新在本地设备中也就是显卡中渲染出来,并将渲染好的纹理编码打包成视频流,提交给网络通信模块130。编码方面,本申请运行库可使用英伟达的硬件编码接口,比软编码更加高效稳定。所述渲染编码模块143在编码视频的时候会按照客户端的配置信息中的分辨率要求去编码,如此客户端收到视频解码后就得到与自身相匹配的分辨率。
作为可选的实施方式,所述运行库还包括:
信令处理模块,用于处理收到的各种信令,例如启动或停止发送视频流;
例如,当客户端断开链接后,VR/AR应用程序也被关闭,视频流也停止发送。
缓冲队列模块,用于缓冲从客户端接收的姿态数据;
监控模块,用于监控姿态数据缓冲队列的长度;
运行库创建姿态数据的缓冲队列,准备接收客户端发来的姿态数据,同时需要监控姿态数据队列的长度,因为姿态数据的队列长度过大,会导致姿态数据拥塞,甚至直接导致通信延迟升高,当延迟高到一定数值,例如80毫秒以上,可以对姿态数据队列进行清理,来降低拥塞导致的延迟。
刷新模块,用于运行库接收到姿态数据后,根据客户端的刷新率,调整提供给VR/AR应用程序姿态信息的频率。
客户端和运行库建立起UDP socket链接后,开始向运行库发送姿态数据,运行库收到姿态数据后,根据客户端的刷新率即帧率(客户端通常以一定频率向运行库发送姿态数据,所述频率通常为60HZ),调整提供给VR/AR应用程序姿态数据的频率,保持二者一致,因为VR/AR应用程序需要根据接收的姿态信息来渲染下一帧的画面,所以要保持客户端刷新率和VR/AR应用程序获取的姿态信息频率相同,可以使用线程暂时挂起的方式来调整VR/AR应用程序请求姿态信息的频率。
要说明的是,客户端告知运行库帧率其实是告知运行库,客户端发送姿态数据的频率。因为一帧画面的产生,需要一个姿态数据,VR/AR应用程序每次也是要取得一个姿态数据,才进行一次渲染,随后提交给运行库一帧画面。
作为可选的实施方式,所述运行库还包括:
第一按键集合模块,用于存储VR/AR应用程序所关注的手柄按键动作集合;
第二按键集合模块,用于存储客户端可以发送的手柄按键动作集合;
按键动作发送模块,用于取所述第一案件集合模块和所述第二按键集合模块中存储的按键动作的交集,并将所述交集提供给VR/AR应用程序。
在VR/AR应用程序的使用中,姿态数据不仅仅包括头戴设备的姿态,有很多VR/AR应用程序是使用手柄完成用户和应用程序的交互工作。在VR/AR应用程序启动后,应用程序并不知道当前连接运行库的硬件的类型既手柄的类型,硬件也并不知道应用程序需要关注哪些按键的状态,这就造成了一种双向盲选的问题。
为了解决上述问题,本申请将OpenXR标准所支持的所有类型的手柄以及按键动作在运行库中做一个映射关系视作一个按键动作全集。应用程序启动后,会通过特定接口将它所关注的按键动作告知运行库,运行库将上述按键放入集合1中,当客户端即VR/AR设备连接运行库后,客户端也将当前其可发送的按键动作告知运行库,运行库将客户端可发送的按键动作放入集合2,每次应用程序请求手柄按键动作状态时,运行库从集合1与集合2交集中的内容提供给应用程序。上述方案中集合1和集合2必须是按键动作全集的子集,即必须是OpenXR规范内支持的设备及按键动作。
第二方面,本申请提供基于OpenXR标准的运行库的数据交互方法,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,如图3所示,所述方法包括:
S301:PC机中的服务端接收来自客户端的VR/AR应用程序请求,所述VR/AR应用程序请求中包含有客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
具体的,所述客户端存在于客户端设备中,所述客户端设备可为智能眼镜或VR一体机等等,所述身高信息为VR/AR应用程序体验者或使用者的身高信息。
S302:所述服务端解析所述VR/AR应用程序请求中的配置信息,将解析出的所述配置信息写入命名共享内存,并创建与所述VR/AR应用程序请求相匹配的唯一标识来标识所述命名共享内存;
具体的,所述唯一标识可用作所述命名共享内存名称的后缀,例如,所述命名共享内存的名称是CloudLark_123456,其中123456即为所述唯一标识。
S303:所述运行库被所述客户端所请求的VR/AR应用程序加载;
S304:所述运行库获取与所述VR/AR应用程序请求相匹配的唯一标识,并通过所述唯一标识读取相应内存中的配置信息;
在本申请中,运行库的导出函数不仅仅有OpenXR标准指定的导出接口,还新增有用于传入所述唯一标识的接口,在运行库被正确加载之前,也就是在应用程序调用OpenXR规范指定的接口之前,该新增接口先被调用来传入一个当前操作***内的唯一标识。
运行库获得所述唯一标识之后,以所述唯一标识作为命名共享内存的标识来读取该块共享内存中的内容。需要说明的是,运行库的每次加载都有独立的一块与外部进程通信的共享内存。
运用示例:
甲眼镜对A应用程序要求2400*1200的分辨率以及60fps,乙眼镜对B应用程序要求2800*1400的分辨率以及72fps。那么服务器会根据甲眼镜的请求,以app_A为名称开辟一段内存,内容是(2400,1200,60)。并且将名称app_A通过动态库的导出接口传递给A应用程序所加载的运行库,运行库获得共享内存的名称后,去读取app_A名称的那段内存,就能将2400,1200,60读取出来做正确处理。
S305:所述运行库和所述客户端之间建立UDP socket链接后,所述客户端向所述运行库发送姿态数据;
在本申请中,客户端和运行库之间的通信用的是UDP协议,所以要做到客户端与VR/AR应用程序之间的一对一,也即客户端与VR/AR应用程序所加载的运行库之间的一对一,运行库需要告知客户端UDP协议绑定的端口号,当UDP组件启动后,运行库会将UDP端口号告知客户端,客户端根据这个端口号发送姿态数据给运行库。
S306:所述运行库接收所述姿态数据后进行处理,生成视频流并将所述视频流发送给所述客户端。
所述运行库接收所述姿态数据后,将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据发送给VR/AR应用程序;
为了使得渲染出来的画面有立体感,本申请需要结合瞳距计算左右眼的姿态数据,所述瞳距的默认值为0.064米,也可根据实际情况具体设定。
所述VR/AR应用程序接收到已处理姿态数据后,根据所述已处理姿态数据渲染完成左眼和右眼纹理,生成纹理信息,并将所述纹理信息发送给运行库,运行库将所述纹理信息中的左眼和右眼纹理提取出来。
在实际通信过程中,所述VR/AR应用程序提供给运行库的纹理是左右眼分开的,还是左右眼合成的,需要根据之前的配置接口来判断。如果是左右眼独立的,那么需要将左右眼纹理合成后再进行渲染编码,如果是左右眼合成的,则直接进行渲染编码。渲染编码后,将渲染好的纹理编码打包成视频流发送给所述客户端。
编码方面,本申请运行库可使用英伟达的硬件编码接口,比软编码更加高效稳定。在编码视频的时候会按照客户端的配置信息中的分辨率要求去编码,如此客户端收到视频解码后就得到与自身相匹配的分辨率。
本申请通过创建唯一标识可以实现VR/AR应用程序和客户端之间的一对一绑定,从而可实现一台PC上可同时启动多个客户端所请求的不同VR/AR的应用程序而不会混乱;此外,运行库通过UDP协议与客户端进行通信,使得所有能够与运行库建立UDP通信链接的客户端都可连接本申请运行库,而对客户端的厂家、型号以及软硬件配置不作具体限制,因此,本申请运行库具有更好的通用性和兼容性。
作为可选的实施方式,所述运行库接收所述姿态数据之后还包括:
将所述姿态数据放入缓冲队列中。
运行库创建姿态数据的缓冲队列,准备接收客户端发来的姿态数据,同时需要监控姿态数据队列的长度,因为姿态数据的队列长度过大,会导致姿态数据拥塞,甚至直接导致通信延迟升高,当延迟高到一定数值,例如80毫秒以上,可以对姿态数据队列进行清理,来降低拥塞导致的延迟。
需要说明的是,本申请可以通过无线网络通信的方式,接收VR/AR一体机(即客户端)发送过来的各种信息,在应用程序需要的时候,传送给应用程序。实现了VR/AR的无线交互,摆脱了有线式PCVR的臃肿和不便。
第三方面,本申请实施例还提供一种设备,包括:处理器、存储器及通信单元;
所述存储器存储有所述处理器可执行的机器可读指令,当所述设备运行时,所述处理器与所述存储器之间通过所述通信单元通信;
其中,所述处理器执行所述机器可读指令,以执行上述各方面所述的方法。
所述存储器可以用于存储处理器的执行指令,存储器可以由任何类型的易失性或非易失性存储终端或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。当存储器中的执行指令由处理器执行时,使得设备能够执行以下上述方法实施例中的部分或全部步骤。
处理器为存储终端的控制中心,利用各种接口和线路连接整个电子终端的各个部分,通过运行或执行存储在存储器内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行电子终端的各种功能和/或处理数据。所述处理器可以由集成电路(IntegratedCircuit,简称IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器可以仅包括中央处理器(Central ProcessingUnit,简称CPU)。在本申请实施方式中,CPU可以是单运算核心,也可以包括多运算核心。
通信单元,用于建立通信信道,从而使所述存储设备可以与其它终端进行通信。接收其他终端发送的用户数据或者向其他终端发送用户数据。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述各方面所述的方法。
所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
本申请可以在同一台PC上同时和多个在应用层实现了OpenXR标准的VR/AR应用程序实现数据的交互,从而节约***资源和成本;此外,运行库通过UDP协议与客户端进行通信,使得所有能够与运行库建立UDP通信链接的客户端都可连接本申请运行库,而对客户端的厂家、型号以及软硬件配置不作具体限制,因此,本申请运行库具有更好的通用性和兼容性。
在本申请所提供的实施例中,应该理解到,所揭露的***和方法,可以通过其它的方式实现。例如,以上所描述的节点实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.基于OpenXR标准的运行库,其特征在于,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,所述运行库包括:
标识获取模块,用于获取唯一标识,所述唯一标识与客户端发送的VR/AR应用程序请求相匹配,所述运行库用于在VR/AR应用程序启动时被所述VR/AR应用程序加载,所述唯一标识用于标识所述命名共享内存,所述命名共享内存中写有发送所述VR/AR应用程序请求的客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
配置信息读取模块,用于根据所述获取的唯一标识读取相应命名共享内存中的配置信息;
网络通信模块,用于和客户端之间建立UDP socket链接,并接收来自客户端的姿态数据以及将生成的视频流发送给所述客户端;
视频流生成模块,用于对接收的姿态数据进行处理,生成视频流并将所述视频流发送给所述网络通信模块。
2.如权利要求1所述的基于OpenXR标准的运行库,其特征在于,所述视频流生成模块具体包括:
数据运算模块,用于将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据送给VR/AR应用程序;
纹理提取模块,用于将VR/AR应用程序根据提供的已处理姿态数据渲染完成后的左眼和右眼纹理提取出来,并发送给渲染编码模块;
渲染编码模块:用于将收到的纹理重新渲染出来,并将渲染好的纹理编码打包成视频流,提交给网络通信模块。
3.如权利要求1或2所述的基于OpenXR标准的运行库,其特征在于,所述运行库还包括:
缓冲队列模块,用于缓冲从客户端接收的姿态数据;
监控模块,用于监控姿态数据缓冲队列的长度;
刷新模块,用于运行库接收到姿态数据后,根据客户端的刷新率,调整提供给VR/AR应用程序姿态信息的频率。
4.如权利要求1或2所述的基于OpenXR标准的运行库,其特征在于,所述运行库还包括:
所述运行库还包括:
第一按键集合模块,用于存储VR/AR应用程序所关注的手柄按键动作集合;
第二按键集合模块,用于存储客户端可以发送的手柄按键动作集合;
按键动作发送模块,用于取所述第一案件集合模块和所述第二按键集合模块中存储的按键动作的交集,并将所述交集提供给VR/AR应用程序。
5.基于OpenXR标准的运行库的数据交互方法,其特征在于,所述运行库在PC机中,所述PC机还包括服务端、VR/AR应用程序和命名共享内存,所述方法包括:
PC机中的服务端接收来自客户端的VR/AR应用程序请求,所述VR/AR应用程序请求中包含有客户端的配置信息,所述配置信息中包括客户端的视场角信息、分辨率、帧率、瞳距信息以及身高信息;
所述服务端解析所述VR/AR应用程序请求中的配置信息,将解析出的所述配置信息写入命名共享内存,并创建与所述VR/AR应用程序请求相匹配的唯一标识来标识所述命名共享内存;
所述运行库被所述客户端所请求的VR/AR应用程序加载;
所述运行库获取与所述VR/AR应用程序请求相匹配的唯一标识,并通过所述唯一标识读取相应内存中的配置信息;
所述运行库和所述客户端之间建立UDP socket链接后,所述客户端向所述运行库发送姿态数据;
所述运行库接收所述姿态数据后进行处理,生成视频流并将所述视频流发送给所述客户端。
6.如权利要求5所述的基于OpenXR标准的运行库的数据交互方法,其特征在于,所述运行库接收所述姿态数据进行处理,生成视频流并将所述视频流发送给所述客户端的具体方法包括:
所述运行库将姿态数据、瞳距信息以及身高信息做矩阵旋转和矩阵平移运算,得到左右眼的已处理姿态数据,并将所述已处理姿态数据提供给VR/AR应用程序;
所述VR/AR应用程序根据获得的已处理姿态数据渲染完成左眼和右眼纹理,生成纹理信息并将所述纹理信息发送给所述运行库;
所述运行库接收所述纹理信息并提取其中的纹理;
所述运行库将收到的纹理重新渲染出来,并将渲染好的纹理编码打包成视频流,发送给所述客户端。
7.如权利要求6所述的基于OpenXR标准的运行库的数据交互方法,其特征在于,所述运行库接收所述姿态数据之后还包括:
将所述姿态数据放入缓冲队列中。
8.如权利要求7所述的基于OpenXR标准的运行库的数据交互方法,其特征在于,所述客户端和所述运行库之间建立UDP socket链接的具体方法为:
所述运行库启动UDP socket服务,并将UDP协议绑定的端口号提供给所述客户端;
所述客户端根据所述端口号连接所述运行库。
9.一种设备,其特征在于,包括:处理器、存储器及通信单元;
所述存储器存储有所述处理器可执行的机器可读指令,当所述设备运行时,所述处理器与所述存储器之间通过所述通信单元通信;
其中,所述处理器执行所述机器可读指令,以执行权利要求5至8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行权利要求5-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010655829.0A CN111831353B (zh) | 2020-07-09 | 2020-07-09 | 基于OpenXR标准的运行库、数据交互方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010655829.0A CN111831353B (zh) | 2020-07-09 | 2020-07-09 | 基于OpenXR标准的运行库、数据交互方法、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831353A true CN111831353A (zh) | 2020-10-27 |
CN111831353B CN111831353B (zh) | 2024-02-20 |
Family
ID=72900368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010655829.0A Active CN111831353B (zh) | 2020-07-09 | 2020-07-09 | 基于OpenXR标准的运行库、数据交互方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831353B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612456A (zh) * | 2020-12-25 | 2021-04-06 | 深圳市引力创新科技有限公司 | 一种多程序***性管理框架及管理方法 |
CN115209178A (zh) * | 2021-04-14 | 2022-10-18 | 华为技术有限公司 | 一种信息处理方法、装置及*** |
CN116560858A (zh) * | 2023-07-07 | 2023-08-08 | 北京蔚领时代科技有限公司 | Vr云服务器容器隔离方法及*** |
CN117596377A (zh) * | 2024-01-18 | 2024-02-23 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7266616B1 (en) * | 2001-08-08 | 2007-09-04 | Pasternak Solutions Llc | Method and system for digital rendering over a network |
CN107197342A (zh) * | 2017-06-16 | 2017-09-22 | 深圳创维数字技术有限公司 | 一种数据处理方法、智能终端、vr设备及存储介质 |
CN107203434A (zh) * | 2017-06-22 | 2017-09-26 | 武汉斗鱼网络科技有限公司 | 一种纹理共享的方法、装置以及计算机可读存储介质 |
US20180336069A1 (en) * | 2017-05-17 | 2018-11-22 | Tsunami VR, Inc. | Systems and methods for a hardware agnostic virtual experience |
CN109814719A (zh) * | 2018-07-26 | 2019-05-28 | 亮风台(上海)信息科技有限公司 | 一种基于穿戴眼镜的显示信息的方法与设备 |
US10325410B1 (en) * | 2016-11-07 | 2019-06-18 | Vulcan Inc. | Augmented reality for enhancing sporting events |
US10452868B1 (en) * | 2019-02-04 | 2019-10-22 | S2 Systems Corporation | Web browser remoting using network vector rendering |
CN110413386A (zh) * | 2019-06-27 | 2019-11-05 | 深圳市富途网络科技有限公司 | 多进程处理方法、装置、终端设备及计算机可读存储介质 |
US10497180B1 (en) * | 2018-07-03 | 2019-12-03 | Ooo “Ai-Eksp” | System and method for display of augmented reality |
US10558824B1 (en) * | 2019-02-04 | 2020-02-11 | S2 Systems Corporation | Application remoting using network vector rendering |
CN111030990A (zh) * | 2019-11-05 | 2020-04-17 | 华为技术有限公司 | 一种建立通信连接的方法及客户端、服务端 |
CN111064985A (zh) * | 2018-10-16 | 2020-04-24 | 北京凌宇智控科技有限公司 | 一种实现视频串流的***、方法及装置 |
CN111316334A (zh) * | 2017-11-03 | 2020-06-19 | 三星电子株式会社 | 用于动态地改变虚拟现实环境的设备和方法 |
-
2020
- 2020-07-09 CN CN202010655829.0A patent/CN111831353B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7266616B1 (en) * | 2001-08-08 | 2007-09-04 | Pasternak Solutions Llc | Method and system for digital rendering over a network |
US10325410B1 (en) * | 2016-11-07 | 2019-06-18 | Vulcan Inc. | Augmented reality for enhancing sporting events |
US20180336069A1 (en) * | 2017-05-17 | 2018-11-22 | Tsunami VR, Inc. | Systems and methods for a hardware agnostic virtual experience |
CN107197342A (zh) * | 2017-06-16 | 2017-09-22 | 深圳创维数字技术有限公司 | 一种数据处理方法、智能终端、vr设备及存储介质 |
CN107203434A (zh) * | 2017-06-22 | 2017-09-26 | 武汉斗鱼网络科技有限公司 | 一种纹理共享的方法、装置以及计算机可读存储介质 |
CN111316334A (zh) * | 2017-11-03 | 2020-06-19 | 三星电子株式会社 | 用于动态地改变虚拟现实环境的设备和方法 |
US10497180B1 (en) * | 2018-07-03 | 2019-12-03 | Ooo “Ai-Eksp” | System and method for display of augmented reality |
CN109814719A (zh) * | 2018-07-26 | 2019-05-28 | 亮风台(上海)信息科技有限公司 | 一种基于穿戴眼镜的显示信息的方法与设备 |
CN111064985A (zh) * | 2018-10-16 | 2020-04-24 | 北京凌宇智控科技有限公司 | 一种实现视频串流的***、方法及装置 |
US10452868B1 (en) * | 2019-02-04 | 2019-10-22 | S2 Systems Corporation | Web browser remoting using network vector rendering |
US10558824B1 (en) * | 2019-02-04 | 2020-02-11 | S2 Systems Corporation | Application remoting using network vector rendering |
CN110413386A (zh) * | 2019-06-27 | 2019-11-05 | 深圳市富途网络科技有限公司 | 多进程处理方法、装置、终端设备及计算机可读存储介质 |
CN111030990A (zh) * | 2019-11-05 | 2020-04-17 | 华为技术有限公司 | 一种建立通信连接的方法及客户端、服务端 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612456A (zh) * | 2020-12-25 | 2021-04-06 | 深圳市引力创新科技有限公司 | 一种多程序***性管理框架及管理方法 |
CN115209178A (zh) * | 2021-04-14 | 2022-10-18 | 华为技术有限公司 | 一种信息处理方法、装置及*** |
WO2022218209A1 (zh) * | 2021-04-14 | 2022-10-20 | 华为技术有限公司 | 一种信息处理方法、装置及*** |
CN116560858A (zh) * | 2023-07-07 | 2023-08-08 | 北京蔚领时代科技有限公司 | Vr云服务器容器隔离方法及*** |
CN117596377A (zh) * | 2024-01-18 | 2024-02-23 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
CN117596377B (zh) * | 2024-01-18 | 2024-05-28 | 腾讯科技(深圳)有限公司 | 画面推流方法、装置、电子设备、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN111831353B (zh) | 2024-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111831353B (zh) | 基于OpenXR标准的运行库、数据交互方法、设备及介质 | |
CN102137151B (zh) | 多链路远程协议 | |
JP7110272B2 (ja) | 電子装置及びその制御方法 | |
US8762544B2 (en) | Selectively communicating data of a peripheral device to plural sending computers | |
CN105704161B (zh) | 用于传送和接收远程呈现图形数据的方法和*** | |
WO2022257699A1 (zh) | 图像画面显示方法、装置、设备、存储介质及程序产品 | |
CN102413150A (zh) | 服务器、虚拟桌面控制方法以及虚拟桌面控制*** | |
CN101553795A (zh) | 多用户显示代理服务器 | |
CN101681246A (zh) | 跨网络共享计算机显示器 | |
CN113034629B (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
CN102196033B (zh) | 一种传送和接收远程呈现数据的方法和*** | |
JP2008526107A (ja) | リモートコンピューティングにおけるグラフィクスプロセッサの使用 | |
CN111984114A (zh) | 基于虚拟空间的多人交互***及其多人交互方法 | |
CN115065684B (zh) | 数据处理方法、装置、设备以及介质 | |
CN102664939A (zh) | 一种屏幕镜像移动终端的方法及设备 | |
CN104765636B (zh) | 一种远程桌面图像的合成方法和装置 | |
US7075544B2 (en) | Apparatus and method of processing image in thin-client environment and apparatus and method of receiving the processed image | |
CN114616536A (zh) | 使用超帧传送表面数据的人工现实*** | |
EP3826259A1 (en) | Distributed multi-terminal and multi-network supporting system for android online game | |
CN113778593B (zh) | 云桌面控制方法、装置、电子设备、存储介质及程序产品 | |
CN113327303B (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
WO2023179395A1 (zh) | 一种数据传输***、方法、服务***、设备及存储介质 | |
CN115373618B (zh) | 一种多屏显示方法、装置、车机及存储介质 | |
US20230153137A1 (en) | Remote rendering system, method and device based on virtual mobile architecture | |
CN111343478A (zh) | Vr设备数据处理方法、***、vr一体机及存储介质 |
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 |