mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Merge pull request #109 from dragonbane0/request-types-sync-offset
Add request types: SetSyncOffset and GetSyncOffset
This commit is contained in:
commit
17e573d67f
25
PROTOCOL.md
25
PROTOCOL.md
@ -95,6 +95,8 @@ The protocol in general is based on the OBS Remote protocol created by Bill Hami
|
|||||||
- ["SetMute"](#setmute)
|
- ["SetMute"](#setmute)
|
||||||
- ["GetMute"](#getmute)
|
- ["GetMute"](#getmute)
|
||||||
- ["ToggleMute"](#togglemute)
|
- ["ToggleMute"](#togglemute)
|
||||||
|
- ["SetSyncOffset"](#setsyncoffset)
|
||||||
|
- ["GetSyncOffset"](#getsyncoffset)
|
||||||
- **Scene Items**
|
- **Scene Items**
|
||||||
- ["SetSceneItemRender"](#setsourcerender) (a.k.a `SetSourceRender`)
|
- ["SetSceneItemRender"](#setsourcerender) (a.k.a `SetSourceRender`)
|
||||||
- ["SetSceneItemPosition"](#setsceneitemposition)
|
- ["SetSceneItemPosition"](#setsceneitemposition)
|
||||||
@ -691,6 +693,29 @@ __Response__ : OK if specified source exists, error otherwise.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
#### "SetSyncOffset"
|
||||||
|
Set the sync offset of a specific source.
|
||||||
|
|
||||||
|
__Request fields__ :
|
||||||
|
- **"source"** (string) : the name of the source
|
||||||
|
- **"offset"** (integer) : the desired sync offset in nanoseconds
|
||||||
|
|
||||||
|
__Response__ : OK if specified source exists, error otherwise.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### "GetSyncOffset"
|
||||||
|
Get the sync offset of a specific source.
|
||||||
|
|
||||||
|
__Request fields__ :
|
||||||
|
- **"source"** (string) : the name of the source
|
||||||
|
|
||||||
|
__Response__ : OK if source exists, with these additional fields :
|
||||||
|
- **"name"** (string) : source name
|
||||||
|
- **"offset"** (integer) : source sync offset, in nanoseconds
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
#### "GetSpecialSources"
|
#### "GetSpecialSources"
|
||||||
Get configured special sources like Desktop Audio and Mic/Aux sources.
|
Get configured special sources like Desktop Audio and Mic/Aux sources.
|
||||||
|
|
||||||
|
@ -77,6 +77,8 @@ WSRequestHandler::WSRequestHandler(QWebSocket* client) :
|
|||||||
messageMap["ToggleMute"] = WSRequestHandler::HandleToggleMute;
|
messageMap["ToggleMute"] = WSRequestHandler::HandleToggleMute;
|
||||||
messageMap["SetMute"] = WSRequestHandler::HandleSetMute;
|
messageMap["SetMute"] = WSRequestHandler::HandleSetMute;
|
||||||
messageMap["GetMute"] = WSRequestHandler::HandleGetMute;
|
messageMap["GetMute"] = WSRequestHandler::HandleGetMute;
|
||||||
|
messageMap["SetSyncOffset"] = WSRequestHandler::HandleSetSyncOffset;
|
||||||
|
messageMap["GetSyncOffset"] = WSRequestHandler::HandleGetSyncOffset;
|
||||||
messageMap["GetSpecialSources"] = WSRequestHandler::HandleGetSpecialSources;
|
messageMap["GetSpecialSources"] = WSRequestHandler::HandleGetSpecialSources;
|
||||||
|
|
||||||
messageMap["SetCurrentSceneCollection"] = WSRequestHandler::HandleSetCurrentSceneCollection;
|
messageMap["SetCurrentSceneCollection"] = WSRequestHandler::HandleSetCurrentSceneCollection;
|
||||||
@ -710,6 +712,58 @@ void WSRequestHandler::HandleGetMute(WSRequestHandler* req) {
|
|||||||
obs_data_release(response);
|
obs_data_release(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WSRequestHandler::HandleSetSyncOffset(WSRequestHandler* req) {
|
||||||
|
if (!req->hasField("source") ||
|
||||||
|
!req->hasField("offset")) {
|
||||||
|
req->SendErrorResponse("missing request parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* source_name = obs_data_get_string(req->data, "source");
|
||||||
|
int64_t source_sync_offset = (int64_t)obs_data_get_int(req->data, "offset");
|
||||||
|
|
||||||
|
if (!source_name || strlen(source_name) < 1 ||
|
||||||
|
source_sync_offset < 0) {
|
||||||
|
req->SendErrorResponse("invalid request parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_source_t* source = obs_get_source_by_name(source_name);
|
||||||
|
if (!source) {
|
||||||
|
req->SendErrorResponse("specified source doesn't exist");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_source_set_sync_offset(source, source_sync_offset);
|
||||||
|
req->SendOKResponse();
|
||||||
|
|
||||||
|
obs_source_release(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WSRequestHandler::HandleGetSyncOffset(WSRequestHandler* req) {
|
||||||
|
if (!req->hasField("source")) {
|
||||||
|
req->SendErrorResponse("missing request parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* source_name = obs_data_get_string(req->data, "source");
|
||||||
|
if (str_valid(source_name)) {
|
||||||
|
obs_source_t* source = obs_get_source_by_name(source_name);
|
||||||
|
|
||||||
|
obs_data_t* response = obs_data_create();
|
||||||
|
obs_data_set_string(response, "name", source_name);
|
||||||
|
obs_data_set_int(response, "offset", obs_source_get_sync_offset(source));
|
||||||
|
|
||||||
|
req->SendOKResponse(response);
|
||||||
|
|
||||||
|
obs_data_release(response);
|
||||||
|
obs_source_release(source);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
req->SendErrorResponse("invalid request parameters");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) {
|
void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) {
|
||||||
if (!req->hasField("item") ||
|
if (!req->hasField("item") ||
|
||||||
!req->hasField("x") || !req->hasField("y")) {
|
!req->hasField("x") || !req->hasField("y")) {
|
||||||
|
@ -83,6 +83,8 @@ class WSRequestHandler : public QObject {
|
|||||||
static void HandleToggleMute(WSRequestHandler* req);
|
static void HandleToggleMute(WSRequestHandler* req);
|
||||||
static void HandleSetMute(WSRequestHandler* req);
|
static void HandleSetMute(WSRequestHandler* req);
|
||||||
static void HandleGetMute(WSRequestHandler* req);
|
static void HandleGetMute(WSRequestHandler* req);
|
||||||
|
static void HandleSetSyncOffset(WSRequestHandler* req);
|
||||||
|
static void HandleGetSyncOffset(WSRequestHandler* req);
|
||||||
static void HandleGetSpecialSources(WSRequestHandler* req);
|
static void HandleGetSpecialSources(WSRequestHandler* req);
|
||||||
|
|
||||||
static void HandleSetCurrentSceneCollection(WSRequestHandler* req);
|
static void HandleSetCurrentSceneCollection(WSRequestHandler* req);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user