obs-websocket/src/requesthandler/RequestHandler_Stream.cpp
2021-09-02 19:29:13 -07:00

54 lines
1.7 KiB
C++

#include "RequestHandler.h"
RequestResult RequestHandler::GetStreamStatus(const Request& request)
{
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);
}
RequestResult RequestHandler::ToggleStream(const Request& request)
{
json responseData;
if (obs_frontend_streaming_active()) {
obs_frontend_streaming_stop();
responseData["outputActive"] = false;
} else {
obs_frontend_streaming_start();
responseData["outputActive"] = true;
}
return RequestResult::Success(responseData);
}
RequestResult RequestHandler::StartStream(const Request& request)
{
if (obs_frontend_streaming_active())
return RequestResult::Error(RequestStatus::OutputRunning);
// TODO: Call signal directly to perform blocking wait
obs_frontend_streaming_start();
return RequestResult::Success();
}
RequestResult RequestHandler::StopStream(const Request& request)
{
if (!obs_frontend_streaming_active())
return RequestResult::Error(RequestStatus::OutputNotRunning);
// TODO: Call signal directly to perform blocking wait
obs_frontend_streaming_stop();
return RequestResult::Success();
}