mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Base: Lots of changes
This commit is contained in:
parent
16697fb65e
commit
0547e1f2da
@ -101,7 +101,7 @@ WebSocketProtocol::ProcessResult WebSocketProtocol::ProcessMessage(SessionPtr se
|
||||
}
|
||||
|
||||
RequestHandler requestHandler;
|
||||
Request request(session->RpcVersion(), session->IgnoreNonFatalRequestChecks(), incomingMessage["requestType"], incomingMessage["requestData"]);
|
||||
Request request(session, incomingMessage["requestType"], incomingMessage["requestData"]);
|
||||
|
||||
RequestResult requestResult = requestHandler.ProcessRequest(request);
|
||||
|
||||
@ -144,7 +144,7 @@ WebSocketProtocol::ProcessResult WebSocketProtocol::ProcessMessage(SessionPtr se
|
||||
if (!requestJson["requestType"].is_string())
|
||||
requestJson["requestType"] = "";
|
||||
|
||||
Request request(session->RpcVersion(), session->IgnoreNonFatalRequestChecks(), requestJson["requestType"], requestJson["requestData"]);
|
||||
Request request(session, requestJson["requestType"], requestJson["requestData"]);
|
||||
|
||||
RequestResult requestResult = requestHandler.ProcessRequest(request);
|
||||
|
||||
|
@ -8,24 +8,6 @@
|
||||
#include "../obs-websocket.h"
|
||||
#include "../WebSocketServer.h"
|
||||
|
||||
enum ObsOutputState {
|
||||
OBS_WEBSOCKET_OUTPUT_STARTING,
|
||||
OBS_WEBSOCKET_OUTPUT_STARTED,
|
||||
OBS_WEBSOCKET_OUTPUT_STOPPING,
|
||||
OBS_WEBSOCKET_OUTPUT_STOPPED,
|
||||
OBS_WEBSOCKET_OUTPUT_PAUSED,
|
||||
OBS_WEBSOCKET_OUTPUT_RESUMED
|
||||
};
|
||||
|
||||
enum ObsMediaInputAction {
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NEXT,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PREVIOUS
|
||||
};
|
||||
|
||||
template <typename T> T* GetCalldataPointer(const calldata_t *data, const char* name) {
|
||||
void *ptr = nullptr;
|
||||
calldata_get_ptr(data, name, &ptr);
|
||||
|
@ -20,6 +20,7 @@ ConfigPtr _config;
|
||||
WebSocketServerPtr _webSocketServer;
|
||||
EventHandlerPtr _eventHandler;
|
||||
SettingsDialog *_settingsDialog = nullptr;
|
||||
os_cpu_usage_info_t* _cpuUsageInfo;
|
||||
|
||||
void ___source_dummy_addref(obs_source_t*) {}
|
||||
void ___sceneitem_dummy_addref(obs_sceneitem_t*) {};
|
||||
@ -55,12 +56,14 @@ bool obs_module_load(void)
|
||||
QAction* menuAction = (QAction*)obs_frontend_add_tools_menu_qaction(menuActionText);
|
||||
QObject::connect(menuAction, &QAction::triggered, [] { _settingsDialog->ToggleShowHide(); });
|
||||
|
||||
// Loading finished
|
||||
blog(LOG_INFO, "[obs_module_load] Module loaded.");
|
||||
_cpuUsageInfo = os_cpu_usage_info_start();
|
||||
|
||||
if (_config->ServerEnabled)
|
||||
_webSocketServer->Start();
|
||||
|
||||
// Loading finished
|
||||
blog(LOG_INFO, "[obs_module_load] Module loaded.");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -80,6 +83,8 @@ void obs_module_unload()
|
||||
_config->Save();
|
||||
_config.reset();
|
||||
|
||||
os_cpu_usage_info_destroy(_cpuUsageInfo);
|
||||
|
||||
blog(LOG_INFO, "[obs_module_unload] Finished shutting down.");
|
||||
}
|
||||
|
||||
@ -97,3 +102,8 @@ EventHandlerPtr GetEventHandler()
|
||||
{
|
||||
return _eventHandler;
|
||||
}
|
||||
|
||||
os_cpu_usage_info_t* GetCpuUsageInfo()
|
||||
{
|
||||
return _cpuUsageInfo;
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <obs.hpp>
|
||||
#include <util/platform.h>
|
||||
|
||||
// Autorelease object definitions
|
||||
void ___source_dummy_addref(obs_source_t*);
|
||||
@ -39,3 +40,5 @@ ConfigPtr GetConfig();
|
||||
WebSocketServerPtr GetWebSocketServer();
|
||||
|
||||
EventHandlerPtr GetEventHandler();
|
||||
|
||||
os_cpu_usage_info_t* GetCpuUsageInfo();
|
||||
|
@ -6,6 +6,7 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
|
||||
// General
|
||||
{"GetVersion", &RequestHandler::GetVersion},
|
||||
{"BroadcastCustomEvent", &RequestHandler::BroadcastCustomEvent},
|
||||
{"GetStats", &RequestHandler::GetStats},
|
||||
{"GetHotkeyList", &RequestHandler::GetHotkeyList},
|
||||
{"TriggerHotkeyByName", &RequestHandler::TriggerHotkeyByName},
|
||||
{"TriggerHotkeyByKeySequence", &RequestHandler::TriggerHotkeyByKeySequence},
|
||||
|
@ -21,6 +21,7 @@ class RequestHandler {
|
||||
// General
|
||||
RequestResult GetVersion(const Request&);
|
||||
RequestResult BroadcastCustomEvent(const Request&);
|
||||
RequestResult GetStats(const Request&);
|
||||
RequestResult GetHotkeyList(const Request&);
|
||||
RequestResult TriggerHotkeyByName(const Request&);
|
||||
RequestResult TriggerHotkeyByKeySequence(const Request&);
|
||||
|
@ -40,6 +40,16 @@ RequestResult RequestHandler::BroadcastCustomEvent(const Request& request)
|
||||
return RequestResult::Success();
|
||||
}
|
||||
|
||||
RequestResult RequestHandler::GetStats(const Request& request)
|
||||
{
|
||||
json responseData = Utils::Obs::DataHelper::GetStats();
|
||||
|
||||
responseData["webSocketSessionIncomingMessages"] = request.Session->IncomingMessages();
|
||||
responseData["webSocketSessionOutgoingMessages"] = request.Session->OutgoingMessages();
|
||||
|
||||
return RequestResult::Success(responseData);
|
||||
}
|
||||
|
||||
RequestResult RequestHandler::GetHotkeyList(const Request& request)
|
||||
{
|
||||
json responseData;
|
||||
|
@ -3,12 +3,16 @@
|
||||
|
||||
RequestResult RequestHandler::GetStreamStatus(const Request& request)
|
||||
{
|
||||
json responseData;
|
||||
|
||||
OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output();
|
||||
|
||||
json responseData;
|
||||
responseData["outputActive"] = obs_output_active(streamOutput);
|
||||
responseData["outputReconnecting"] = obs_output_reconnecting(streamOutput);
|
||||
responseData["outputTimecode"] = Utils::Obs::StringHelper::GetOutputTimecodeString(streamOutput);
|
||||
responseData["outputDuration"] = Utils::Obs::NumberHelper::GetOutputDuration(streamOutput);
|
||||
responseData["outputBytes"] = (uint64_t)obs_output_get_total_bytes(streamOutput);
|
||||
responseData["outputSkippedFrames"] = obs_output_get_frames_dropped(streamOutput);
|
||||
responseData["outputTotalFrames"] = obs_output_get_total_frames(streamOutput);
|
||||
|
||||
return RequestResult::Success(responseData);
|
||||
}
|
||||
|
@ -10,11 +10,12 @@ json GetDefaultJsonObject(json requestData)
|
||||
return requestData;
|
||||
}
|
||||
|
||||
Request::Request(uint8_t rpcVersion, bool ignoreNonFatalRequestChecks, std::string requestType, json requestData) :
|
||||
RpcVersion(rpcVersion),
|
||||
IgnoreNonFatalRequestChecks(ignoreNonFatalRequestChecks),
|
||||
RequestData(GetDefaultJsonObject(requestData)),
|
||||
RequestType(requestType)
|
||||
Request::Request(SessionPtr session, std::string requestType, json requestData) :
|
||||
Session(session),
|
||||
RpcVersion(session->RpcVersion()),
|
||||
IgnoreNonFatalRequestChecks(session->IgnoreNonFatalRequestChecks()),
|
||||
RequestType(requestType),
|
||||
RequestData(GetDefaultJsonObject(requestData))
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "RequestStatus.h"
|
||||
#include "../../WebSocketSession.h"
|
||||
#include "../../utils/Utils.h"
|
||||
|
||||
struct Request
|
||||
{
|
||||
Request(const uint8_t rpcVersion, const bool ignoreNonFatalRequestChecks, const std::string requestType, const json requestData = nullptr);
|
||||
Request(SessionPtr session, const std::string requestType, const json requestData = nullptr);
|
||||
|
||||
const bool HasRequestData() const
|
||||
{
|
||||
@ -22,6 +23,7 @@ struct Request
|
||||
obs_source_t *ValidateScene(const std::string keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const;
|
||||
obs_source_t *ValidateInput(const std::string keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const;
|
||||
|
||||
SessionPtr Session;
|
||||
const uint8_t RpcVersion;
|
||||
const bool IgnoreNonFatalRequestChecks;
|
||||
const std::string RequestType;
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <inttypes.h>
|
||||
#include <QString>
|
||||
#include <obs-frontend-api.h>
|
||||
#include <util/config-file.h>
|
||||
#include <util/util_uint64.h>
|
||||
|
||||
#include "Obs.h"
|
||||
@ -332,6 +333,29 @@ std::vector<std::string> Utils::Obs::ListHelper::GetInputKindList(bool unversion
|
||||
return ret;
|
||||
}
|
||||
|
||||
json Utils::Obs::DataHelper::GetStats()
|
||||
{
|
||||
json ret;
|
||||
|
||||
config_t* currentProfile = obs_frontend_get_profile_config();
|
||||
const char* outputMode = config_get_string(currentProfile, "Output", "Mode");
|
||||
const char* recordPath = strcmp(outputMode, "Advanced") ? config_get_string(currentProfile, "SimpleOutput", "FilePath") : config_get_string(currentProfile, "AdvOut", "RecFilePath");
|
||||
|
||||
video_t* video = obs_get_video();
|
||||
|
||||
ret["cpuUsage"] = os_cpu_usage_info_query(GetCpuUsageInfo());
|
||||
ret["memoryUsage"] = (double)os_get_proc_resident_size() / (1024.0 * 1024.0);
|
||||
ret["availableDiskSpace"] = (double)os_get_free_disk_space(recordPath) / (1024.0 * 1024.0);
|
||||
ret["activeFps"] = obs_get_active_fps();
|
||||
ret["averageFrameRenderTime"] = (double)obs_get_average_frame_time_ns() / 1000000.0;
|
||||
ret["renderSkippedFrames"] = obs_get_lagged_frames();
|
||||
ret["renderTotalFrames"] = obs_get_total_frames();
|
||||
ret["outputSkippedFrames"] = video_output_get_skipped_frames(video);
|
||||
ret["outputTotalFrames"] = video_output_get_total_frames(video);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
obs_hotkey_t *Utils::Obs::SearchHelper::GetHotkeyByName(std::string name)
|
||||
{
|
||||
auto hotkeys = ListHelper::GetHotkeyList();
|
||||
|
@ -5,6 +5,25 @@
|
||||
|
||||
#include "Json.h"
|
||||
|
||||
enum ObsOutputState {
|
||||
OBS_WEBSOCKET_OUTPUT_STARTING,
|
||||
OBS_WEBSOCKET_OUTPUT_STARTED,
|
||||
OBS_WEBSOCKET_OUTPUT_STOPPING,
|
||||
OBS_WEBSOCKET_OUTPUT_STOPPED,
|
||||
OBS_WEBSOCKET_OUTPUT_RECONNECTING,
|
||||
OBS_WEBSOCKET_OUTPUT_PAUSED,
|
||||
OBS_WEBSOCKET_OUTPUT_RESUMED
|
||||
};
|
||||
|
||||
enum ObsMediaInputAction {
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NEXT,
|
||||
OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PREVIOUS
|
||||
};
|
||||
|
||||
namespace Utils {
|
||||
namespace Obs {
|
||||
namespace StringHelper {
|
||||
@ -35,6 +54,10 @@ namespace Utils {
|
||||
std::vector<std::string> GetInputKindList(bool unversioned = false, bool includeDisabled = false);
|
||||
}
|
||||
|
||||
namespace DataHelper {
|
||||
json GetStats();
|
||||
}
|
||||
|
||||
namespace SearchHelper {
|
||||
obs_hotkey_t *GetHotkeyByName(std::string name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user