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 39c3b14..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; @@ -272,10 +283,9 @@ 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"; - // TODO: Add support for other codecs. - const char *video_codecs = "h264"; + const char *audio_codecs = "aac;opus"; + // 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 9b42f2c..ede1b45 100644 --- a/src/moq-service.cpp +++ b/src/moq-service.cpp @@ -1,8 +1,8 @@ #include "moq-service.h" // TODO: Define supported codecs. -const char *audio_codecs[] = {"aac", nullptr}; -const char *video_codecs[] = {"h264", nullptr}; +const char *audio_codecs[] = {"aac", "opus", nullptr}; +const char *video_codecs[] = {"h264", "hevc", nullptr}; MoQService::MoQService(obs_data_t *settings, obs_service_t *) : server(), path() {