frontend: Auto-discovery of registered services - #12911
Open
emilsas wants to merge 2 commits into
Open
Conversation
derrod
reviewed
Jan 14, 2026
Author
kixelated
added a commit
to moq-dev/obs
that referenced
this pull request
Jun 18, 2026
* Add Qt dock UI for MoQ streaming OBS's stable Settings -> Stream UI does not surface third-party services (pending obsproject/obs-studio#12911), so the registered MoQ service/output are invisible in the UI. Add a dockable panel that drives the MoQ output directly instead, working on stable OBS today. The dock (moq-dock.cpp/h, registered via obs_frontend_add_dock_by_id) lets the user enter a relay URL and broadcast path and start/stop streaming. It creates its own service/output and reuses the encoders configured in OBS's Output settings (both Simple and Advanced modes), so no encoder options are exposed in the dock. Settings persist via obs_module_config_path, and a live statistics panel shows status, duration, bitrate, data sent, dropped frames, and connect time. The bundled libmoq version is shown from MOQ_VERSION. Enable ENABLE_FRONTEND_API and ENABLE_QT (gated so the dock only builds when both are on, via MOQ_FRONTEND_ENABLED). Add a build-time workaround for the AGL framework: recent macOS SDKs ship no linkable AGL binary (it exists only in the runtime dyld shared cache), but the obs-deps Qt6 build references it transitively via WrapOpenGL; generate a stub whose install name points at the real framework so the link succeeds and dyld resolves AGL at load. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Apply clang-format and gersemi formatting Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix audio mixer index and preserve stop error message - Use the configured TrackIndex (1-based) as the libobs audio mixer index (0-based) instead of hardcoding mixer 0, so Advanced mode with Track 2+ publishes the correct audio track. - Set the stop failure message after StopStream() resets status to Idle, so the failure reason is actually shown. Addresses CodeRabbit review feedback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
emilsas
force-pushed
the
feature/service-discovery
branch
from
July 30, 2026 13:31
70b50de to
331daba
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Description
This PR refactors
LoadServicesinOBSBasicSettings_Stream.cppto dynamically discover and populate the stream services dropdown.Instead of hardcoding check for specific service types (like the existing WHIP check), the code now:
obs_enum_service_types.To support this cleaner logic, a
ServiceItemDatastruct (registered withQ_DECLARE_METATYPE) was introduced to replace the mixed usage ofListOptenums and strings in the dropdown'sQVariantdata. This unifies how service metadata (type, ID, display name) is stored and retrieved.Motivation and Context
Currently, plugins that introduce new service types (e.g., a new streaming protocol) do not automatically appear in the Stream Settings service dropdown. Developers typically have to modify the core
OBSBasicSettings_Stream.cppfile to hardcode their service into the list.This change allows any plugin to register a service and have it automatically discovered and listed in the UI, provided the underlying output protocol is registered. This decouples the frontend UI from specific service implementations and significantly improves extensibility for protocol plugins.
How Has This Been Tested?
Tested on macOS.
Types of changes
Checklist: