CROSS REFERENCE TO RELATED APPLICATIONThis application claims the benefit of U.S. Provisional Application No. 63/194,821 filed on May 28, 2021, and the benefit of U.S. Provisional Application No. 63/105,320 filed on Oct. 25, 2020, the disclosures of which are incorporated, in their entirety, by this reference.
BRIEF DESCRIPTION OF THE DRAWINGSThe accompanying drawings illustrate a number of exemplary embodiments and are a part of the specification. Together with the following description, these drawings demonstrate and explain various principles of the present disclosure.
FIG. 1 is an illustration of an exemplary system for hosting an application in a server-side environment.
FIG. 2 is an illustration of an exemplary architecture for a server-side hosted environment for a cloud gaming system.
FIG. 3 is an illustration of an example server included in a cloud application platform that hosts an application in a server-side environment.
FIG. 4 is an illustration of an exemplary architecture of asystem400 for providing web real-time communication between a computing device and an application platform included a server-side environment.
FIG. 5 is an illustration of an exemplary architecture for hosting an application in a server-side environment that shows further details of the implementing of the exemplary architecture in data centers that provide the server-side environment.
FIG. 6 is an illustration of an exemplary architecture for hosting an application intended to execute in a first operating system in a server-side environment.
FIG. 7 is an illustration of an exemplary architecture for hosting an application intended to execute in a second operating system in a server-side environment.
FIG. 8 is a flow diagram of an exemplary method for implementing a cloud gaming system in a server-side hosted environment.
FIG. 9 is a block diagram of an example system that includes modules for use in implementing a cloud gaming system in a server-side hosted environment.
FIG. 10 illustrates an exemplary network environment in which aspects of the present disclosure may be implemented.
FIG. 11 is an illustration of exemplary augmented-reality glasses that may be used in connection with embodiments of this disclosure.
FIG. 12 is an illustration of an exemplary virtual-reality headset that may be used in connection with embodiments of this disclosure.
Throughout the drawings, identical reference characters and descriptions indicate similar, but not necessarily identical, elements. While the exemplary embodiments described herein are susceptible to various modifications and alternative forms, specific embodiments have been shown by way of example in the drawings and will be described in detail herein. However, the exemplary embodiments described herein are not intended to be limited to the particular forms disclosed. Rather, the present disclosure covers all modifications, equivalents, and alternatives falling within the scope of the appended claims.
DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTSMany software applications may be hosted in the cloud and delivered to a user remotely. Cloud-based computing technology may allow a user to interact with a local computing device to execute a cloud-hosted application on a remote server. The local computing device may connect to the remote server by way of a network (e.g., via the Internet) to enable the interaction. For example, a cloud-hosted application may be an application, such as a game, that traditionally was executed on a local computing device of an end-user. Examples of local computing devices may include, but are not limited to, mobile computing devices, smartphones, tablets, notebooks, Chromebooks™, laptops, and other personal computing devices (e.g., PCs). The execution environment, architecture, and hardware on a remote server that implements and runs a cloud-hosted system for hosting an application (e.g., the cloud-hosted infrastructure environment) may vary significantly from the execution environment, architecture, and hardware that executes an application on the local computing device (e.g., the locally-hosted infrastructure environment). Based on these differences, an application intended to execute in the cloud may be specifically written as a cloud-hosted application and may be specifically designed to run on a cloud-hosted server to enable adequate performance. Also, an application intended to execute on a local computing device may be specifically written as an on-premise application (a local application) and may be specifically designed to run on the local computing device to enable adequate performance.
In some cases, an application intended to execute on a local computing device may require modifications to execute then in a cloud-hosted infrastructure environment. The modifications may include, but are not limited to, modifications to accommodate various hardware and software differences inherent in the cloud-hosted infrastructure that are different than those of the local computing device. For example, a locally hosted infrastructure environment of the local computing device may include a local display device that does not include or implement layers of virtualization. This may be compared to the cloud-hosted infrastructure environment that may include a headless system that implements one or more virtualized layers more typically found in a server environment that may support a cloud-hosted infrastructure. Due to these various hardware and/or software differences between the locally-hosted infrastructure environment and the cloud-hosted infrastructure environment, a local application may require significant modifications to enable adequate performance and a suitable user experience when executed as a cloud-hosted application executing in the cloud-hosted infrastructure environment.
The present disclosure is generally directed to systems and methods for optimizing the execution of a local application in a cloud-hosted infrastructure environment without the need for modifications to the local application while providing adequate performance and a suitable user experience. For example, the local application may execute in a server-side hosted environment, such as a cloud-hosting infrastructure. As will be explained in greater detail below, embodiments of the present disclosure may optimize the execution of an application non-native to the server-side hosted environment in the server-side hosted environment for effective content delivery to a computing device of an end-user. In some implementations, the application may be designed to run on a computing device of an end-user, such as a mobile computing device or a PC, rather than in a virtualized environment on a server for content delivery over a network. By optimizing the execution of the non-native application in the server-side hosted environment, embodiments of the present disclosure may improve the functioning of computing devices that support the execution of the non-native application in the server-side hosted environment, may allow end-users to use more of a variety of applications with cloud-based systems, may spare application and/or cloud infrastructure developers from having to invest resources in adapting or creating applications specifically for execution in the server-side environment. In addition, or in the alternative, optimizing the execution of the non-native application in the server-side hosted environment may allow for the modifying or enhancing of the application dynamically as it executes in the server-side environment.
Features from any of the embodiments described herein may be used in combination with one another in accordance with the general principles described herein. These and other embodiments, features, and advantages will be more fully understood upon reading the following detailed description in conjunction with the accompanying drawings and claims.
The following will provide, with reference toFIGS. 1-5, detailed descriptions of exemplary architectures for a system that hosts a non-native application in a server-side environment.FIGS. 5-7 provide detailed descriptions of a system that hosts non-native applications by virtualizing and/or emulating the execution environment in a cloud application platform that was intended to run the non-native application.FIG. 8 provides a detailed description executing a non-native application in a server-side hosted environment.
FIG. 1 is an illustration of anexemplary system100 for hosting an application in a server-side environment. Thesystem100 may include acloud application platform102 communicating with acomputing device106 over anetwork104. In some embodiments, the term “server-side” may refer to a classification of resources that run on a server or other suitable platform to generate and/or deliver content over a network to a computing device (e.g., the computing device106). Thecloud application platform102 may include servers and other software and hardware to host, run, and/or execute an application in the cloud to provide content to thecomputing device106. The content may include, but is not limited to, graphics content and audio content.
In some implementations, thenetwork104 may be the Internet, a Local Area Network (LAN), a Wide Area Network (WAN), or any type of communication network that implements various types of communication protocols and/or physical connections. Thecomputing device106 may be a client device. For example, a user (e.g., an end-user) may interact with thecomputing device106 when interfacing with an application executing in thecloud application platform102. In addition, or in the alternative, a user may view content provided by thecloud application platform102 that may be presented on a display device included in thecomputing device106. Thecomputing device106 may receive the content from thecloud application platform102 in a web browser or other application executing locally on thecomputing device106.
A remote device may communicate with, may be connected to (wired or wirelessly), and/or otherwise be interfaced with an input device. For example, thecomputing device106 may be in communication with aninput device108. In some implementations, thecomputing device106 may include theinput device108. In some implementations, theinput device108 may be in wired or wireless communication with thecomputing device106. The wireless communication may be implemented using a wireless communication protocol that may include, but is not limited to, Wi-Fi, BLUETOOTH, cellular, radio, or any other type of wireless communication protocol. Theinput device108 may provide input to computingdevice106. Thecomputing device106 may then provide information and data to thecloud application platform102 by way of thenetwork104. Thecloud application platform102 may use the information and data to control the application executing in thecloud application platform102. The control of the application may be based, at least in part, on the input received frominput device108.
A cloud application platform may provide a server-side hosted environment for executing an application (e.g., a cloud-hosted application). For example, thecloud application platform102 may provide a cloud-hosted infrastructure environment that is architected to include at least one remote server, an execution environment, and hardware for implementing and running a cloud-hosted system for hosting the application. As described in more detail below, thecloud application platform102 may provide various optimizations to allow for enhanced execution of an application not designed to operate in a server-side hosted environment (e.g., an application non-native to the server-side hosted environment (a non-native application or a local application)).
In some implementations, thecloud application platform102 may virtualize hardware for the server-side hosted environment that is native to the execution environment of an application. The application may then be executed in the server-side hosted environment, which is not native to the application, by the virtualized hardware. The virtualized hardware may enable the application that is non-native to the server-side hosted environment to execute in the server-side hosted environment. In some implementations, thecloud application platform102 may intercept network calls from the non-native application as it is executing in the server-side environment. Thecloud application platform102 may map a network call intended for a specified network location in the native execution environment of the application to an updated network location in the server-side hosted environment. In some implementations, thecloud application platform102 may optimize graphics processing of an application executing in the server-side hosted environment. Thecloud application platform102 may optimize the non-native application by modifying a video frame of the non-native application for transmission to thecomputing device106 during a rendering process. For example, the optimization may change a target characteristic of the video frame.
In some implementations, the application may be a game (e.g., a video game, a gaming application). For example, the game may be an existing game designed to execute on a computing device of a user. For example, the game may be a mobile application. Thesystem100 may host and provide cloud-delivery for an existing game designed for varying hardware and/or software platforms. The cloud-delivery of the existing game may allow a user to play on the game on the computing device of the user without performance degradation and without the need for substantial modifications to the game.
FIG. 2 is an illustration that includes details of anexemplary system200 for hosting an application in a server-side environment. For example, referring toFIG. 1, thesystem200 may includeinput devices208, which may include theinput device108. Thesystem200 may includecomputing devices206, which may include thecomputing device106. Thesystem200 may include thenetwork104. Thesystem200 may include a cloud application platform. In some implementations, thecloud application platform202 may represent an implementation of thecloud application platform102. In some implementations, thesystem200 may be a cloud gaming system that hosts game applications in a server-side environment.
An input device may include any suitable device for providing input to a computing device. For example, theinput devices208 may include, but are not limited to, amouse210, akeyboard212, amicrophone214, or agame controller232. Thecomputing devices206 may be in communication with (connected to) theinput devices208. Thecomputing devices206 may connected to the input devices by way of a wireless or a wired connection. The computing devices may be in wired or wireless communication with theinput devices208. Theinput devices208 may provide an input stream of data to thecomputing devices206 by way of a connection between an input device and a computing device.
A computing device may receive input from an input device. In some implementations, a computing device may include the input device. For example, thecomputing devices206 may include, but are not limited to, a mobile computing device216 (e.g., a smartphone, a tablet, a notebook computer, a Chromebook™), a personal computing device218 (e.g., a PC), alaptop computer220, an augmented-reality system1100, and a virtual reality (VR)system1200. In some implementations, a touchscreen and/or touchpad included in themobile computing device216, thepersonal computing device218, and/or thelaptop computer220 may be the source of the input that the computing device provides as information and data to thecloud application platform202 by way of thenetwork104.
One or more computing devices may communicate with a cloud application platform by way of a network. For example, thecomputing devices206 may communicate with thecloud application platform202 by way of thenetwork104. Thecomputing devices206 may send, transmit, or otherwise provide an input stream of data to thecloud application platform202. The input data stream may include information and data for controlling the execution of a non-native application that is hosted in the server-side hosted environment of thecloud application platform202. In response, thecloud application platform202 may send, transmit or otherwise provide a video and/or audio data stream to thecomputing devices206. The video and/or audio data stream may be displayed on a display device of the computing device (e.g.,display device222,display device224,display device226, a left display device1115(A) and a right display device1115(B) (referring toFIG. 11), and/or one or more electronic displays included in the virtual-reality system1200 which will be described in more detail with reference toFIG. 12).
A cloud application platform may include a plurality of servers. In the example shown inFIG. 2, thecloud application platform202 includes three servers228a-c. In some implementations, a cloud application platform may include less than three servers (e.g., two servers, one server). In some implementations, a cloud application platform may include more than three servers.
A cloud application platform may utilize edge computing to efficiently receive an input data stream and to efficiently serve content using an output video and/or audio data stream. The receiving and outputting of data streams may be from cloud servers to computing devices by way of a network. In some implementations, thecloud application platform202 may utilize edge computing to efficiently receive the input data stream and to efficiently serve the video and/or audio data stream (e.g., content) from cloud servers to thecomputing devices206 by way of thenetwork104. Edge computing may bring computational resources of thecloud application platform202 closer to a user (a computing device of an end-user) increasing the responsiveness and throughput of the non-native application as it executes in the server-side hosted environment. For example, edge node(s)230 may include one or more edge nodes. An edge node may provide a connection between a server (e.g., one of the servers228a-c) and a computing device (e.g., one of the computing devices206). The edge node may provide service delivery computing offload, internet-of-things (IoT) connection management, storage, and caching. The use of edge computing may create a content delivery network that delivers low latency content from servers (e.g., edge servers) to requesting computing devices.
Thesystem200 may advantageously allow developers to build applications intended to execute on one computing platform (e.g., operating system) to reach other users operating different computer platforms. and further may provide users with immediate access to applications regardless of device capabilities, such as games, virtual reality (VR) applications for VR systems (e.g., the VR system1200), augmented reality (AR) applications for AR systems (e.g., the AR system1100), applications for other types of artificial or augmented reality systems and experiences, and applications that provide streaming media, etc. These advantages may be realized withsystem200 by using virtualization technology to run applications in virtual hosting environments on top of a base operating system. Example virtual hosting environments may include, for example, Android™ virtual environments, MICROSOFT® WINDOWS® virtual machine (“VM”), and/or other container technologies.
In some implementations, thesystem200 may be a cloud gaming system that hosts game applications in a server-side environment. The use of edge computing may allow thesystem200 to meet response-time constraints for real-time gaming in a cloud gaming system by providing real-time responses and interactions resulting in adequate performance for a game along with a suitable user experience when the game is run as a cloud-hosted application executing in a cloud-hosted infrastructure environment.
FIG. 3 is an illustration of anexample server350 included in a cloud application platform that hosts an application in a server-side environment. For example, referring toFIG. 2, theserver350 may be one of the servers228a-cin thecloud application platform202. As described with reference toFIG. 1, a cloud application platform may provide a cloud-hosted infrastructure environment that is architected to include at least one remote server, an execution environment, and hardware for implementing and running a cloud-hosted system for hosting the application. Theserver350 may include hardware, firmware, and/or software for hosting an application in a server-side environment.
A server may execute an operating system. For example, theserver350 may execute anoperating system302 in communication with, and running on, one or more central processing units (CPUs)304a-n. Theoperating system302 may also be in communication with one or more graphics processing units (GPUs)306a-nfor image and graphics processing. Theserver350 may include any suitable number of CPUs304a-nand GPUs306a-n.
An operating system may interact with one or more edge nodes in an edge computing environment. For example, theoperating system302 may be an operating system that interacts with edge nodes (e.g., the edge node(s)230) in an edge computing environment. Theoperating system302 may include avirtualization module308 that provides software and operating system virtualization capabilities that allow thecloud application platform202 to support multiple, isolated virtual environments. In some implementations, thevirtualization module308 may be a virtual machine (e.g., a Kernel-based Virtual Machine (KVM)). In some implementations, thevirtualization module308 may be an emulator (e.g., a Quick EMUlator (QEMU)).
A container may include an application layer that packages code, dependencies, and configuration files together to create an entire runtime environment for the container. For example, any suitable container may be used such as a container system that may include a base operating system layer and a customization layer included in a hosted environment, and an application layer. Theoperating system302 and thevirtualization module308 may support one or more containers310a-n. Each container310a-nmay be a virtualized software unit that provides an isolated environment for software execution. Each container310a-nmay provide a sandboxed environment to execute a respective hosted environment312a-n. Likewise, each hosted environment312a-nmay, in turn, execute a respective application314a-n. In some implementations, a hosted environment may be a containerized operating system. In some implementations, a hosted environment may be an emulator that emulates a specific operating system. Nonlimiting examples of hosted environments may include an Android™ Emulator and a MICROSOFT® WINDOWS® Virtual Machine.
Implementing a server-side architecture that includes each application and hosted environment in a container, and that includes a virtualization module and/or an operating system may provide security among different applications (e.g., non-native applications) executing in the server-side hosted environment. The architecture allows one application (e.g.,application314a) to be isolated from another application (e.g.,application314n). Such isolated, containerized execution of an application may provide increased security and performance guarantees by isolating execution to dedicated hardware. The hardware and software runtime may be standardized such that application performance may be consistent regardless of which server or which server hardware runs the individual runtime instance. The hardware and software runtime may therefore provide virtualization at scale.
In some implementations, a cloud application platform may dynamically create, allocate, and/or provision a container and/or a hosted environment on an as-needed basis. For example, when a user initializes an application (e.g., initiates execution of an application in the cloud), a cloud application platform may create an instance of a container and/or a hosted environment to run application. In addition, once the user completes operating the application, the cloud application platform may then delete the instance of the container and/or the hosted environment. Referring toFIGS. 2 and 3, a user interacting with an input device and a computing device may initiate execution of theapplication314a. For example, the computing device may provide an input data stream to thecloud application platform202 by way of thenetwork104. In response, thecloud application platform202 may create the instance of thecontainer310afor executing theapplication314ain the hostedenvironment312a. Theserver350 may output a video and/or audio stream of data (e.g., output content by way of an edge node and the network104) to the computing device of the user for consumption by the user. The user interacting with the input device and the computing device may then initiate stopping the execution of theapplication314a. For example, the computing device may provide an input data stream to thecloud application platform202 by way of thenetwork104. In response, thecloud application platform202 may stop execution of theapplication314ain thecontainer310aand then may delete the instance of thecontainer310a.
FIG. 4 is an illustration of an exemplary architecture of asystem400 for providing web real-time communication between a computing device and a cloud application platform included a server-side environment. For example, referring toFIG. 2, acomputing device406 may be a computing device included in thecomputing devices206. Thecomputing device406 may communicate and interface with thecloud application platform202 by way of thenetwork104. As described with reference toFIG. 2, thecomputing device406 may provide aninput data stream410 to thecloud application platform202. Thecomputing device406 may receive a video/audio output data stream412 from thecloud application platform202 by way of thenetwork104.
A computing device may include a streaming technology stack. A cloud application platform may include a streaming technology stack. A streaming technology stack may implement the streaming of data between a computing device and a cloud application platform (e.g., a server included in the cloud application platform). For example, referring toFIG. 2, thesystem200 may include thesystem400. Thesystem400 may provide web-based (Internet based) real-time, direct, and uninterrupted communication between thecomputing device406 and thecloud application platform202 that applies to both theinput data stream410 and the video/audiooutput data stream412.
In some implementations, a streaming technology stack may be implemented using a web real-time communication protocol stack (e.g., a WebRTC protocol stack). The use of a WebRTC protocol stack may enable low latency communications between a sender of streaming data and a receiver of the streaming data. Such low latency communications may enable live streaming between computing systems.
For example, a user may interact with thecomputing device406 when interfacing with an application executing in thecloud application platform202. The user may view, listen to, and/or otherwise interact with content provided by thecloud application platform202 that may be presented on adisplay device422 included in thecomputing device406 and/or played on one ormore speakers424 included in thecomputing device406. For example, thecloud application platform202 may provide, send, or transmit the video/audiooutput data stream412 using astreaming technology stack418 that implements a web real-timecommunication protocol stack420. Thecomputing device406 may receive the content from thecloud application platform202 in a web browser or other application executing locally on thecomputing device406. For example, thecomputing device406 may include astreaming technology stack414 that implements a web real-timecommunication protocol stack420 that receives the video/audio output data stream412 from thecloud application platform202 in real-time. Thestreaming technology stack414 may also provide theinput data stream410 from thecomputing device406 to thecloud application platform202 for use or processing by thestreaming technology stack418. Such communications between thecomputing device406 and thecloud application platform202, and specifically between the streamingtechnology stack414 and thestreaming technology stack418, may provide direct and uninterrupted communications between thecloud application platform202 and thecomputing device406. The direct and uninterrupted communications may allow for real-time interactions between thecomputing device406 and the application running on thecloud application platform202. Real-time interactions with a cloud-hosted application may be especially critical when the cloud-based application is a game.
A web real-time communication protocol stack may be used to provide data (e.g., digital data, audio data, video data, etc.) between computing systems and computing devices (e.g., thecomputing device406 and the cloud application platform202). The ability to transmit and/or receive such data in real-time may provide support for richer user experiences when interacting with a cloud-hosted application. For example, the user experiences may include, but are not limited to, in-app advertising (IAA), in-app purchases (IAP), and social features such as sharing and requests (e.g., game requests). Thesystem200, when incorporating thesystem400, may allow generic streaming applications to live in the cloud and be accessible to client computing devices of users. Thesystem200 may provide real-time communications and interactions between a computing device and a cloud application platform without the need for any additional installation or setup for the streaming application.
FIG. 5 is an illustration of an exemplary architecture of asystem500 for hosting an application in a server-side environment that shows the details of implementing exemplary architecture in data centers that provide the server-side environment. For example, thesystem500 may include adata center510. In some implementations, a cloud application platform may interface with a data center. For example, referring toFIG. 2, thecloud application platform202 may interface with thedata center510.
In some implementations, a data center may interface with one or more servers and other equipment that may be located in a particular location, space, or area and that are directly connect to an Internet network backbone. Such a location, space, or area may be referred to as a colocation center. For example, thedata center510 may interface with one or more colocation centers such as the cloud hosting edges512a-b. Each cloud hosting edge512a-bmay be a location or space for server(s) and equipment that virtualize and/or emulate an operating system environment for executing non-native applications in the cloud. For example, theserver350 may be an example of a server included in a cloud hosting edge. In one non-limiting example, thecloud hosting edge512amay be a colocation center that includes servers and equipment for supporting non-native applications intended to run in a first operating system (e.g., a MICROSOFT® WINDOWS® operating system). Thecloud hosting edge512bmay be a colocation center that includes servers and equipment for supporting non-native applications intended to run in a second operating system (e.g., an Android™ operating system). Though thedata center510 shown inFIG. 5 interfaces with two cloud hosting edges, in some implementations, a data center may interface with one cloud hosting edge, and in some implementations, a data center may interface with multiple cloud hosting edges (e.g., two cloud hosting edges, more than two cloud hosting edges). In some implementations, thedata center510 may interface with at least one cloud hosting edge for supporting a virtualization of an operating system. In some implementations, thedata center510 may interface with at least one cloud hosting edge for supporting emulation of an operating system.
In some implementations, a data center may interface with one or more edge servers. In these cases, the servers may perform computing, networking, storage, security, and other computer-based functions and interactions by way of edge nodes. For example, referring toFIG. 2, thecloud application platform202 may utilize edge computing to efficiently receive an input data stream and to efficiently serve content using an output video and/or audio data stream. Each of the servers228a-cmay be a cloud edge OS as shown in the example ofFIG. 5. Referring toFIG. 3, theserver350 may represent a cloud edge OS as shown inFIG. 5.
Each cloud hosting edge may include at least one cloud edge operating system (OS). For example, a cloud edge OS may be an edge server in a cloud hosting edge. For example, referring toFIG. 3, theserver350 may be a cloud edge OS. For example, thecloud hosting edge512amay include cloud edge OSs514a-b. Thecloud hosting edge512bmay include cloud edge OSs a-b. Though each of the cloud hosting edges512a-bshown inFIG. 5 include two cloud edge OSs, in some implementations, a cloud hosting edge may include one cloud edge OS, and in some implementations, a cloud hosting edge may include multiple cloud edge OSs (e.g., two cloud edge OSs, more than two cloud edge OSs). In some implementations, each cloud hosting edge may include the same number of cloud edge OSs. In some implementations, each cloud hosting edge may include a different number of cloud edge OSs.
A cloud edge OS may include one or more containers for virtualizing an operating system. Each container may execute a non-native application intended to run in an operating system in a virtualized environment provided by the container. Each container may include hardware and/or software for virtualizing an execution environment for a non-native application intended to run in the execution environment. For example, thecloud edge OS514amay include containers518a-b. Thecloud edge OS514bmay include containers522a-b. Each container518a-bmay include a machine emulator module520a-b, respectively. Each container522a-bmay include a machine emulator module524a-b, respectively.
Each machine emulator module520a-band524a-bmay include hardware and/or software for virtualizing an execution environment (e.g., a MICROSOFT® WINDOWS® operating system environment) for a non-native application intended to run in the execution environment (e.g., for a non-native application intended to run in a MICROSOFT® WINDOWS® operating system environment). In cases where a non-native application is a gaming application, a machine emulator module (e.g., machine emulator modules520a-b, machine emulator modules524a-b) may run the operating system that the non-native gaming application was intended to run on in order to execute the gaming application during a game session.
A cloud edge OS may include one or more containers for emulating an operating system. Each container may execute a non-native application intended to run in an operating system in an emulated environment provided by the container. Each container may include hardware and/or software for emulating an execution environment for a non-native application intended to run in the execution environment. For example, thecloud edge OS516amay include containers526a-b. Thecloud edge OS516bmay include containers530a-b. Each container526a-bmay include a machine emulator module528a-b, respectively. Each container530a-bmay include a machine emulator module532a-b, respectively.
A machine emulator module may include hardware and/or software for emulating and/or virtualizing an execution environment for a non-native application intended to run in the execution environment. A machine emulator module may be a generic open-source machine emulator and virtualizer that may run an operating system (e.g., the execution environment) for a gaming application executing during a game session. For example, each machine emulator module528a-band532a-bmay include hardware and/or software for emulating an execution environment (e.g., an Android™ operating system environment) for a non-native application intended to run in the execution environment (e.g., for a non-native application intended to run in an Android™ operating system environment). In cases where a non-native application is a gaming application, a machine emulator module (e.g., machine emulator modules528a-b, machine emulator modules532a-b) may run the operating system that the non-native gaming application was intended to run on in order to execute the gaming application during a game session.
Though each of the cloud edge OSs514a-band516a-bshown inFIG. 5 include two containers, in some implementations, a cloud edge OS may include one container, and in some implementations, a cloud edge OS may include multiple containers (e.g., two containers, more than two containers). In some implementations, each cloud edge OS may include the same number of containers. In some implementations, each cloud edge OS may include a different number of containers.
A computing device may run a browser application locally on the computing device. A user may interact with the browser application by way of an internet connection to a web service to access a cloud server management service. The we service may process a request to execute the non-native application in the cloud application platform. In some implementations, the web service may interface with one or more edge nodes in an edge computing environment. Through the browser application a user may interact with a non-native application executing in a cloud application platform that hosts the non-native application. In some implementations, a product edge may provide an interface point between communicating entities such as a computing device and one or more servers. The product edge may include one or more of computers, routers, switches, multiplexers, and/or other types of network interface equipment, hardware, and/or software for implementing and managing the communication interface point.
A computing device may run a social media application locally on the computing device. In some implementations, the user may run the social media application by using the browser. A user may interact with the social media application by way of an internet connection to a web service to access a cloud server management service. In some implementations, the social media application may provide real-time game play (e.g., real-time access and interactions with a gaming application) to a user (an end user) of the computing device. In some implementations, the browser application may provide real-time game play (e.g., real-time access and interactions with a gaming application) to a user (an end user) of the computing device.
A computing device may execute a browser application. Referring toFIGS. 4 and 5, thecomputing device406 may execute abrowser application534. A user may interact with thebrowser application534. A user interacting with thebrowser application534 may input a web page address for a web page that may serve the content for the page. The web page address may be for a cloud application platform that may execute non-native applications. The web page address may be provided to aninternet connection536 using Hypertext Transfer Protocol (HTTP) or Hypertext Transfer Protocol Secure (HTTPS) for data communication with a cloudserver management service546. For example, thebrowser application534 may provide game play to the user of the computing device by allowing the user to access and interact with a gaming application (e.g., a video game) that may be executed in the cloud application platform.
A computing device may execute a social media application. Referring toFIGS. 4 and 5, thecomputing device406 may execute asocial media application548. A user may interact with thesocial media application548. Thesocial media application548 may provide game play to the user of the computing device by allowing the user to access and interact with a gaming application (e.g., a video game) that may be executed in the cloud application platform.
A web service may receive requests to access web pages using a cloud server management service. For example,web service544 in thedata center510 may receive a web page address for a cloud gaming application that the web service provides to a cloudserver management service546. The cloudserver management service546 may provide access to the non-native application executing in a cloud application platform by way of thebrowser application534.
A product edge may provide an interface point between communicating entities. For example, aproduct edge538 may provide a communication interface point for thecomputing device406 and each cloud edge OS included incloud hosting edge512aandcloud hosting edge512b. For example, theproduct edge538 may direct or route input received from thecomputing device406 to theweb service544. Referring toFIG. 4, theproduct edge538 may receive the data from thecomputing device406 using theinput data stream410 by way of theinternet connection536 as provided by thenetwork104. Theproduct edge538 may direct or route input received from thecomputing device506 to a container executing a non-native application. Theproduct edge538 may direct or route output data (e.g., the video/audiooutput data stream412 as shown inFIG. 4) from a container executing a non-native application to thecomputing device406 using aninternet connection540 provided by thenetwork104. For example, theinternet connection540 may provide a communication channel for sending and receiving real-time streaming video and/or audio data between thecomputing device406 and a container on a cloud edge OS using a streaming technology stack that implements a web real-time communication protocol stack. In some implementations, each cloud hosting edge may include a product edge. The product edge may include one or more of servers, routers, switches, multiplexers, and/or other types of network interface equipment, hardware, and/or software for implementing and managing the communication interface point. In some implementations, thenetwork104 may provide theinternet connection536 and theinternet connection540.
Aproxy server542 may provide information and data to theinternet connection540 through a firewall. Theproxy server542 may be an application that acts as an intermediary between application requests and the cloudserver management service546. For example, in cases where a game session is executing in themachine emulator module520a, theproxy server542 may be an application that acts as an intermediary between the game session online requests and the cloudserver management service546. In some implementations, theproxy server542 may be a forward proxy that may provide requests, information, and/or data from thecloud hosting edge512aand/or thecloud hosting edge512bto thecomputing device406 by way of theinternet connection540 through a firewall.
FIG. 6 is an illustration of an exemplary architecture of asystem600 for hosting an application intended to execute in a first operating system in a server-side environment. The first operating system may be a desktop operating system. For example, the first operating system may be a MICROSOFT® WINDOWS® operating system. Thesystem600 may host an application intended to execute in a MICROSOFT® WINDOWS® operating system. Thesystem600 may host the application in a server-side hosted environment as shown in, for example,FIG. 5. The server-side hosted environment may be non-native to the application. The server-side hosted environment may include a virtual machine (e.g.,machine emulator module520a) for virtualizing the environment in the server intended to run the application.
A user interacting with a browser application on a computing device may enter a web page address for a cloud application platform. Referring toFIG. 5, a user of thecomputing device406 may enter a web page address to access a cloud application platform executing the non-native application that the user wants to interact with. Theproduct edge538 may direct the web page address received by way of theinternet connection536 usingproduct edge service612 and network load balancer (NLB)614 to the cloudserver management service546 of theweb service544. The cloudserver management service546 may manage access to a container that is implementing a virtualization of the execution environment for the non-native application in the cloud application platform.
In some implementations, the cloudserver management service546 may be a cloud gaming load balancer that distributes one or more games sessions over a set of operating system hosts. For example, cloudserver management service546 may assign a game session to thecontainer518aof thecloud edge OS514a. The cloudserver management service546 may balance the distribution of the one or more game sessions over the set of operating system hosts with the intention of making the overall processing of each game session as efficient as possible.
A web service may access a container that may execute a non-native application on a cloud edge OS. For example, theweb service544 may communicate with thecontainer518athat may execute the non-native application in a virtualization of the first operating system. The cloudserver management service546 may communicate with a data control module (e.g., host manager module616) included in thecontainer518a. Thehost manager module616 may interface with a configuration and deployment management platform module (e.g., emulator manager module618).
Theemulator manager module618 may provide a kernel-based virtual machine (KVM) access to a Quick EMUlator (QEMU) hosted virtual machine that performs the hardware virtualization in themachine emulator module520ain thecontainer518a. Themachine emulator module520amay be a generic, open-source machine emulator and/or virtualizer used for running an operating system when an application (e.g., application620) is executing during a session. For example, in cases where the application is a gaming application, a machine emulator module may run the operating system when a gaming application is executing during a gaming session.
Theemulator manager module618 may manage one or more virtual machines (e.g., themachine emulator module520a) running inside of a container (e.g., thecontainer518a). Thehost manager module616 may also communicate with a virtual machine (VM)manager module626 that manages themachine emulator module520a. Thehost manager module616 may manage one or more containers (e.g., thecontainer518a) running inside of an operating system host (e.g.,cloud edge OS514a). In some implementations, a software suite may be used by an operating system running native to thecloud edge OS514ato spawn themachine emulator module520a.
A machine emulator module may virtualize or emulate hardware and/or an operating system for execution of a non-native application in a cloud application platform. For example, themachine emulator module520amay virtualize or emulate the hardware and/or operating system for execution of the non-native application (e.g., the application620) in a sandboxed environment included in anapplication container624 in themachine emulator module520a. Theapplication620 may execute in themachine emulator module520aof thecloud edge OS514ain such a way that a user may interact with theapplication620 as if theapplication620 were executing locally on thecomputing device406. For example, in cases where the application is a gaming application (e.g., a game), the machine emulator module may run the operating system when a gaming application is executing during a gaming session.
An application container may provide a restrictive secure environment for executing an application in a cloud application platform. The secure environment may provide the security needed to execute the application in the cloud. For example, theapplication container624 may provide a restrictive process execution environment for theapplication620. In cases where a game session is executing in themachine emulator module520a, the restrictive process execution environment may provide additional resource security and isolation for the game session as it is executing in themachine emulator module520a.
Themachine emulator module520amay include alogging service628, an applicationsession manager module630, an application containerpartial application session632, and apartial application session636 that includes acloud layer634. Thelogging service628 may record information and data regarding details about theapplication620 executing in themachine emulator module520athat may be provided to alogging service module638 included in theweb service544.
A logging service may collect and aggregate log messages for storage in a database for further analysis. For example, the cloudserver management service546 may assign a game session to thecontainer518a. Thelogging service628 may collect and aggregate log messages from the game session executing in themachine emulator module520a. Thelogging service628 may store the log messages in a repository or database for later analysis.
A distributed messaging system module may store information and data for possible access by a user. For example, thelogging service module638 may receive information and data regarding details about theapplication620 executing in themachine emulator module520afrom thelogging service628. Thelogging service module638 may provide a distributed messaging system to theweb service544 for collecting, aggregating, and/or delivering high volumes of message data with low latency to a user.
An application session manager module may manage and/or control the operation of a virtual machine. For example, the applicationsession manager module630 may control the operation of themachine emulator module520a. The applicationsession manager module630 may communicate or interface with the cloudserver management service546 and a Graph application programming interface (API)640. The applicationsession manager module630 may prepare a virtual machine (e.g., themachine emulator module520a) for running an application (e.g., the application620) in the cloud. In a non-limiting example, the applicationsession manager module630 may prepare themachine emulator module520afor running theapplication620 by installing the application binaries and/or by downloading one or more user profiles. In addition, or in the alternative, in cases where a game session is executing in themachine emulator module520a, the applicationsession manager module630 may manage the game session.
A Graph API may provide a representation of information and/or data from a social media platform. Referring toFIG. 5, theGraph API640 may upload information and data related to the execution of the non-native application in the cloud application platform to thebrowser application534 running on thecomputing device406. For example, theGraph API640 may be an HTTP-based API that may access a social graph of a social media platform.
The application containerpartial application session632 may be a process that runs or executes one or more parts of theapplication620 in theapplication container624. The selection and/or determination of the one or more parts of theapplication620 to run in theapplication container624 may be based on the ability of the process to run the one or more parts of theapplication620 under the restrictive permissions provided by theapplication container624. Executing or running the one or more parts of theapplication620 under such restrictive permissions may provide the security necessary to run theapplication620 in thecloud edge OS514a. In cases where theapplication620 is a game and a game session is executing in themachine emulator module520a, the game session may be split or divided into one or more sessions that are split in this manner for security reasons.
Thepartial application session636 may be a process that creates theapplication620 in theapplication container624. Thepartial application session636 may be a process that captures the real-time streaming video and/or audio data output by theapplication620. Thepartial application session636 may be a process that injects an input data stream into the real-time streaming video and/or audio data output by theapplication620. Thepartial application session636 may be a process that communicates with thecomputing device406 using WebRTC when providing the real-time streaming video and/or audio data injected with the input data stream to thecomputing device406.
Thepartial application session636 may provide a video/audio output data stream to theproduct edge538 by way of thecloud layer634. Thecloud layer634 may include a low-level library. The library may handle the communications for the application running on a virtual machine. For example, in cases where a game session is executing in themachine emulator module520a, thecloud layer634 may include a low-level library that handles the communications for the game using WebRTC. Thecloud layer634 may use the low-level library when sending real-time streaming video and/or audio data to thecomputing device406. Thecloud layer634 may use the low-level library when receiving real-time streaming video and/or audio data from thecomputing device406.
An application container may include a sandbox layer that facilitates the execution of a non-native application, intended to run in an operating system, in an emulated environment for the operating system provided by a container. For example, thecontainer518amay provide anapplication container624 that includes theapplication620. Theapplication620 may include asandbox layer622. Themachine emulator module520aincluded in thecontainer518amay include hardware and/or software for virtualizing an execution environment (e.g., a MICROSOFT® WINDOWS® operating system environment) for the non-native application intended to run in the execution environment (e.g., for a non-native application intended to run in a MICROSOFT® WINDOWS® operating system environment).
Thesandbox layer622 may facilitate the execution of theapplication620 in theapplication container624. Thesandbox layer622 may be a compatibility layer that intercepts one or more calls made by theapplication620 to an application programming interface (API) of the operating system that theapplication620 was intended to run in. Thesandbox layer622 may transparently modify the intercepted one or more application calls so that the one or more application calls function in thecontainer518a. The modifying of the intercepted one or more application calls by thesandbox layer622 avoids the need to modify the application620 (e.g., modify the original application binary file) in order for theapplication620 to function in thecloud edge OS514a.
In some implementations, an output of thesandbox layer622 of theapplication620 may connect to or interface with a domain name system (DNS)644 included in theproduct edge538. TheDNS644 may resolve network addresses from domain names. In some cases, the video/audio output data stream may be sent from thecloud layer634 to theNLB614 using the WebRTC protocol. In some cases, theapplication620 may access theinternet connection540 using theproxy server542 by way of thesandbox layer622.
FIG. 7 is an illustration of an exemplary architecture of asystem700 for hosting an application intended to execute in a second operating system in a server-side environment. For example, the second operating system may be an Android™ operating system. Thesystem700 may host an application intended to execute in an Android™ operating system. Thesystem700 may host the application in a server-side environment as shown in, for example,FIG. 5. The server-side environment may be non-native to the application.
A user interacting with a browser application on a computing device may enter a web page address for a cloud application platform. Referring toFIG. 5, a user of thecomputing device406 may enter a web page address to access a cloud application platform executing the non-native application that the user wants to interact with. TheProduct edge538 may direct the web page address received by way of theinternet connection536 using theproduct edge service612 and the network load balancer (NLB)614 to the cloudserver management service546 of theweb service544. The cloudserver management service546 may manage access to a container that is implementing a virtualization of the execution environment for the non-native application in the cloud application platform.
In some implementations, the cloudserver management service546 may be a cloud gaming load balancer that distributes one or more games sessions over a set of operating system hosts. For example, the cloudserver management service546 may assign a game session to thecontainer526aof thecloud edge OS516a. The cloudserver management service546 may balance the distribution of the one or more game sessions over the set of operating system hosts with the intention of making the overall processing of each game session as efficient as possible.
A web service may access a container that may execute a non-native application on an edge host. For example, theweb service544 may communicate with thecontainer526athat may execute the non-native application in a virtualization of the second operating system. Theweb service544 may communicate with thecontainer526ausing an applicationsession manager module710. The cloudserver management service546 may communicate or interface with the applicationsession manager module710.
An application session manager module may manage a session of an application running in a container. For example, the applicationsession manager module710 may manage a session of anapplication720 running in thecontainer526a. In cases where the application is a gaming application, the applicationsession manager module710 may manage the game session executing in thecontainer526a. The applicationsession manager module710 may manage one or more input events received from thecomputing device406. The applicationsession manager module710 may make a remote procedure call (RPC) to themachine emulator module528a. In some implementations, the RPC may be provided to themachine emulator module528ausing an operating system debug bridge input. For example, in implementations where the second operating system is an Android™ operating system, the RPC may be an Android debug bridge (ADB) input. For example, an ADB may be a communication channel that sends commands to the emulated Android™ operating system.
The applicationsession manager module710 may also communicate or interface withmedia processor module712. Themedia processor module712 may provide a platform in thecontainer526afor communications between the applicationsession manager module710, themachine emulator module528a, and theNLB614 of theproduct edge538. Theproduct edge538 may provide streaming video/audio content in real-time using a web real-time communication protocol stack (e.g., a WebRTC protocol stack) for securely providing and/or receiving streaming video/audio content. Themedia processor module712, using a WebRTC protocol stack to communicate with thecomputing device406, may provide the streaming video/audio content to thecomputing device406 in real-time. Themedia processor module712 may extract one or more frames from the streaming video/audio content provided by themachine emulator module528ato assist the applicationsession manager module710 with the providing of the streaming video/audio content to thecomputing device406.
In some implementations, a software suite may be used by an operating system running native to thecloud edge OS516ato spawn themachine emulator module528a. Themachine emulator module528amay virtualize or emulate the hardware and operating system for execution of the non-native application (e.g., the application720).
An application executing in the cloud may include an integrated software development kit that provides an application with cloud features. For example, software development kit (SDK)714 may be a software library of functions that are integrated into theapplication720. TheSDK714 may add cloud features to theapplication720 that allow theapplication720 to execute in thecloud edge OS516aand that allow a user interacting with thecomputing device406 to provide input to and/or receive output from theapplication720.
Themachine emulator module528amay include anapplication emulator proxy716. Theapplication720 may interface with an instance of an operating system (e.g., OS718) that is running in themachine emulator module528a. Theapplication emulator proxy716 may interface or communicate with theOS718 using operating system (OS) broadcasts. Theapplication emulator proxy716 may receive requests from theSDK714 via operating system (OS) broadcasts from theSDK714. Theapplication emulator proxy716 may also send responses to theSDK714 using OS broadcasts.
Theapplication720 may establish one or more socket connections tolocal proxy client722. Thelocal proxy client722 may provide information and data output by theapplication720 for input to theproxy server542. For example, thelocal proxy client722 may transparently provide internet access to theapplication720 by way of theproxy server542.
A machine emulator module may virtualize or emulate hardware and/or an operating system for execution of a non-native application in a cloud application platform. For example, themachine emulator module528amay virtualize or emulate the hardware and/or operating system for execution of the non-native application (e.g., the application720) in themachine emulator module528a. Theapplication720 may execute in themachine emulator module528aof thecloud edge OS516ain such a way that a user may interact with theapplication720 as if theapplication720 were executing locally on thecomputing device406. For example, in cases where the application is a gaming application (e.g., a game), themachine emulator module528amay run the operating system when a gaming application is executing during a gaming session.
An application container may provide a restrictive secure environment for executing an application in a cloud application platform. The secure environment may provide the security needed to execute the application in the cloud. For example, themachine emulator module528amay provide a restrictive process execution environment for theapplication720. In cases where a game session is executing in themachine emulator module528a, the restrictive process execution environment may provide additional resource security and isolation for the game session as it is executing in themachine emulator module528a.
Theapplication720 may use thelocal proxy client722 for bidiectional communications between theapplication720 and theproxy server542. For example, theapplication720 may use thelocal proxy client722 to send information to and/or to receive information from the Internet by way of theinternet connection540 using theproxy server542 as a communication proxy. Theproxy server542 may be an application that acts as an intermediary between application requests and the cloudserver management service546. For example, in cases where a game session is executing in themachine emulator module528a, theproxy server542 may be an application that acts as an intermediary between the game session online requests and the cloudserver management service546. In some implementations, theproxy server542 may be a forward proxy that may provide requests, information, and/or data from thecloud hosting edge512aand/or thecloud hosting edge512bto thecomputing device406 by way of theinternet connection540 through a firewall.
The applicationsession manager module710 may provide information and data received from themedia processor module712 to thelogging service module638 included in theweb service544. The information and data may be about the execution of theapplication720 in themachine emulator module528a. Thelogging service module638 may store and provide the information and data for possible access by a user. For example, thelogging service module638 may receive information and data regarding details about theapplication720 executing in themachine emulator module528afrom the applicationsession manager module710. Thelogging service module638 may provide a logging service to the cloudserver management service546 for collecting, aggregating, and/or delivering high volumes of message data with low latency to a user.
The applicationsession manager module710 may provide information and data received from themedia processor module712 to the Graph API64 included in theweb service544. Referring toFIG. 5, theGraph API640 may upload information and data related to the execution of the non-native application (e.g., the application720) in thecontainer526ato thebrowser application534 running on thecomputing device406. For example, theGraph API640 may be an HTTP-based API that may access a social graph of a social media platform.
An output of themachine emulator module528amay connect to or interface with the domain name system (DNS)644 included in theproduct edge538. TheDNS644 may resolve network addresses for domain names to facilitate the communications between thecontainer526aand thecomputing device406 by way of theinternet connection540.
As indicated inFIG. 6 andFIG. 7, information and data passed between, within, or provided to components of thecontainers518aand526a, theweb service544, and theproduct edge538 may be in the format and/or utilize of one of a SOCKS internet protocol, a user datagram protocol (UDP), a transmission control protocol (TCP), a named pipe connection, a streamed pipe connection, an https protocol, a Thrift software framework, or a secure real-time transport protocol (SRTP)+stream control transmission protocol (SCTP) data transport layer security (DTLS) intrusion countermeasures electronics (ICE) framework. Referring toFIG. 6, the SRTP+SCTP DTLS ICE framework may establish and utilize a connection between thecloud edge OS516a, and in particular themachine emulator module520a, and thecomputing device406 for use with a web real-time communication protocol stack (e.g., a WebRTC protocol stack) for securely providing and/or receiving streaming video/audio content. Referring toFIG. 7, the SRTP+SCTP DTLS ICE framework may establish and utilize a connection between thecloud edge OS516a, and in particular thecontainer526a, and thecomputing device406 for use with a web real-time communication protocol stack (e.g., a WebRTC protocol stack) for securely providing and/or receiving streaming video/audio content.
The Thrift software framework may provide a software framework for exchanging information and data between computing devices using a software stack with a code generation engine to build services that work across various application programming languages. The UDP protocol may be used for sending messages between modules. The TCP protocol may be used to provide a stream of bytes between modules. A named pipe connection may provide a logical connection between modules for use in interprocess communications. A streamed pipe connection may provide a connection between modules that allows for a distributed transaction between the modules. A SOCKS internet protocol facilitates the exchange of network packets through a proxy server (e.g., the proxy server542).
FIG. 8 is a flow diagram of an exemplary computer-implementedmethod800 for hosting a non-native application in a server-side hosted environment. In some implementations, the server-side hosted environment may be for a cloud gaming system. The steps shown inFIG. 8 may be performed by any suitable computer-executable code and/or computing system, including the system(s) illustrated inFIGS. 1, 2, and 4-7. In one example, each of the steps shown inFIG. 8 may represent an algorithm whose structure includes and/or is represented by multiple sub-steps, examples of which will be provided in greater detail below.
As illustrated inFIG. 8, atstep810 one or more of the systems described herein may execute, by a server-side hosted environment, a first application non-native to the server-side hosted environment. The executing may include virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment. For example, a cloud edge OS may include a container that includes hardware virtualization for virtualizing hardware for a server-side hosted environment provided by the cloud edge OS that is included in a cloud hosting edge. For example, a cloud edge OS may include a container that includes an emulator for virtualizing hardware for a server-side hosted environment provided by the cloud edge OS that is included in a cloud hosting edge.
In some embodiments, the term “server-side hosted environment” may refer to a cloud-hosted infrastructure environment that is architected to include at least one remote server, an execution environment, and hardware for implementing and running a cloud-hosted system for hosting an application non-native to the execution environment of the cloud-hosted infrastructure. Examples of a server-side hosted environment may include, without limitation, a data center, and/or one or more locations, spaces, or areas where one or more servers and other equipment may directly connect to an Internet network backbone (e.g., one or more colocation centers). For example, a colocation center may be a location, space, or area for server(s) and equipment that virtualize and/or emulate an operating system environment for executing non-native applications in the cloud.
In some embodiments, the term “virtualizing” may refer to running or executing a virtual instance of a computer system (e.g., computer hardware and/or software) in a container that may be abstracted from the actual hardware of the host computing system. Examples of virtualizing may include, without limitation, creating one or more containers in a cloud edge OS for virtualizing hardware in the cloud edge OS for executing an application non-native to the computing environment of the cloud edge OS.
The systems described herein may performstep810 in a variety of ways. In one example, referring toFIG. 5, thecloud edge OS514amay include containers518a-bthat include machine emulator modules520a-b, respectively, for virtualizing hardware for a server-side hosted environment provided by thecloud edge OS514aincluded in thecloud hosting edge512a. Thecloud edge OS514bmay include containers522a-bthat include machine emulator modules524a-b, respectively, for virtualizing hardware for a server-side hosted environment provided by thecloud edge OS514aincluded in thecloud hosting edge512a.
As illustrated inFIG. 8, atstep820 one or more of the systems described herein may receive, by the server-side hosted environment by way of a network, an input data stream from a second application executing on a computing device. For example, the hardware virtualization may receive an input data stream from a web browser application running on a computing device.
In some embodiments, the term “input data stream” may refer to a stream of information and data for controlling the execution of a non-native application hosted in the server-side hosted environment of a cloud application platform. Examples of an input data stream may include, without limitation, a sequence of elements used to represent data elements that may be received over time.
The systems described herein may performstep820 in a variety of ways. In one example, thecontainer518amay receive aninput data stream410 from thebrowser application534 by way of theinternet connection536 provided by thenetwork104 to theproduct edge service612 included in theproduct edge538. Theproduct edge service612 may provide theinput data stream410 to theNLB614 which in turn provides theinput data stream410 to the cloudserver management service546.
As illustrated inFIG. 8, atstep830 one or more of the systems described herein may process, by the server-side hosted environment and by the first application while executing in the virtualized hardware, the input data stream, the processing generating an output data stream. For example, a virtual machine that virtualizes the hardware may execute a non-native application that may process the input data stream to generate an output data stream.
In some embodiments, the term “output data stream” may refer to a stream of information and data (e.g., streaming video and/or audio data) output by an application that, in some cases, is responsive to received input data. Examples of an output data stream may include, without limitation, streaming media, log files, ecommerce purchases, in-game player activity (e.g., interactions with a gaming application), information from social networks, and geospatial services.
The systems described herein may performstep830 in a variety of ways. In one example, theapplication620 executing in theapplication container624 may process the input data stream received by theapplication container624 from the applicationsession manager module630 to generate an output data stream.
As illustrated inFIG. 8, atstep840 one or more of the systems described herein may output, by the server-side hosted environment and to the computing device by way of the network, the output data stream for use by the second application. For example, the hardware virtualization may output the output data stream in real-time by way of a network to a browser running in a computing device.
The systems described herein may performstep840 in a variety of ways. In one example, thecloud layer634 may output the output data stream in real-time to theNLB614 included in theproduct edge538. TheNLB614 may communicate or interface with theinternet connection540 provided by thenetwork104 to provide the output data stream in real-time to thecomputing device406 for display of the video data on thedisplay device422 and/or for playing of the audio data by thespeakers424. The real-time communications are implemented by a streaming technology stack that uses a WebRTC protocol stack in each of thecomputing device406 and thecloud application platform202. The use of a WebRTC protocol stack may enable low latency communications between thecloud edge OS514athat is sending the streaming data and thecomputing device406 that receives the streaming data. Such low latency communications may enable live streaming between thecomputing device406 and thecloud edge OS514a.
The systems and methods described herein may include various optimizations for a cloud application platform. The optimizations may advantageously improve the functioning of a computer itself by, for example, more efficiently utilizing server-side computing resources, improving a network communication scheme involving virtualization, and reducing network latency for cloud computing. The systems and methods described herein may also improve the fields of virtualization, cloud and/or edge computing, and/or streaming.
Example EmbodimentsExample 1: A computer-implemented method for may include executing, by a server-side hosted environment, a first application non-native to the server-side hosted environment, the executing comprising virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment, receiving, by the server-side hosted environment by way of a network, an input data stream from a second application executing on a computing device, processing, by the server-side hosted environment and by the first application while executing in the virtualized hardware, the input data stream, the processing generating an output data stream, and outputting, by the server-side hosted environment and to the computing device by way of the network, the output data stream for use by the second application.
Example 2: The computer-implemented method of Example 1, where the first application may include a video game.
Example 3: The computer-implemented method of Example 2, where the second application may include a social media application that provides game play to an end user of the computing device.
Example 4: The computer-implemented method of Example 2, where the second application may include a browser application that provides game play to an end user of the computing device.
Example 5: The computer-implemented method of any of Examples 1-4, where a Web Real-Time Communication protocol stack may be used to transfer data streams between the computing device and the server-side hosted environment.
Example 6: The computer-implemented method of any of Examples 1-5, where the server-side hosted environment may include one of a mobile device OS emulator, or an OS virtual machine.
Example 7: The computer-implemented method of Example 6, where the mobile device OS emulator may be an ANDROID™ OS emulator.
Example 8: The computer-implemented method of Example 6, where the virtual OS machine may be a MICROSOFT® WINDOWS® virtual machine.
Example 9: The computer-implemented method of any of Examples 1-8, where the server-side hosted environment may include a cloud platform that incorporates edge computing.
Example 10: The computer-implemented method of any of Examples 1-9, where virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment may include emulating a native environment suited to operate the first application.
Example 11: The computer-implemented method of any of Examples 1-10, where virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment may include providing a virtual container in an operating system virtualization layer, the virtual container including a sandboxed execution environment for the first application by the server-side hosted environment.
Example 12: The computer-implemented method of Example 11, wherein virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment may further include dynamically provisioning one or more of the first application or the server-side hosted environment within the virtual container in response to a request to provision the first application.
Example 13: The computer-implemented method of any of Examples 1-12, where the computing device may include an artificial-reality system having a display for displaying the output data stream in the artificial-reality system.
Example 14: A system may include at least one physical processor, and physical memory comprising computer-executable instructions that, when executed by the physical processor, cause the physical processor to execute a first application non-native to a server-side hosted environment, the executing comprising virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment, receive, by way of a network, an input data stream from a second application executing on a computing device, process, by the first application while executing in the virtualized hardware, the input data stream, the processing generating an output data stream, and output, to the computing device by way of the network, the output data stream for use by the second application.
Example 15: The system of Example 14, where the first application may include a video game.
Example 16: The system of Example 15, where the second application may include one of a social media application that provides game play to an end user of the computing device or a browser application that provides game play to an end user of the computing device.
Example 17: The system of any of Examples 14-16, where a Web Real-Time Communication protocol stack may be used to transfer data streams between the computing device and the server-side hosted environment.
Example 18: The system of any of Examples 14-17, where the server-side hosted environment may include one of a mobile device OS emulator, or an OS virtual machine.
Example 19: The system of any of Examples 14-18, where the server-side hosted environment may include a cloud platform that incorporates edge computing.
Example 20: A non-transitory computer-readable medium including one or more computer-executable instructions that, when executed by at least one processor of a server-side hosted environment, may cause the server-side hosted environment to execute a first application non-native to a server-side hosted environment, the executing comprising virtualizing hardware for the server-side hosted environment that supports the execution of the first application in the server-side hosted environment, receive, by way of a network, an input data stream from a second application executing on a computing device, process, by the first application while executing in the virtualized hardware, the input data stream, the processing generating an output data stream, and output, to the computing device by way of the network, the output data stream for use by the second application.
FIG. 9 is a block diagram of anexample system900 that includes modules for use in a server-side hosted environment for a cloud gaming system.Modules910 may include thevirtualization module308, theOS302, one or more containers310a-n, and thestreaming technology stack418. Although illustrated as separate elements, one or more ofmodules910 inFIG. 9 may represent portions of a single module or application.
In certain embodiments, one or more ofmodules910 inFIG. 9 may represent one or more software applications, operating systems, or programs that, when executed by a computing device, may cause the computing device to perform one or more tasks. As illustrated inFIG. 9,example system900 may also include one or more memory devices, such asmemory940.Memory940 generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or computer-readable instructions. In one example,memory940 may store, load, and/or maintain one or more ofmodules910. Examples ofmemory940 include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, Hard Disk Drives (HDDs), Solid-State Drives (SSDs), optical disk drives, caches, variations or combinations of one or more of the same, and/or any other suitable storage memory.
As illustrated inFIG. 9, theexample system900 may also include one or more physical processors, such asphysical processor930.Physical processor930 generally represents any type or form of hardware-implemented processing unit capable of interpreting and/or executing computer-readable instructions. In one example,physical processor930 may access and/or modify one or more ofmodules910 stored inmemory940. Additionally, or alternatively,physical processor930 may execute one or more ofmodules910. Examples ofphysical processor930 include, without limitation, microprocessors, microcontrollers, Central Processing Units (CPUs), Field-Programmable Gate Arrays (FPGAs) that implement softcore processors, Application-Specific Integrated Circuits (ASICs), portions of one or more of the same, variations or combinations of one or more of the same, and/or any other suitable physical processor.
As illustrated inFIG. 9, the example system may also include the GPUs306a-nand theCPUs308a-n. For example, thesystem900 may use a graphics processing unit (GPU) for image and graphics processing when implementing a server-side hosted environment for a cloud gaming system. Thesystem900 may use a central processing unit (CPU) for more general processing tasks when implementing a server-side hosted environment for a cloud gaming system. In some implementations, the physical processor may represent one or more of theCPUs308a-n. In some implementations, thephysical processor930 may be included in thesystem900 in addition to theCPUs308a-n.
As illustrated inFIG. 9, theexample system900 may also include one or moreadditional elements920. Theadditional elements920 generally represent any type or form of hardware and/or software. In one example,physical processor930 may access and/or modify one or more of theadditional elements920.
One or more repositories may include theadditional elements920. The one or more repositories may be memory (e.g., the memory940). The one or more repositories may be databases. In some implementations, theadditional elements920 may be included (part of) thesystem900. In some implementations, theadditional elements920 may be external to thesystem900 and accessible by thesystem900.
Theadditional elements920 may include alog message database950. As described with reference toFIG. 6, the logging service may collect and aggregate log messages for storage in a database (e.g., the log message database950) for further analysis. For example, in cases where theapplication620 is a game, thelogging service628 may collect and aggregate log messages from the game session executing in themachine emulator module520aand then may store the log messages in thelog message database950 for later analysis.
FIG. 10 illustrates anexemplary network environment1000 in which aspects of the present disclosure may be implemented. Thenetwork environment1000 may include one or more computing devices (e.g.,computing device1002 and server1006) and thenetwork104. In one example, referring toFIGS. 3 and 4, theserver1006 may theserver350 and thecomputing device1002 may be thecomputing device406.
In this example, theserver1006 may include thephysical processor930 that may be one or more general-purpose processors that execute software instructions. Theserver1006 may include a data storage subsystem that includes thememory940 which may store software instructions, along with data (e.g., input and/or output data) processed by execution of those instructions. Thememory940 may includemodules910 that may be used to control the operation of theserver1006. Theserver1006 may includeadditional elements920. In some implementations, all or part of theadditional elements920 may be external to theserver1006 and thecomputing device1002 and may be accessible by theserver1006 either directly (a direct connection) or by way of thenetwork104.
Thecomputing device1002 may represent a client device or a user device, such a desktop computer, laptop computer, tablet device, smartphone, or other computing device. In some implementations, thecomputing device1002 may be part of or included in augmented reality glasses, virtual reality headsets, virtual-reality environments, and/or augmented-reality environments, examples of which are described herein with reference toFIGS. 11-12.
Thecomputing device1002 may include aphysical processor1030, which may represent a single processor or multiple processors, and one or more memory devices (e.g., memory1040), which may store instructions (e.g., software applications) and/or data in one ormore modules1010. Themodules1010 may store software instructions, along with data (e.g., input and/or output data) processed by execution of those instructions. The modules101 may include thebrowser application534 and thestreaming technology stack414. Thecomputing device1002 may includeadditional elements1020. Theadditional elements1020 may include thedisplay device422 and the speaker(s)424.
Thecomputing device1002 may be communicatively coupled to theinput server1006 through thenetwork104. Thenetwork104 may be any communication network, such as the Internet, a Wide Area Network (WAN), or a Local Area Network (LAN), and may include various types of communication protocols and physical connections. Theserver1006 may communicatively connect to and/or interface with various devices through thenetwork104. In some embodiments, thenetwork104 may support communication protocols such as transmission control protocol/Internet protocol (TCP/IP), Internet packet exchange (IPX), systems network architecture (SNA), and/or any other suitable network protocols. In some embodiments, data may be transmitted by thenetwork104 using a mobile network (such as a mobile telephone network, cellular network, satellite network, or other mobile network), a public switched telephone network (PSTN), wired communication protocols (e.g., Universal Serial Bus (USB), Controller Area Network (CAN)), and/or wireless communication protocols (e.g., wireless LAN (WLAN) technologies implementing the IEEE 802.11 family of standards, Bluetooth, Bluetooth Low Energy, Near Field Communication (NFC), Z-Wave, and ZigBee).
The subject matter disclosed herein may be implemented in a variety of ways, with a variety ofcomputing devices106. However, certain examples may include an artificial-reality system. For example, as described above, acomputing device106, through which a user interacts with thecloud application platform102, may be an artificial-reality system. Therefore, the present disclosure will provide a detailed discussion of exemplary artificial-reality systems.
Embodiments of the present disclosure may include or be implemented in conjunction with various types of artificial-reality systems. Artificial reality is a form of reality that has been adjusted in some manner before presentation to a user, which may include, for example, a virtual reality, an augmented reality, a mixed reality, a hybrid reality, or some combination and/or derivative thereof. Artificial-reality content may include completely computer-generated content or computer-generated content combined with captured (e.g., real-world) content. The artificial-reality content may include video, audio, haptic feedback, or some combination thereof, any of which may be presented in a single channel or in multiple channels (such as stereo video that produces a three-dimensional (3D) effect to the viewer). Additionally, in some embodiments, artificial reality may also be associated with applications, products, accessories, services, or some combination thereof, that are used to, for example, create content in an artificial reality and/or are otherwise used in (e.g., to perform activities in) an artificial reality.
Artificial-reality systems may be implemented in a variety of different form factors and configurations. Some artificial-reality systems may be designed to work without near-eye displays (NEDs). Other artificial-reality systems may include an NED that also provides visibility into the real world (such as, e.g., augmented-reality system1100 inFIG. 11) or that visually immerses a user in an artificial reality (such as, e.g., virtual-reality system1200 inFIG. 12). While some artificial-reality devices may be self-contained systems, other artificial-reality devices may communicate and/or coordinate with external devices to provide an artificial-reality experience to a user. Examples of such external devices include handheld controllers, mobile devices, desktop computers, devices worn by a user, devices worn by one or more other users, and/or any other suitable external system.
Turning toFIG. 11, augmented-reality system1100 may include an eyewear device1102 with aframe1110 configured to hold a left display device1115(A) and a right display device1115(B) in front of a user's eyes. Display devices1115(A) and1115(B) may act together or independently to present an image or series of images to a user. While augmented-reality system1100 includes two displays, embodiments of this disclosure may be implemented in augmented-reality systems with a single NED or more than two NEDs.
In some embodiments, augmented-reality system1100 may include one or more sensors, such assensor1140.Sensor1140 may generate measurement signals in response to motion of augmented-reality system1100 and may be located on substantially any portion offrame1110.Sensor1140 may represent one or more of a variety of different sensing mechanisms, such as a position sensor, an inertial measurement unit (IMU), a depth camera assembly, a structured light emitter and/or detector, or any combination thereof. In some embodiments, augmented-reality system1100 may or may not includesensor1140 or may include more than one sensor. In embodiments in whichsensor1140 includes an IMU, the IMU may generate calibration data based on measurement signals fromsensor1140. Examples ofsensor1140 may include, without limitation, accelerometers, gyroscopes, magnetometers, other suitable types of sensors that detect motion, sensors used for error correction of the IMU, or some combination thereof.
In some examples, augmented-reality system1100 may also include a microphone array with a plurality of acoustic transducers1120(A)-1120(J), referred to collectively asacoustic transducers1120.Acoustic transducers1120 may represent transducers that detect air pressure variations induced by sound waves. Eachacoustic transducer1120 may be configured to detect sound and convert the detected sound into an electronic format (e.g., an analog or digital format). The microphone array inFIG. 11 may include, for example, ten acoustic transducers:1120(A) and1120(B), which may be designed to be placed inside a corresponding ear of the user, acoustic transducers1120(C),1120(D),1120(E),1120(F),1120(G), and1120(H), which may be positioned at various locations onframe1110, and/or acoustic transducers1120(1) and1120(J), which may be positioned on acorresponding neckband1105.
In some embodiments, one or more of acoustic transducers1120(A)-(J) may be used as output transducers (e.g., speakers). For example, acoustic transducers1120(A) and/or1120(B) may be earbuds or any other suitable type of headphone or speaker.
The configuration ofacoustic transducers1120 of the microphone array may vary. While augmented-reality system1100 is shown inFIG. 11 as having tenacoustic transducers1120, the number ofacoustic transducers1120 may be greater or less than ten. In some embodiments, using higher numbers ofacoustic transducers1120 may increase the amount of audio information collected and/or the sensitivity and accuracy of the audio information. In contrast, using a lower number ofacoustic transducers1120 may decrease the computing power required by an associatedcontroller1150 to process the collected audio information. In addition, the position of eachacoustic transducer1120 of the microphone array may vary. For example, the position of anacoustic transducer1120 may include a defined position on the user, a defined coordinate onframe1110, an orientation associated with eachacoustic transducer1120, or some combination thereof.
Acoustic transducers1120(A) and1120(B) may be positioned on different parts of the user's ear, such as behind the pinna, behind the tragus, and/or within the auricle or fossa. Or, there may be additionalacoustic transducers1120 on or surrounding the ear in addition toacoustic transducers1120 inside the ear canal. Having anacoustic transducer1120 positioned next to an ear canal of a user may enable the microphone array to collect information on how sounds arrive at the ear canal. By positioning at least two ofacoustic transducers1120 on either side of a user's head (e.g., as binaural microphones), augmented-reality device1100 may simulate binaural hearing and capture a 3D stereo sound field around about a user's head. In some embodiments, acoustic transducers1120(A) and1120(B) may be connected to augmented-reality system1100 via awired connection1130, and in other embodiments acoustic transducers1120(A) and1120(B) may be connected to augmented-reality system1100 via a wireless connection (e.g., a BLUETOOTH connection). In still other embodiments, acoustic transducers1120(A) and1120(B) may not be used at all in conjunction with augmented-reality system1100.
Acoustic transducers1120 onframe1110 may be positioned in a variety of different ways, including along the length of the temples, across the bridge, above or below display devices1115(A) and1115(B), or some combination thereof.Acoustic transducers1120 may also be oriented such that the microphone array is able to detect sounds in a wide range of directions surrounding the user wearing the augmented-reality system1100. In some embodiments, an optimization process may be performed during manufacturing of augmented-reality system1100 to determine relative positioning of eachacoustic transducer1120 in the microphone array.
In some examples, augmented-reality system1100 may include or be connected to an external device (e.g., a paired device), such asneckband1105.Neckband1105 generally represents any type or form of paired device. Thus, the following discussion ofneckband1105 may also apply to various other paired devices, such as charging cases, smart watches, smart phones, wrist bands, other wearable devices, hand-held controllers, tablet computers, laptop computers, other external compute devices, etc.
As shown,neckband1105 may be coupled to eyewear device1102 via one or more connectors. The connectors may be wired or wireless and may include electrical and/or non-electrical (e.g., structural) components. In some cases, eyewear device1102 andneckband1105 may operate independently without any wired or wireless connection between them. WhileFIG. 11 illustrates the components of eyewear device1102 andneckband1105 in example locations on eyewear device1102 andneckband1105, the components may be located elsewhere and/or distributed differently on eyewear device1102 and/orneckband1105. In some embodiments, the components of eyewear device1102 andneckband1105 may be located on one or more additional peripheral devices paired with eyewear device1102,neckband1105, or some combination thereof.
Pairing external devices, such asneckband1105, with augmented-reality eyewear devices may enable the eyewear devices to achieve the form factor of a pair of glasses while still providing sufficient battery and computation power for expanded capabilities. Some or all of the battery power, computational resources, and/or additional features of augmented-reality system1100 may be provided by a paired device or shared between a paired device and an eyewear device, thus reducing the weight, heat profile, and form factor of the eyewear device overall while still retaining desired functionality. For example,neckband1105 may allow components that would otherwise be included on an eyewear device to be included inneckband1105 since users may tolerate a heavier weight load on their shoulders than they would tolerate on their heads.Neckband1105 may also have a larger surface area over which to diffuse and disperse heat to the ambient environment. Thus,neckband1105 may allow for greater battery and computation capacity than might otherwise have been possible on a stand-alone eyewear device. Since weight carried inneckband1105 may be less invasive to a user than weight carried in eyewear device1102, a user may tolerate wearing a lighter eyewear device and carrying or wearing the paired device for greater lengths of time than a user would tolerate wearing a heavy standalone eyewear device, thereby enabling users to more fully incorporate artificial-reality environments into their day-to-day activities.
Neckband1105 may be communicatively coupled with eyewear device1102 and/or to other devices. These other devices may provide certain functions (e.g., tracking, localizing, depth mapping, processing, storage, etc.) to augmented-reality system1100. In the embodiment ofFIG. 11,neckband1105 may include two acoustic transducers (e.g.,1120(1) and1120(J)) that are part of the microphone array (or potentially form their own microphone subarray).Neckband1105 may also include acontroller1125 and apower source1135.
Acoustic transducers1120(1) and1120(J) ofneckband1105 may be configured to detect sound and convert the detected sound into an electronic format (analog or digital). In the embodiment ofFIG. 11, acoustic transducers1120(1) and1120(J) may be positioned onneckband1105, thereby increasing the distance between the neckband acoustic transducers1120(1) and1120(J) and otheracoustic transducers1120 positioned on eyewear device1102. In some cases, increasing the distance betweenacoustic transducers1120 of the microphone array may improve the accuracy of beamforming performed via the microphone array. For example, if a sound is detected by acoustic transducers1120(C) and1120(D) and the distance between acoustic transducers1120(C) and1120(D) is greater than, e.g., the distance between acoustic transducers1120(D) and1120(E), the determined source location of the detected sound may be more accurate than if the sound had been detected by acoustic transducers1120(D) and1120(E).
Controller1125 ofneckband1105 may process information generated by the sensors onneckband1105 and/or augmented-reality system1100. For example,controller1125 may process information from the microphone array that describes sounds detected by the microphone array. For each detected sound,controller1125 may perform a direction-of-arrival (DOA) estimation to estimate a direction from which the detected sound arrived at the microphone array. As the microphone array detects sounds,controller1125 may populate an audio data set with the information. In embodiments in which augmented-reality system1100 includes an inertial measurement unit,controller1125 may compute all inertial and spatial calculations from the IMU located on eyewear device1102. A connector may convey information between augmented-reality system1100 andneckband1105 and between augmented-reality system1100 andcontroller1125. The information may be in the form of optical data, electrical data, wireless data, or any other transmittable data form. Moving the processing of information generated by augmented-reality system1100 toneckband1105 may reduce weight and heat in eyewear device1102, making it more comfortable to the user.
Power source1135 inneckband1105 may provide power to eyewear device1102 and/or toneckband1105.Power source1135 may include, without limitation, lithium ion batteries, lithium-polymer batteries, primary lithium batteries, alkaline batteries, or any other form of power storage. In some cases,power source1135 may be a wired power source. Includingpower source1135 onneckband1105 instead of on eyewear device1102 may help better distribute the weight and heat generated bypower source1135.
As noted, some artificial-reality systems may, instead of blending an artificial reality with actual reality, substantially replace one or more of a user's sensory perceptions of the real world with a virtual experience. One example of this type of system is a head-worn display system, such as virtual-reality system1200 inFIG. 12, that mostly or completely covers a user's field of view. Virtual-reality system1200 may include a frontrigid body1202 and aband1204 shaped to fit around a user's head. Virtual-reality system1200 may also include output audio transducers1206(A) and1206(B). Furthermore, while not shown inFIG. 12, frontrigid body1202 may include one or more electronic elements, including one or more electronic displays, one or more inertial measurement units (IMUS), one or more tracking emitters or detectors, and/or any other suitable device or system for creating an artificial-reality experience.
Artificial-reality systems may include a variety of types of visual feedback mechanisms. For example, display devices in augmented-reality system1100 and/or virtual-reality system1200 may include one or more liquid crystal displays (LCDs), light emitting diode (LED) displays, microLED displays, organic LED (OLED) displays, digital light project (DLP) micro-displays, liquid crystal on silicon (LCoS) micro-displays, and/or any other suitable type of display screen. These artificial-reality systems may include a single display screen for both eyes or may provide a display screen for each eye, which may allow for additional flexibility for varifocal adjustments or for correcting a user's refractive error. Some of these artificial-reality systems may also include optical subsystems having one or more lenses (e.g., conventional concave or convex lenses, Fresnel lenses, adjustable liquid lenses, etc.) through which a user may view a display screen. These optical subsystems may serve a variety of purposes, including to collimate (e.g., make an object appear at a greater distance than its physical distance), to magnify (e.g., make an object appear larger than its actual size), and/or to relay (to, e.g., the viewer's eyes) light. These optical subsystems may be used in a non-pupil-forming architecture (such as a single lens configuration that directly collimates light but results in so-called pincushion distortion) and/or a pupil-forming architecture (such as a multi-lens configuration that produces so-called barrel distortion to nullify pincushion distortion).
In addition to or instead of using display screens, some of the artificial-reality systems described herein may include one or more projection systems. For example, display devices in augmented-reality system1100 and/or virtual-reality system1200 may include micro-LED projectors that project light (using, e.g., a waveguide) into display devices, such as clear combiner lenses that allow ambient light to pass through. The display devices may refract the projected light toward a user's pupil and may enable a user to simultaneously view both artificial-reality content and the real world. The display devices may accomplish this using any of a variety of different optical components, including waveguide components (e.g., holographic, planar, diffractive, polarized, and/or reflective waveguide elements), light-manipulation surfaces and elements (such as diffractive, reflective, and refractive elements and gratings), coupling elements, etc. Artificial-reality systems may also be configured with any other suitable type or form of image projection system, such as retinal projectors used in virtual retina displays.
The artificial-reality systems described herein may also include various types of computer vision components and subsystems. For example, augmented-reality system1100 and/or virtual-reality system1200 may include one or more optical sensors, such as two-dimensional (2D) or 3D cameras, structured light transmitters and detectors, time-of-flight depth sensors, single-beam or sweeping laser rangefinders, 3D LiDAR sensors, and/or any other suitable type or form of optical sensor. An artificial-reality system may process data from one or more of these sensors to identify a location of a user, to map the real world, to provide a user with context about real-world surroundings, and/or to perform a variety of other functions.
The artificial-reality systems described herein may also include one or more input and/or output audio transducers. Output audio transducers may include voice coil speakers, ribbon speakers, electrostatic speakers, piezoelectric speakers, bone conduction transducers, cartilage conduction transducers, tragus-vibration transducers, and/or any other suitable type or form of audio transducer. Similarly, input audio transducers may include condenser microphones, dynamic microphones, ribbon microphones, and/or any other type or form of input transducer. In some embodiments, a single transducer may be used for both audio input and audio output.
In some embodiments, the artificial-reality systems described herein may also include tactile (i.e., haptic) feedback systems, which may be incorporated into headwear, gloves, body suits, handheld controllers, environmental devices (e.g., chairs, floormats, etc.), and/or any other type of device or system. Haptic feedback systems may provide various types of cutaneous feedback, including vibration, force, traction, texture, and/or temperature. Haptic feedback systems may also provide various types of kinesthetic feedback, such as motion and compliance. Haptic feedback may be implemented using motors, piezoelectric actuators, fluidic systems, and/or a variety of other types of feedback mechanisms. Haptic feedback systems may be implemented independent of other artificial-reality devices, within other artificial-reality devices, and/or in conjunction with other artificial-reality devices.
By providing haptic sensations, audible content, and/or visual content, artificial-reality systems may create an entire virtual experience or enhance a user's real-world experience in a variety of contexts and environments. For instance, artificial-reality systems may assist or extend a user's perception, memory, or cognition within a particular environment. Some systems may enhance a user's interactions with other people in the real world or may enable more immersive interactions with other people in a virtual world. Artificial-reality systems may also be used for educational purposes (e.g., for teaching or training in schools, hospitals, government organizations, military organizations, business enterprises, etc.), entertainment purposes (e.g., for playing video games, listening to music, watching video content, etc.), and/or for accessibility purposes (e.g., as hearing aids, visual aids, etc.). The embodiments disclosed herein may enable or enhance a user's artificial-reality experience in one or more of these contexts and environments and/or in other contexts and environments.
As detailed above, the computing devices and systems described and/or illustrated herein broadly represent any type or form of computing device or system capable of executing computer-readable instructions, such as those contained within the modules described herein. In their most basic configuration, these computing device(s) may each include at least one memory device and at least one physical processor.
In some examples, the term “memory device” generally refers to any type or form of volatile or non-volatile storage device or medium capable of storing data and/or computer-readable instructions. In one example, a memory device may store, load, and/or maintain one or more of the modules described herein. Examples of memory devices include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, Hard Disk Drives (HDDs), Solid-State Drives (SSDs), optical disk drives, caches, variations or combinations of one or more of the same, or any other suitable storage memory.
In some examples, the term “physical processor” generally refers to any type or form of hardware-implemented processing unit capable of interpreting and/or executing computer-readable instructions. In one example, a physical processor may access and/or modify one or more modules stored in the above-described memory device. Examples of physical processors include, without limitation, microprocessors, microcontrollers, Central Processing Units (CPUs), Field-Programmable Gate Arrays (FPGAs) that implement softcore processors, Application-Specific Integrated Circuits (ASICs), portions of one or more of the same, variations or combinations of one or more of the same, or any other suitable physical processor.
Although illustrated as separate elements, the modules described and/or illustrated herein may represent portions of a single module or application. In addition, in certain embodiments one or more of these modules may represent one or more software applications or programs that, when executed by a computing device, may cause the computing device to perform one or more tasks. For example, one or more of the modules described and/or illustrated herein may represent modules stored and configured to run on one or more of the computing devices or systems described and/or illustrated herein. One or more of these modules may also represent all or portions of one or more special-purpose computers configured to perform one or more tasks.
In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. Additionally or alternatively, one or more of the modules recited herein may transform a processor, volatile memory, non-volatile memory, and/or any other portion of a physical computing device from one form to another by executing on the computing device, storing data on the computing device, and/or otherwise interacting with the computing device.
In some embodiments, the term “computer-readable medium” generally refers to any form of device, carrier, or medium capable of storing or carrying computer-readable instructions. Examples of computer-readable media include, without limitation, transmission-type media, such as carrier waves, and non-transitory-type media, such as magnetic-storage media (e.g., hard disk drives, tape drives, and floppy disks), optical-storage media (e.g., Compact Disks (CDs), Digital Video Disks (DVDs), and BLU-RAY disks), electronic-storage media (e.g., solid-state drives and flash media), and other distribution systems.
The process parameters and sequence of the steps described and/or illustrated herein are given by way of example only and can be varied as desired. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various exemplary methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
The preceding description has been provided to enable others skilled in the art to best utilize various aspects of the exemplary embodiments disclosed herein. This exemplary description is not intended to be exhaustive or to be limited to any precise form disclosed. Many modifications and variations are possible without departing from the spirit and scope of the present disclosure. The embodiments disclosed herein should be considered in all respects illustrative and not restrictive. Reference should be made to the appended claims and their equivalents in determining the scope of the present disclosure.
Unless otherwise noted, the terms “connected to” and “coupled to” (and their derivatives), as used in the specification and claims, are to be construed as permitting both direct and indirect (i.e., via other elements or components) connection. In addition, the terms “a” or “an,” as used in the specification and claims, are to be construed as meaning “at least one of.” Finally, for ease of use, the terms “including” and “having” (and their derivatives), as used in the specification and claims, are interchangeable with and have the same meaning as the word “comprising.”