Skip to content

Add MOQ5 as an opt-in publishing backend - #16

Merged
mondain merged 2 commits into
openmoq:mainfrom
rwl4:moq5-publish-backend
Jul 25, 2026
Merged

Add MOQ5 as an opt-in publishing backend#16
mondain merged 2 commits into
openmoq:mainfrom
rwl4:moq5-publish-backend

Conversation

@rwl4

@rwl4 rwl4 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Route the batch, live stdin/SRT, and live-object publish paths through the moq5 service tier when -DOPENMOQ_USE_LIBMOQ_PUBLISHER=ON, alongside the existing picoquic transport. A compile-time gate keeps the default path unchanged while the integration matures; an injected TransportFactory always forces the legacy path regardless of the gate.

The moq5 path translates moqxr publish plans into media-sender objects with demand-aware subscription gating, bounded WOULD_BLOCK backpressure handling, CMSF SAP metadata propagation, and a graceful transport drain (moq_endpoint_drain) that flushes queued stream bytes before teardown so a slow or in-flight object is not truncated.

Package coalesced progressive-MP4 media as bounded, keyframe-aligned CMAF objects: one group per track with a per-GOP object, long GOPs split into capped continuation objects, rather than a single whole-track payload -- keeping each fragment's sample table within the receiver's CMAF validation limits while preserving group-start SAP types.

CMake gains sibling moq5/picoquic/picotls detection, OpenSSL pinning for the picotls build, and WebTransport adapter enablement. Adds translation and packaging tests and documents the backend selection in docs/build.md and the README.

Route the batch, live stdin/SRT, and live-object publish paths through the
moq5 service tier when -DOPENMOQ_USE_LIBMOQ_PUBLISHER=ON, alongside the existing
picoquic transport. A compile-time gate keeps the default path unchanged while
the integration matures; an injected TransportFactory always forces the legacy
path regardless of the gate.

The moq5 path translates moqxr publish plans into media-sender objects with
demand-aware subscription gating, bounded WOULD_BLOCK backpressure handling,
CMSF SAP metadata propagation, and a graceful transport drain
(moq_endpoint_drain) that flushes queued stream bytes before teardown so a slow
or in-flight object is not truncated.

Package coalesced progressive-MP4 media as bounded, keyframe-aligned CMAF
objects: one group per track with a per-GOP object, long GOPs split into capped
continuation objects, rather than a single whole-track payload -- keeping each
fragment's sample table within the receiver's CMAF validation limits while
preserving group-start SAP types.

CMake gains sibling moq5/picoquic/picotls detection, OpenSSL pinning for the
picotls build, and WebTransport adapter enablement. Adds translation and
packaging tests and documents the backend selection in docs/build.md and the
README.

@mondain mondain left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let me know your thoughts here; also for support of forward == 1, no subscriber is required for media to flow to a relay, which is a valid use-case when a relay implementation supports non-moq subscription or recording.

Comment thread src/cli_options.cpp
Comment thread src/cli_options.cpp
@mondain
mondain merged commit 037acf5 into openmoq:main Jul 25, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants