-
-
Notifications
You must be signed in to change notification settings - Fork 250
feat(moq-net): carry datagrams over moq-transport as OBJECT_DATAGRAM #4274
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c650bc9
78d6eef
a77b18f
bb93444
31a6650
8632aeb
d8e4558
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # [S] Datagram range | ||
|
|
||
| ## Goal | ||
|
|
||
| A subscriber receives only the datagrams its subscription asked for, on | ||
| moq-lite and on moq-transport, in Rust and JavaScript. A new subscriber | ||
| is not handed datagrams from before its start. | ||
|
|
||
| ## Plan | ||
|
|
||
| Datagrams share the group sequence namespace, but their cursor ignores the | ||
| subscription's start and end. The model buffers the last 64 per track, and a | ||
| new subscriber's cursor starts at the oldest. So a late joiner, or a relay | ||
| fanning out a fresh downstream, gets stale datagrams first. Both protocols do | ||
| this today, and the moxygen line kept moq-transport matching moq-lite. | ||
|
|
||
| Settle the rule once and apply it to both protocols. It could be the cursor | ||
| starting at the live edge, the subscribe range bounding datagrams the way it | ||
| bounds groups, or both. Prefer fixing it in the model over filtering in each | ||
| session. | ||
|
|
||
| Watch the edge cases: a datagram at the start group when a frame offset | ||
| skips object 0, SUBSCRIBE_UPDATE moving the range, and a datagram that | ||
| lands before the subscription's alias or id is known. A test must tell a | ||
| filtered datagram apart from one dropped for any other reason. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Moxygen compatibility](/quest/m1/moxygen/README.md) - brought datagrams to moq-transport with moq-lite's behavior |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -40,7 +40,7 @@ The Rust and TypeScript cores expose the same surface, and nothing else: | |
|
|
||
| - Deterministic secret-derived physical names hide catalog, codec, role, quality, timeline, and custom-track semantics. Authorized clients derive the encrypted catalog track name, then learn the remaining opaque names from its decrypted contents. Every catalog representation is encrypted; Rust publishers must not emit a plaintext MSF catalog. | ||
| - A platform that forwards and meters protected bytes must never preview, record, archive, transmux, transcode, transcribe, compose, or inspect them, rejecting those paths before opening a processing session or writing product state. Applications needing those operations terminate E2EE outside the platform. A platform classifies protected broadcasts by its own credential or product state, never by name; the moq.pro (downstream) exclusion classifier and dashboard work stay downstream. | ||
| - The first proof covers browser TypeScript and native Rust publication and playback in both directions, with grouped audio and video over both moq-lite and MoQ Transport. Shared vectors cover groups and moq-lite datagrams; MoQ Transport has no datagram delivery. | ||
| - The first proof covers browser TypeScript and native Rust publication and playback in both directions, with grouped audio and video over both moq-lite and MoQ Transport. Shared vectors cover groups and moq-lite datagrams; JavaScript has no MoQ Transport datagram delivery yet. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This now says only JavaScript lacks MoQ Transport datagram delivery, but AGENTS.md reference: AGENTS.md:L27-L27 Useful? React with 👍 / 👎.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed in 8632aeb: the draft now maps a MoQ Transport datagram to an OBJECT_DATAGRAM at Object ID 0 whose Group ID is the sequence, so the identity is unchanged. Shared vectors stay transport-independent; (Written by Claude Opus 5.5) |
||
|
|
||
| ## Quests | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| # [M] JavaScript moq-transport datagrams | ||
|
|
||
| ## Goal | ||
|
|
||
| `@moq/net` sends and receives datagrams over moq-transport as | ||
| `OBJECT_DATAGRAM`, matching Rust: one Object at ID 0 is a single-frame group | ||
| whose Group ID is the sequence. A JavaScript publisher's datagrams reach a Rust | ||
| subscriber, and a Rust publisher's reach a JavaScript one. | ||
|
|
||
| ## Plan | ||
|
|
||
| Port `rs/moq-net/src/ietf/datagram.rs` and the session's send and receive | ||
| loops. Decode every draft's Type flags, drop what the model cannot carry the | ||
| same way Rust does, and close the session on a malformed Type. | ||
|
|
||
| The integration test `ietf does not deliver datagrams` flips to delivery on | ||
| every supported draft, and `just test interop --all` covers both directions. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Datagram range](/quest/m1/datagram-range.md) - the subscribe range for datagrams, settled on both protocols |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Although this page and the wrapper READMEs now advertise moq-transport datagrams, the generated binding API documentation remains contradictory:
rs/moq-ffi/src/consumer.rs:633-636explicitly says they are unavailable over IETF moq-transport, whilers/libmoq/src/api.rs:3617-3618still documents only moq-lite. Users reading the exported API rather than the README will incorrectly treat the new path as unsupported, so update both source comments alongside this capability change. (Written by GPT-5.6 Sol)AGENTS.md reference: AGENTS.md:L27-L27
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 8632aeb: the moq-ffi
recv_datagramand libmoqmoq_consume_datagramscomments now include moq-transport, and the Dart bindings are regenerated for the new checksum.(Written by Claude Opus 5.5)