From 8af23cee329f0a0a547f96656a3a7111b5a949f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20Bogar=C3=ADn?= Date: Wed, 22 Jul 2026 12:02:53 -0300 Subject: [PATCH 1/2] reduce keyframe interval default value --- src/moq-service.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/moq-service.cpp b/src/moq-service.cpp index a3d9290..a46cf99 100644 --- a/src/moq-service.cpp +++ b/src/moq-service.cpp @@ -34,6 +34,7 @@ void MOQService::ApplyEncoderSettings(obs_data_t *video_settings, obs_data_t *au obs_data_set_int(video_settings, "bf", 0); //todo: check if this is needed obs_data_set_bool(video_settings, "repeat_headers", true); + obs_data_set_int(video_settings, "keyint_sec", 2); } } From e4a4c5cc45907fbab037dbd2eceeadf310fb5859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20Bogar=C3=ADn?= Date: Wed, 22 Jul 2026 12:30:31 -0300 Subject: [PATCH 2/2] set x264 tune to zerolatency for MOQ output --- src/moq-service.cpp | 25 +++++++++++++++++++++++++ src/moq-service.h | 1 + 2 files changed, 26 insertions(+) diff --git a/src/moq-service.cpp b/src/moq-service.cpp index a46cf99..feca1b0 100644 --- a/src/moq-service.cpp +++ b/src/moq-service.cpp @@ -1,5 +1,8 @@ #include "moq-service.h" +#include +#include + const char *audio_codecs[] = {nullptr}; const char *video_codecs[] = {"h264", nullptr}; @@ -38,6 +41,25 @@ void MOQService::ApplyEncoderSettings(obs_data_t *video_settings, obs_data_t *au } } +bool MOQService::Initialize(obs_output_t *output) +{ + obs_encoder_t *venc = obs_output_get_video_encoder(output); + if (!venc) + return true; + + const char *enc_id = obs_encoder_get_id(venc); + if (!enc_id) + return true; + + if (strcmp(enc_id, "obs_x264") == 0) { + OBSDataAutoRelease tune = obs_data_create(); + obs_data_set_string(tune, "tune", "zerolatency"); + obs_encoder_update(venc, tune); + } + + return true; +} + const char *MOQService::GetConnectInfo(enum obs_service_connect_info info) { switch (info) { @@ -87,6 +109,9 @@ void register_moq_service() info.apply_encoder_settings = [](void *, obs_data_t *video_settings, obs_data_t *audio_settings) { MOQService::ApplyEncoderSettings(video_settings, audio_settings); }; + info.initialize = [](void *, obs_output_t *output) -> bool { + return MOQService::Initialize(output); + }; info.get_supported_video_codecs = [](void *) -> const char ** { return video_codecs; diff --git a/src/moq-service.h b/src/moq-service.h index ab01e69..5b17f51 100644 --- a/src/moq-service.h +++ b/src/moq-service.h @@ -13,6 +13,7 @@ class MOQService { void Update(obs_data_t *settings); static void ApplyEncoderSettings(obs_data_t *video_settings, obs_data_t *audio_settings); + static bool Initialize(obs_output_t *output); static obs_properties_t *Properties(); const char *GetConnectInfo(enum obs_service_connect_info info); bool CanTryToConnect();