eventhandler: Add reconnecting and reconnected stream output states

Closes #1050
This commit is contained in:
tt2468 2022-11-18 01:00:31 -08:00
parent 57a9e23f16
commit a254172c12
2 changed files with 37 additions and 0 deletions

View File

@ -340,12 +340,31 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
// Outputs
case OBS_FRONTEND_EVENT_STREAMING_STARTING:
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STARTING);
{
// Connect signals for stream output reconnects (hacky)
OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output();
if (streamOutput) {
signal_handler_t *sh = obs_output_get_signal_handler(streamOutput);
signal_handler_connect(sh, "reconnect", StreamOutputReconnectHandler, private_data);
signal_handler_connect(sh, "reconnect_success", StreamOutputReconnectSuccessHandler, private_data);
}
}
break;
case OBS_FRONTEND_EVENT_STREAMING_STARTED:
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STARTED);
break;
case OBS_FRONTEND_EVENT_STREAMING_STOPPING:
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPING);
{
// Disconnect signals for stream output reconnects
OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output();
if (streamOutput) {
signal_handler_t *sh = obs_output_get_signal_handler(streamOutput);
signal_handler_disconnect(sh, "reconnect", StreamOutputReconnectHandler, private_data);
signal_handler_disconnect(sh, "reconnect_success", StreamOutputReconnectSuccessHandler,
private_data);
}
}
break;
case OBS_FRONTEND_EVENT_STREAMING_STOPPED:
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPED);
@ -611,3 +630,17 @@ void EventHandler::SourceRenamedMultiHandler(void *param, calldata_t *data)
break;
}
}
void EventHandler::StreamOutputReconnectHandler(void *param, calldata_t *)
{
auto eventHandler = static_cast<EventHandler *>(param);
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_RECONNECTING);
}
void EventHandler::StreamOutputReconnectSuccessHandler(void *param, calldata_t *)
{
auto eventHandler = static_cast<EventHandler *>(param);
eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_RECONNECTED);
}

View File

@ -78,6 +78,10 @@ private:
static void SourceMediaNextMultiHandler(void *param, calldata_t *data);
static void SourceMediaPreviousMultiHandler(void *param, calldata_t *data);
// Signal handler: output
static void StreamOutputReconnectHandler(void *param, calldata_t *data);
static void StreamOutputReconnectSuccessHandler(void *param, calldata_t *data);
// General
void HandleExitStarted();