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 theAuthenticate
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 anerror
status.
Additional information may be required/returned depending on the request type. See below for more information.