⚡ The imaginary Parsec SDK
Low latency, peer-to-peer, interactive game streaming.
The goal is single header for C/C++, and Rust bindings. Output binaries would be static lib and dynamic lib (DLL).
F**k this $320M acquisition!
- Windows (64-bit)
- Linux
- macOS
- Hardware decoders
- FFmpeg decoder (smaller build)
- HEVC codec
- YUV420, YUV444
- 10-bit color
- ParsecInit
- ParsecDestroy
- ParsecGetConfig
- ParsecGetBuffer
- ParsecFree
- ParsecSetLogCallback
- ParsecVersion
- ParsecGetOutputs
- ParsecGetAudioOutputs
- ParsecGetDecoders
- ParsecJSONCommand
- ParsecCanHost
-
ParsecGetVUSBState(not supported) -
ParsecGetVDDState(not supported) - ParsecSetConfig
- ParsecClientConnect (removed in new SDK)
- ParsecClientDisconnect
- ParsecClientGetStatus
- ParsecClientGetGuests
- ParsecClientSetConfig
- ParsecClientSetDimensions
- ParsecClientPollFrame
- ParsecClientPollAudio
- ParsecClientPollEvents
-
ParsecClientGLDestroy(deprecated) - ParsecClientSendMessage
- ParsecClientPause
- ParsecClientEnableStream
- ParsecClientSendUserData
- ParsecClientSendExtraData
-
ParsecClientScalePenMessage(not supported) -
ParsecClientSendVirtualUSB(not supported)
HOST_DESKTOP only.
- ParsecHostStart
- ParsecHostStop
- ParsecHostGetStatus
- ParsecHostSetConfig
- ParsecHostGetGuests
- ParsecHostKickGuest
- ParsecHostSendUserData
- ParsecHostSendUserDataAll
- ParsecHostBeginP2P
- ParsecHostSetPermissions
Signal server and these functions are used to control the handshake flow.
This is a way to build your own server without relying on the Parsec's online service.
sequenceDiagram
participant Client
participant STUN_Server as STUN Server
participant Host
participant Signal_API as Signal API
Client->>STUN_Server: Start UDP conversation (port 3478)
STUN_Server-->>Client: Respond with public IP & listener port
Client->>Signal_API: Send connection info via WebSocket
Host->>STUN_Server: Start UDP conversation (port 3478)
STUN_Server-->>Host: Respond with public IP & listener port
Host->>Signal_API: Send connection info via WebSocket
Signal_API-->>Client: Host's connection info
Signal_API-->>Host: Client's connection info
Client->>Host: Attempt connection
Host->>Client: Attempt connection
Note over Client, Host: Connection established based on NAT traversal success
- ParsecSignalInit
- ParsecSignalDestroy
- ParsecSignalUpdateHost
- ParsecSignalConnect
- ParsecSignalDisconnect
- ParsecSignalSendCandidate
- ParsecClientNewAttempt
- ParsecClientAddCandidate
- ParsecClientBeginP2P
- ParsecClientEndConnection
Signal callbacks:
- ParsecSignalOpenCallback
- ParsecSignalErrorCallback
- ParsecSignalAnswerCallback
- ParsecSignalCandexCallback
- ParsecSignalSdkCallback
SCTP is a side protocol of Parsec host implementation that allows WebRTC connection.
The client should meet:
sequenceDiagram
participant Client
participant SignalServer
participant Host
participant Proto
participant Parsec
Client->>SignalServer: NewAttempt (request to connect)
SignalServer->>Host: Notify of incoming connection
Host->>SignalServer: Ready to accept
SignalServer->>Client: Host is ready
Client->>Proto: CreateOffer
Proto->>Client: SDP Offer
Client->>SignalServer: SendOffer (SDP Offer)
SignalServer->>Host: ForwardOffer (SDP Offer)
Host->>Proto: ReceiveOffer (SDP Offer)
Proto->>Host: CreateAnswer
Host->>SignalServer: SendAnswer (SDP Answer)
SignalServer->>Client: ForwardAnswer (SDP Answer)
Client->>Proto: ReceiveAnswer (SDP Answer)
loop ICE Candidate Exchange
Client->>SignalServer: AddCandidate (ICE Candidate)
SignalServer->>Host: ForwardCandidate (ICE Candidate)
Host->>Proto: AddCandidate (ICE Candidate)
Host->>SignalServer: AddCandidate (ICE Candidate)
SignalServer->>Client: ForwardCandidate (ICE Candidate)
Client->>Proto: AddCandidate (ICE Candidate)
end
Proto->>Parsec: Establish Secure Channel
Parsec->>Proto: Ready
Client->>Host: Parsec Data Channel Established
