mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Protocol: add ResetSceneItem for resetting source items (#108)
Use case: Reset media sources for recovery of timed-out input streams.
This commit is contained in:
parent
e198ed7a9c
commit
6ac3a3de57
10
PROTOCOL.md
10
PROTOCOL.md
@ -100,6 +100,7 @@ The protocol in general is based on the OBS Remote protocol created by Bill Hami
|
|||||||
- ["SetSceneItemPosition"](#setsceneitemposition)
|
- ["SetSceneItemPosition"](#setsceneitemposition)
|
||||||
- ["SetSceneItemTransform"](#setsceneitemtransform)
|
- ["SetSceneItemTransform"](#setsceneitemtransform)
|
||||||
- ["SetSceneItemCrop"](#setsceneitemcrop)
|
- ["SetSceneItemCrop"](#setsceneitemcrop)
|
||||||
|
- ["ResetSceneItem"](#resetsceneitem)
|
||||||
- **Scene Collections**
|
- **Scene Collections**
|
||||||
- ["ListSceneCollections"](#listscenecollections)
|
- ["ListSceneCollections"](#listscenecollections)
|
||||||
- ["SetCurrentSceneCollection"](#setcurrentscenecollection)
|
- ["SetCurrentSceneCollection"](#setcurrentscenecollection)
|
||||||
@ -738,6 +739,15 @@ __Response__ : OK if specified item exists, error otherwise.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
#### "ResetSceneItem"
|
||||||
|
__Request fields__ :
|
||||||
|
- **"item"** (string) : Name of the scene item
|
||||||
|
- **"scene-name"** (string, optional) : Scene the item belongs to. Default : current scene.
|
||||||
|
|
||||||
|
__Response__ : OK if specified item exists, error otherwise.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
#### "SetCurrentSceneCollection"
|
#### "SetCurrentSceneCollection"
|
||||||
Change the current scene collection.
|
Change the current scene collection.
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ WSRequestHandler::WSRequestHandler(QWebSocket* client) :
|
|||||||
messageMap["SetSceneItemPosition"] = WSRequestHandler::HandleSetSceneItemPosition;
|
messageMap["SetSceneItemPosition"] = WSRequestHandler::HandleSetSceneItemPosition;
|
||||||
messageMap["SetSceneItemTransform"] = WSRequestHandler::HandleSetSceneItemTransform;
|
messageMap["SetSceneItemTransform"] = WSRequestHandler::HandleSetSceneItemTransform;
|
||||||
messageMap["SetSceneItemCrop"] = WSRequestHandler::HandleSetSceneItemCrop;
|
messageMap["SetSceneItemCrop"] = WSRequestHandler::HandleSetSceneItemCrop;
|
||||||
|
messageMap["ResetSceneItem"] = WSRequestHandler::HandleResetSceneItem;
|
||||||
|
|
||||||
messageMap["GetStreamingStatus"] = WSRequestHandler::HandleGetStreamingStatus;
|
messageMap["GetStreamingStatus"] = WSRequestHandler::HandleGetStreamingStatus;
|
||||||
messageMap["StartStopStreaming"] = WSRequestHandler::HandleStartStopStreaming;
|
messageMap["StartStopStreaming"] = WSRequestHandler::HandleStartStopStreaming;
|
||||||
@ -1464,3 +1465,38 @@ void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) {
|
|||||||
}
|
}
|
||||||
obs_source_release(scene);
|
obs_source_release(scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WSRequestHandler::HandleResetSceneItem(WSRequestHandler* req) {
|
||||||
|
if (!req->hasField("item")) {
|
||||||
|
req->SendErrorResponse("missing request parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* itemName = obs_data_get_string(req->data, "item");
|
||||||
|
if (!itemName) {
|
||||||
|
req->SendErrorResponse("invalid request parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* sceneName = obs_data_get_string(req->data, "scene-name");
|
||||||
|
obs_source_t* scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||||
|
if (!scene) {
|
||||||
|
req->SendErrorResponse("requested scene doesn't exist");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName);
|
||||||
|
if (sceneItem) {
|
||||||
|
obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem);
|
||||||
|
|
||||||
|
obs_data_t* settings = obs_source_get_settings(sceneItemSource);
|
||||||
|
obs_source_update(sceneItemSource, settings);
|
||||||
|
|
||||||
|
obs_sceneitem_release(sceneItem);
|
||||||
|
req->SendOKResponse();
|
||||||
|
} else {
|
||||||
|
req->SendErrorResponse("specified scene item doesn't exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_source_release(scene);
|
||||||
|
}
|
||||||
|
@ -60,6 +60,7 @@ class WSRequestHandler : public QObject {
|
|||||||
static void HandleSetSceneItemPosition(WSRequestHandler* req);
|
static void HandleSetSceneItemPosition(WSRequestHandler* req);
|
||||||
static void HandleSetSceneItemTransform(WSRequestHandler* req);
|
static void HandleSetSceneItemTransform(WSRequestHandler* req);
|
||||||
static void HandleSetSceneItemCrop(WSRequestHandler* req);
|
static void HandleSetSceneItemCrop(WSRequestHandler* req);
|
||||||
|
static void HandleResetSceneItem(WSRequestHandler* req);
|
||||||
|
|
||||||
static void HandleGetStreamingStatus(WSRequestHandler* req);
|
static void HandleGetStreamingStatus(WSRequestHandler* req);
|
||||||
static void HandleStartStopStreaming(WSRequestHandler* req);
|
static void HandleStartStopStreaming(WSRequestHandler* req);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user