From e07e436a3a8cfe96a127176989406c5107a7d091 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 1 Jan 2026 19:15:39 -0500 Subject: [PATCH 1/3] Add Opus audio encoder as an option --- src/moq-output.cpp | 3 +-- src/moq-service.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 39c3b14..2836dc0 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -272,8 +272,7 @@ void register_moq_output() { const uint32_t base_flags = OBS_OUTPUT_ENCODED | OBS_OUTPUT_SERVICE; - // TODO: Add support for other codecs. - const char *audio_codecs = "aac"; + const char *audio_codecs = "aac;opus"; // TODO: Add support for other codecs. const char *video_codecs = "h264"; diff --git a/src/moq-service.cpp b/src/moq-service.cpp index 9b42f2c..985195d 100644 --- a/src/moq-service.cpp +++ b/src/moq-service.cpp @@ -1,7 +1,7 @@ #include "moq-service.h" // TODO: Define supported codecs. -const char *audio_codecs[] = {"aac", nullptr}; +const char *audio_codecs[] = {"aac", "opus", nullptr}; const char *video_codecs[] = {"h264", nullptr}; MoQService::MoQService(obs_data_t *settings, obs_service_t *) : server(), path() From 808d4983c3a588b77546ba638a075e15de10045f Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 4 Jan 2026 00:04:14 -0500 Subject: [PATCH 2/3] add hevc encoder --- src/moq-output.cpp | 4 ++-- src/moq-service.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 2836dc0..9aa9e59 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -273,8 +273,8 @@ void register_moq_output() const uint32_t base_flags = OBS_OUTPUT_ENCODED | OBS_OUTPUT_SERVICE; const char *audio_codecs = "aac;opus"; - // TODO: Add support for other codecs. - const char *video_codecs = "h264"; + // TODO: Add support for AV1, VP9. + const char *video_codecs = "h264;hevc"; struct obs_output_info info = {}; info.id = "moq_output"; diff --git a/src/moq-service.cpp b/src/moq-service.cpp index 985195d..ede1b45 100644 --- a/src/moq-service.cpp +++ b/src/moq-service.cpp @@ -2,7 +2,7 @@ // TODO: Define supported codecs. const char *audio_codecs[] = {"aac", "opus", nullptr}; -const char *video_codecs[] = {"h264", nullptr}; +const char *video_codecs[] = {"h264", "hevc", nullptr}; MoQService::MoQService(obs_data_t *settings, obs_service_t *) : server(), path() { From 71cb46f87f29c1214a6a792cbc33bb1de3df1380 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 12 Jan 2026 13:05:11 +1100 Subject: [PATCH 3/3] Rewrite the codecs and bump libmoq. --- CMakePresets.json | 2 +- src/moq-output.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index cfc7734..59e6c67 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -13,7 +13,7 @@ "ENABLE_FRONTEND_API": false, "ENABLE_QT": false, "CMAKE_EXPORT_COMPILE_COMMANDS": true, - "MOQ_VERSION": "0.2.0", + "MOQ_VERSION": "0.2.4", "MOQ_ARCHIVE": "tar.gz" } }, diff --git a/src/moq-output.cpp b/src/moq-output.cpp index 9aa9e59..101eb58 100644 --- a/src/moq-output.cpp +++ b/src/moq-output.cpp @@ -220,7 +220,18 @@ void MoQOutput::VideoInit() const char *codec = obs_encoder_get_codec(encoder); - video = moq_publish_media_ordered(broadcast, codec, strlen(codec), extra_data, extra_size); + // Transform codec string for MoQ + const char *moq_codec = codec; + if (strcmp(codec, "h264") == 0) { + // H.264 with inline SPS/PPS + moq_codec = "avc3"; + } else if (strcmp(codec, "hevc") == 0) { + // H.265 with inline VPS/SPS/PPS + moq_codec = "hev1"; + } + + // Intialize the media import module with the codec and initialization data. + video = moq_publish_media_ordered(broadcast, moq_codec, strlen(moq_codec), extra_data, extra_size); if (video < 0) { LOG_ERROR("Failed to initialize video track: %d", video); return;