2. The Teleport Protocol

The Teleport Protocol is a network protocol for client-server immersive applications. Essentially this means that applications can be used remotely without downloading or installing them. The protocol is open, meaning that anyone can use it, either by writing a client program or by developing a server that uses the protocol.

Teleport is a top-level application-layer protocol. It uses three transport layers in parallel: a WebSocket connection for signaling, a media/data transport (WebRTC by default, with optional SRT/EFP support) for real-time streams, and an HTTP(S) service for static asset retrieval.

Table 2.1 Network Layers

Teleport XR

Real-time client-server interface of a virtual world.

WebSocket / WebRTC / HTTP(S)

Signaling, real-time data channels, and static asset transfer.

TCP / UDP / TLS / DTLS-SRTP / SCTP

Standard transports underlying the above.

Network, Data Link, Physical Layer

Standard network layers

Teleport XR Ltd provides reference implementations of both client and server. The protocol and software should be considered pre-alpha, suitable for testing, evaluation and experimentation.

Here is the code:

Table 2.2 Reference Code

URL

Contents

https://github.com/teleportxr/Teleport/

Native C++ Client app for Windows, Linux and Quest, Native C++ server library for Unreal and Unity-based servers.

https://github.com/teleportxr/teleport-nodejs

Lightweight nodejs server library. Use npm install teleportxr.

https://github.com/teleportxr/teleport-nodejs-server-example

Lightweight nodejs server example: uses the teleportxr npm package.

https://github.com/teleportxr/teleport-web-client

Web client suitable for embedding (pre-alpha)

The protocol uses three concurrent connections between a client and server:

The Signaling connection is established first; the Server then sends a Setup Command which contains the parameters needed by the Client to attach to the Data Service and the HTTP service.

flowchart LR C[Client] S[Server] D[Data Source] C <-- "WebSocket: signaling (JSON + binary)" --> S C <-- "WebRTC: 6 data channels" --> S C <-- "HTTP(S) GET /asset.ext" --> D

The data source may be the same server, or it may be one or more other sources.

Contents: