All Projects → parsec-cloud → Parsec Sdk

parsec-cloud / Parsec Sdk

Licence: other
Low latency, peer-to-peer, interactive game streaming.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Parsec Sdk

husarnet
Husarnet is a Peer-to-Peer VPN to connect your laptops, servers and microcontrollers over the Internet with zero configuration.
Stars: ✭ 128 (-68%)
Mutual labels:  peer-to-peer, low-latency
Sonobus
Source code for SonoBus, a real-time network audio streaming collaboration tool.
Stars: ✭ 586 (+46.5%)
Mutual labels:  peer-to-peer, low-latency
Oorja
[archived] effortless video-voice chat with realtime collaborative features. extensible using react components 🙌
Stars: ✭ 270 (-32.5%)
Mutual labels:  peer-to-peer
Constellation
Peer-to-peer encrypted message exchange
Stars: ✭ 365 (-8.75%)
Mutual labels:  peer-to-peer
Cpptrader
High performance components for building Trading Platform such as ultra fast matching engine, order book processor
Stars: ✭ 308 (-23%)
Mutual labels:  low-latency
Arbore
Friend-to-friend filesharing app to save the world from dystopia
Stars: ✭ 270 (-32.5%)
Mutual labels:  peer-to-peer
Decentralized Video Chat
🚀 Zipcall- Acquired @ 250k users 🚀 Peer to peer browser video calling platform with unmatched video quality and latency.
Stars: ✭ 3,284 (+721%)
Mutual labels:  peer-to-peer
Emitter
High performance, distributed and low latency publish-subscribe platform.
Stars: ✭ 3,130 (+682.5%)
Mutual labels:  low-latency
Redeo
High-performance framework for building redis-protocol compatible TCP servers/services
Stars: ✭ 392 (-2%)
Mutual labels:  low-latency
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+1373.5%)
Mutual labels:  peer-to-peer
Infinit
The Infinit policy-based software-defined storage platform.
Stars: ✭ 363 (-9.25%)
Mutual labels:  peer-to-peer
Yomo
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.
Stars: ✭ 279 (-30.25%)
Mutual labels:  low-latency
Object threadsafe
We make any object thread-safe and std::shared_mutex 10 times faster to achieve the speed of lock-free algorithms on >85% reads
Stars: ✭ 280 (-30%)
Mutual labels:  low-latency
Libdatachannel
C/C++ WebRTC Data Channels and Media Transport standalone library
Stars: ✭ 336 (-16%)
Mutual labels:  peer-to-peer
Iwant
Commandline tool for searching and downloading files in LAN network, without any central server
Stars: ✭ 268 (-33%)
Mutual labels:  peer-to-peer
Atomic queue
C++ lockless queue.
Stars: ✭ 373 (-6.75%)
Mutual labels:  low-latency
Questdb
An open source SQL database designed to process time series data, faster
Stars: ✭ 7,544 (+1786%)
Mutual labels:  low-latency
Concurrencyfreaks
Stars: ✭ 299 (-25.25%)
Mutual labels:  low-latency
Linux
XanMod: Linux kernel source code tree
Stars: ✭ 310 (-22.5%)
Mutual labels:  low-latency
Kawaii Player
Multimedia player, media library manager and portable media server with PC-To-PC casting feature.
Stars: ✭ 397 (-0.75%)
Mutual labels:  peer-to-peer

Overview

The Parsec SDK allows your application to make interactive, low-latency peer-to-peer connections for the purpose of game streaming. The SDK handles the low level internals of peer-to-peer connectivity, networking, and hardware accelerated video/audio processing. It is lightweight, consisting of a single header file and a shared object < 5MB.

Hosting

The ParsecHost portion of the SDK allows a host to accept incoming client connections (guests). There are two modes of operation: game mode and desktop mode.

Game mode allows your game to add multiplayer functionality to an otherwise local only game. This is achieved via a tight integration into your game's render loop. Game mode requires that the application call one of the ParsecHostSubmitFrame functions (supporting OpenGL, D3D9, and D3D11) and ParsecHostSubmitAudio. Input is polled via ParsecHostPollInput, exposing input events much like they would appear locally. In game mode, Parsec can only interact with your game and has no access to the OS or any other application.

Additionally, game mode can be used to make any game entirely headless from the host's point of view. The game window, rendering swap chain, and audio playback can be removed, leaving the game to accept input from and invisibly output data to Parsec connected guests.

Desktop mode shares the host's entire desktop (or any fullscreen application) and adds additional permissions/approval to the connection process.

Client

The ParsecClient portion of the SDK provides everything necessary to make a connection to a host, send gamepad/mouse/keyboard input, and receive video/audio output from the host. The ParsecClientRender family of functions allow the client application to efficiently render the incoming frames with OpenGL, D3D9, D3D11, or Metal.

Examples

Game Mode Hosting with Unity

The Parsec SDK provides the ParsecUnity module for easy integration in Unity games. See examples/unity for details.

Windows, macOS, Linux Clients

The client example demonstrates the most complete implementation of the client SDK. It uses the cross platform SDL2 library to handle window creation, rendering, audio playback, and input handling. Windows, macOS, and x86-64 Linux are supported.

iOS and Android Clients

The ios and android examples demonstrate audio playback, rendering, and basic input capabilities of the client SDK. The Android example provides a simple JNI bindings package to expose a subset of the C API in Java.

Desktop Mode Hosting

The host example is a succinct implementation of desktop hosting functionality. Desktop hosting is currently only available on Windows.

Web Client

The Parsec Web SDK provides a fully wrapped Parsec client interface only requiring a <video> and <audio> element for initialization. The performance is limited compared to the native SDK clients. See examples/web and sdk/web for details.

Documentation

Documentation is procedurally generated from the parsec.h header file.

https://parsecgaming.com/docs/sdk

Obtaining a sessionID and peerID

The SDK requires a sessionID and peerID obtained through the Parsec API to identify users and make secure connections. There are three methods of obtaining a sessionID:

  • For quick start, testing, and personal use only, see api/personal. The /v1/auth API call may NOT be used in any application distributed to the public or in any enterprise use case.
  • For third party distribution intended for other Parsec users, see api/third-party for OAuth style access delegation.
  • For enterprise customers, see api/enterprise.

Sharing Private Hosts

The Parsec SDK supports a secret property on both the ParsecHostConfig and ParsecClientConfig structs. If the host sets a secret during ParsecHostStart, the client must also provide the same secret during ParsecClientConnect in order to make a connection. Your application may choose how to privately share both this secret and the host's peerID to facilitate features such as link sharing or private games.

For simple link sharing testing, you may use the URL template https://parsec.gg/g/{peerID}/{secret}/, however this template is used by the Parsec consumer application and may change without notice. It is highly recommended that your application uses a custom method for sharing the peerID and secret.

Using Runtime Linking (DSO)

If PARSEC_DSO is defined before including parsec.h, the header will export a struct containing function pointers for use with runtime linking. There is a convenience header which makes DSO easy to use called parsec-dso.h in the sdk directory. The client and host examples use DSO. There are a few differences when using the parsec-dso.h header instead of parsec.h:

  • The Parsec * context is now ParsecDSO *.
  • All global functions that do not normally take a Parsec * context now need to take ParsecDSO * as their first argument, such as ParsecSetLogCallback.
  • The signature for ParsecInit changes to to take an additional char * argument specifying the name of the shared object.
  • ParsecInit may return SO_ERR_OPEN or SO_ERR_SYMBOL if runtime linking was unsuccessful.

Bindings

Bindings are maintained by third party developers (thank you!). If you're interested in another language and would like to create a binding, please submit an issue or contact us via [email protected].

Language Maintainer Repo
Java Richard Smith electronstudio/parsec-java

Community

For questions, suggestions, concerns, and support, visit the Parsec SDK Server on Discord.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].