diff --git a/CMakeLists.txt b/CMakeLists.txt index dc1f5707..0ab45138 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,6 +108,7 @@ set(obs-websocket_SOURCES src/requesthandler/RequestHandler_SceneItems.cpp src/requesthandler/RequestHandler_Stream.cpp src/requesthandler/RequestHandler_Record.cpp + src/requesthandler/RequestHandler_MediaInputs.cpp src/requesthandler/rpc/Request.cpp src/requesthandler/rpc/RequestResult.cpp src/forms/SettingsDialog.cpp diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index 168a7a2a..686692b1 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -97,6 +97,9 @@ const std::map RequestHandler::_handlerMap {"PauseRecord", &RequestHandler::PauseRecord}, {"ResumeRecord", &RequestHandler::ResumeRecord}, //{"GetRecordDirectory", &RequestHandler::GetRecordDirectory}, + + // Media Inputs + {"GetMediaInputStatus", &RequestHandler::GetMediaInputStatus}, }; RequestHandler::RequestHandler(SessionPtr session) : diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index f426e3e4..0f9a0bfb 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -119,6 +119,9 @@ class RequestHandler { RequestResult ResumeRecord(const Request&); RequestResult GetRecordDirectory(const Request&); + // Media Inputs + RequestResult GetMediaInputStatus(const Request&); + SessionPtr _session; static const std::map _handlerMap; }; diff --git a/src/requesthandler/RequestHandler_MediaInputs.cpp b/src/requesthandler/RequestHandler_MediaInputs.cpp new file mode 100644 index 00000000..076028c6 --- /dev/null +++ b/src/requesthandler/RequestHandler_MediaInputs.cpp @@ -0,0 +1,21 @@ +#include "RequestHandler.h" + +RequestResult RequestHandler::GetMediaInputStatus(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!input) + return RequestResult::Error(statusCode, comment); + + json responseData; + responseData["mediaState"] = Utils::Obs::StringHelper::GetMediaInputStateString(input); + + auto mediaState = obs_source_media_get_state(input); + if (mediaState == OBS_MEDIA_STATE_PLAYING || mediaState == OBS_MEDIA_STATE_PAUSED) { + responseData["mediaDuration"] = obs_source_media_get_duration(input); + responseData["mediaCursor"] = obs_source_media_get_time(input); + } + + return RequestResult::Success(responseData); +}