obs-websocket/docs/generated/protocol.md
2021-04-26 08:47:31 -07:00

3.6 KiB

obs-websocket 4.9.0 protocol reference

General Introduction

Messages are exchanged between the client and the server as JSON objects. This protocol is based on the original OBS Remote protocol created by Bill Hamilton, with new commands specific to OBS Studio. As of v5.0.0, backwards compatability with the protocol will not be kept.

Authentication

Starting with obs-websocket 4.9, authentication is enabled by default and users are encouraged to configure a password on first run.

obs-websocket uses SHA256 to transmit credentials.

A request for GetAuthRequired returns two elements:

  • A challenge: a random string that will be used to generate the auth response.
  • A salt: applied to the password when generating the auth response.

To generate the answer to the auth challenge, follow this procedure:

  • Concatenate the user declared password with the salt sent by the server (in this order: password + server salt).
  • Generate a binary SHA256 hash of the result and encode the resulting SHA256 binary hash to base64, known as a base64 secret.
  • Concatenate the base64 secret with the challenge sent by the server (in this order: base64 secret + server challenge).
  • Generate a binary SHA256 hash of the result and encode it to base64.
  • Voilà, this last base64 string is the auth response. You may now use it to authenticate to the server with the Authenticate request.

Pseudo Code Example:

password = "supersecretpassword"
challenge = "ztTBnnuqrqaKDzRM3xcVdbYm"
salt = "PZVbYpvAnZut2SS6JNJytDm9"

secret_string = password + salt
secret_hash = binary_sha256(secret_string)
secret = base64_encode(secret_hash)

auth_response_string = secret + challenge
auth_response_hash = binary_sha256(auth_response_string)
auth_response = base64_encode(auth_response_hash)

You can also refer to any of the client libraries listed on the README for examples of how to authenticate.

Table of Contents

Typedefs

These are complex types, such as Source and Scene, which are used as arguments or return values in multiple requests and/or events.

Events

Events are broadcast by the server to each connected client when a recognized action occurs within OBS.

An event message will contain at least the following base fields:

  • update-type String: the type of event.
  • stream-timecode String (optional): time elapsed between now and stream start (only present if OBS Studio is streaming).
  • rec-timecode String (optional): time elapsed between now and recording start (only present if OBS Studio is recording).

Timecodes are sent using the format: HH:MM:SS.mmm

Additional fields may be present in the event message depending on the event type.

Requests

Requests are sent by the client and require at least the following two fields:

  • request-type String: String name of the request type.
  • message-id String: Client defined identifier for the message, will be echoed in the response.

Once a request is sent, the server will return a JSON response with at least the following fields:

  • message-id String: The client defined identifier specified in the request.
  • status String: Response status, will be one of the following: ok, error
  • error String (Optional): An error message accompanying an error status.

Additional information may be required/returned depending on the request type. See below for more information.