Skip to content

nomi-san/libparsec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation


libparsec

⚡ The imaginary Parsec SDK
Low latency, peer-to-peer, interactive game streaming.


🚧 Working in progress

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!

Target platforms

  • Windows (64-bit)
  • Linux
  • macOS

Client features

  • Hardware decoders
  • FFmpeg decoder (smaller build)
  • HEVC codec
  • YUV420, YUV444
  • 10-bit color

Instance functions

  • ParsecInit
  • ParsecDestroy
  • ParsecGetConfig
  • ParsecGetBuffer
  • ParsecFree
  • ParsecSetLogCallback
  • ParsecVersion
  • ParsecGetOutputs
  • ParsecGetAudioOutputs
  • ParsecGetDecoders
  • ParsecJSONCommand
  • ParsecCanHost
  • ParsecGetVUSBState (not supported)
  • ParsecGetVDDState (not supported)
  • ParsecSetConfig

Client functions

  • 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 functions

HOST_DESKTOP only.

  • ParsecHostStart
  • ParsecHostStop
  • ParsecHostGetStatus
  • ParsecHostSetConfig
  • ParsecHostGetGuests
  • ParsecHostKickGuest
  • ParsecHostSendUserData
  • ParsecHostSendUserDataAll
  • ParsecHostBeginP2P
  • ParsecHostSetPermissions

Signal functions

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

Loading
  • ParsecSignalInit
  • ParsecSignalDestroy
  • ParsecSignalUpdateHost
  • ParsecSignalConnect
  • ParsecSignalDisconnect
  • ParsecSignalSendCandidate
  • ParsecClientNewAttempt
  • ParsecClientAddCandidate
  • ParsecClientBeginP2P
  • ParsecClientEndConnection

Signal callbacks:

  • ParsecSignalOpenCallback
  • ParsecSignalErrorCallback
  • ParsecSignalAnswerCallback
  • ParsecSignalCandexCallback
  • ParsecSignalSdkCallback

WebRTC client implementation

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
Loading

About

⚡ The imaginary Parsec SDK — Low latency, peer-to-peer, interactive game streaming.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published