From 820e5b7ea145bed9dcd51a14b51320507de773ae Mon Sep 17 00:00:00 2001 From: Dan Rossi Date: Thu, 14 May 2026 19:16:33 +1000 Subject: [PATCH 1/4] - add server connection failure and disconnect stop signals - add initial reconnection attempt feature. Needs to signal to keep trying to reconnect --- src/moq-output.cpp | 13 ++++++++++++- src/moq-output.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 4594fc5..4055ddd 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -2,6 +2,7 @@ #include "moq-output.h" #include "util/util_uint64.h" +#include "util/threading.h" extern "C" { #include "moq.h" @@ -15,7 +16,8 @@ MoQOutput::MoQOutput(obs_data_t *, obs_output_t *output) connect_time_ms(0), origin(moq_origin_create()), session(0), - broadcast(moq_publish_create()) + broadcast(moq_publish_create()), + reconnecting(false) { } @@ -81,8 +83,17 @@ bool MoQOutput::Start() self->connect_time_ms = static_cast(std::chrono::duration_cast(elapsed).count()); LOG_INFO("MoQ session established (%d ms): %s", self->connect_time_ms, self->server_url.c_str()); + + if (self->reconnecting) + os_atomic_set_bool(&self->reconnecting, false); + } else if (error_code == -2) { + LOG_INFO("MoQ session disconnected (%d): %s", error_code, self->server_url.c_str()); + obs_output_signal_stop(self->output, OBS_OUTPUT_DISCONNECTED); + os_atomic_set_bool(&self->reconnecting, true); } else { LOG_INFO("MoQ session closed (%d): %s", error_code, self->server_url.c_str()); + obs_output_signal_stop(self->output, OBS_OUTPUT_CONNECT_FAILED); + os_atomic_set_bool(&self->reconnecting, false); } }; diff --git a/src/moq-output.h b/src/moq-output.h index a46e6a5..d1a59c0 100644 --- a/src/moq-output.h +++ b/src/moq-output.h @@ -46,6 +46,8 @@ class MoQOutput int broadcast; std::map video_tracks; std::map audio_tracks; + + volatile bool reconnecting; }; void register_moq_output(); From 6b3f820cc74796793d793c72bfd4533dcfb8acaa Mon Sep 17 00:00:00 2001 From: Dan Rossi Date: Thu, 14 May 2026 19:20:48 +1000 Subject: [PATCH 2/4] - turn off reconnecting in the stop method --- src/moq-output.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 4055ddd..f536694 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -144,6 +144,8 @@ void MoQOutput::Stop(bool signal) obs_output_signal_stop(output, OBS_OUTPUT_SUCCESS); } + os_atomic_set_bool(&self->reconnecting, false); + return; } From 580a319659d2c6c2c6d42ddf08b14ecdab759c34 Mon Sep 17 00:00:00 2001 From: Dan Rossi Date: Thu, 14 May 2026 19:22:55 +1000 Subject: [PATCH 3/4] - update docs --- src/moq-output.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index f536694..8c75ab7 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -87,11 +87,13 @@ bool MoQOutput::Start() if (self->reconnecting) os_atomic_set_bool(&self->reconnecting, false); } else if (error_code == -2) { + //on swrver disconnection. Signal to attempt to reconnect LOG_INFO("MoQ session disconnected (%d): %s", error_code, self->server_url.c_str()); obs_output_signal_stop(self->output, OBS_OUTPUT_DISCONNECTED); os_atomic_set_bool(&self->reconnecting, true); } else { LOG_INFO("MoQ session closed (%d): %s", error_code, self->server_url.c_str()); + // signal connection failure and stop the broadcast obs_output_signal_stop(self->output, OBS_OUTPUT_CONNECT_FAILED); os_atomic_set_bool(&self->reconnecting, false); } From d37e6d218a1fe8246a51d15a81b5ca6715e76f0f Mon Sep 17 00:00:00 2001 From: Dan Rossi Date: Fri, 15 May 2026 22:36:08 +1000 Subject: [PATCH 4/4] - fix pointer reference --- src/moq-output.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 8c75ab7..4bc0222 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -146,7 +146,7 @@ void MoQOutput::Stop(bool signal) obs_output_signal_stop(output, OBS_OUTPUT_SUCCESS); } - os_atomic_set_bool(&self->reconnecting, false); + os_atomic_set_bool(&reconnecting, false); return; }