Skip to content

Commit 82b494d

Browse files
author
ID Bot
committed
Script updating gh-pages from dfeff06. [ci skip]
1 parent 9da029b commit 82b494d

12 files changed

Lines changed: 11922 additions & 0 deletions

draft-lcurley-moq-lite-03/draft-lcurley-compressed-mp4.html

Lines changed: 1829 additions & 0 deletions
Large diffs are not rendered by default.

draft-lcurley-moq-lite-03/draft-lcurley-compressed-mp4.txt

Lines changed: 503 additions & 0 deletions
Large diffs are not rendered by default.

draft-lcurley-moq-lite-03/draft-lcurley-moq-hang.html

Lines changed: 1492 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
2+
3+
4+
5+
moq L. Curley
6+
Internet-Draft 17 March 2026
7+
Intended status: Informational
8+
Expires: 18 September 2026
9+
10+
11+
Media over QUIC - Hang
12+
draft-lcurley-moq-hang-latest
13+
14+
Abstract
15+
16+
Hang is a real-time conferencing protocol built on top of moq-lite.
17+
A room consists of multiple participants who publish media tracks.
18+
All updates are live, such as a change in participants or media
19+
tracks.
20+
21+
Discussion Venues
22+
23+
This note is to be removed before publishing as an RFC.
24+
25+
Discussion of this document takes place on the Media Over QUIC
26+
Working Group mailing list (moq@ietf.org), which is archived at
27+
https://mailarchive.ietf.org/arch/browse/moq/.
28+
29+
Source for this draft and an issue tracker can be found at
30+
https://github.com/kixelated/moq-drafts.
31+
32+
Status of This Memo
33+
34+
This Internet-Draft is submitted in full conformance with the
35+
provisions of BCP 78 and BCP 79.
36+
37+
Internet-Drafts are working documents of the Internet Engineering
38+
Task Force (IETF). Note that other groups may also distribute
39+
working documents as Internet-Drafts. The list of current Internet-
40+
Drafts is at https://datatracker.ietf.org/drafts/current/.
41+
42+
Internet-Drafts are draft documents valid for a maximum of six months
43+
and may be updated, replaced, or obsoleted by other documents at any
44+
time. It is inappropriate to use Internet-Drafts as reference
45+
material or to cite them other than as "work in progress."
46+
47+
This Internet-Draft will expire on 18 September 2026.
48+
49+
Copyright Notice
50+
51+
Copyright (c) 2026 IETF Trust and the persons identified as the
52+
document authors. All rights reserved.
53+
54+
This document is subject to BCP 78 and the IETF Trust's Legal
55+
Provisions Relating to IETF Documents (https://trustee.ietf.org/
56+
license-info) in effect on the date of publication of this document.
57+
Please review these documents carefully, as they describe your rights
58+
and restrictions with respect to this document. Code Components
59+
extracted from this document must include Revised BSD License text as
60+
described in Section 4.e of the Trust Legal Provisions and are
61+
provided without warranty as described in the Revised BSD License.
62+
63+
Table of Contents
64+
65+
1. Conventions and Definitions
66+
2. Terminology
67+
3. Discovery
68+
4. Catalog
69+
4.1. Root
70+
4.2. Video
71+
4.3. Audio
72+
5. Container
73+
6. Security Considerations
74+
7. IANA Considerations
75+
8. Normative References
76+
Acknowledgments
77+
Author's Address
78+
79+
1. Conventions and Definitions
80+
81+
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
82+
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
83+
"OPTIONAL" in this document are to be interpreted as described in
84+
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
85+
capitals, as shown here.
86+
87+
2. Terminology
88+
89+
Hang is built on top of moq-lite [moql] and uses much of the same
90+
terminology. A quick recap:
91+
92+
* *Broadcast*: A collection of Tracks from a single publisher.
93+
94+
* *Track*: An series of Groups, each of which can be delivered and
95+
decoded _out-of-order_.
96+
97+
* *Group*: An series of Frames, each of which must be delivered and
98+
decoded _in-order_.
99+
100+
* *Frame*: A sized payload of bytes representing a single moment in
101+
time.
102+
103+
Hang introduces additional terminology:
104+
105+
* *Room*: A collection of participants, publishing under a common
106+
prefix.
107+
108+
* *Participant*: A moq-lite broadcaster that may produce any number
109+
of media tracks.
110+
111+
* *Catalog*: A JSON document that describes each available media
112+
track, supporting live updates.
113+
114+
* *Container*: A tiny header in front of each media payload
115+
containing the timestamp.
116+
117+
3. Discovery
118+
119+
The first requirement for a real-time conferencing application is to
120+
discover other participants in the same room. Hang does this using
121+
moq-lite's ANNOUNCE capabilities.
122+
123+
A room consists of a path. Any participants within the room MUST
124+
publish a broadcast with the room path as a prefix which SHOULD end
125+
with the .hang suffix.
126+
127+
For example:
128+
129+
/room123/alice.hang
130+
/room123/bob.hang
131+
/room456/zoe.hang
132+
133+
A participant issues an ANNOUNCE_PLEASE message to discover any other
134+
participants in the same room. The server (relay) will then respond
135+
with an ANNOUNCE message for any matching broadcasts, including their
136+
own.
137+
138+
For example:
139+
140+
ANNOUNCE_PLEASE prefix=/room/
141+
ANNOUNCE suffix=alice.hang active=true
142+
ANNOUNCE suffix=bob.hang active=true
143+
144+
If a publisher no longer wants to participant, or is disconnected
145+
somehow, their presence will be unannounced. Publishers and
146+
subscribers SHOULD terminate any subscriptions once a participant is
147+
unannounced.
148+
149+
ANNOUNCE suffix=alice.hang active=false
150+
151+
4. Catalog
152+
153+
The catalog describes the available media tracks for a single
154+
participant. It's a JSON document that extends the the W3C WebCodecs
155+
specification.
156+
157+
The catalog is published as a catalog.json track within the broadcast
158+
so it can be updated live as the participant's media tracks change.
159+
A participant MAY forgo publishing a catalog if it does not wish to
160+
publish any media tracks now and in the future.
161+
162+
The catalog track consists of multiple groups, one for each update.
163+
Each group contains a single frame with UTF-8 JSON.
164+
165+
A publisher MUST NOT write multiple frames to a group until a future
166+
specification includes a delta-encoding mechanism (via JSON Patch
167+
most likely).
168+
169+
4.1. Root
170+
171+
The root of the catalog is a JSON document with the following schema:
172+
173+
type Catalog = {
174+
"audio": AudioSchema | undefined,
175+
"video": VideoSchema | undefined,
176+
// ... any custom fields ...
177+
}
178+
179+
Additional fields MAY be added based on the application. The catalog
180+
SHOULD be mostly static, delegating any dynamic content to other
181+
tracks.
182+
183+
For example, a "chat" section should include the name of a chat
184+
track, not individual chat messages. This way catalog updates are
185+
rare and a client MAY choose to not subscribe.
186+
187+
This specification currently only defines audio and video tracks.
188+
189+
4.2. Video
190+
191+
A video track contains the necessary information to decode a video
192+
stream.
193+
194+
type VideoSchema = {
195+
"renditions": Map<TrackName, VideoDecoderConfig>,
196+
"priority": u8,
197+
"display": {
198+
"width": number,
199+
"height": number,
200+
} | undefined,
201+
"rotation": number | undefined,
202+
"flip": boolean | undefined,
203+
}
204+
205+
The renditions field contains a map of track names to video decoder
206+
configurations. See the WebCodecs specification
207+
(https://www.w3.org/TR/webcodecs/#video-decoder-config) for specifics
208+
and registered codecs. Any Uint8Array fields are hex-encoded as a
209+
string.
210+
211+
For example:
212+
213+
{
214+
"renditions": {
215+
"720p": {
216+
"codec": "avc1.64001f",
217+
"codedWidth": 1280,
218+
"codedHeight": 720,
219+
"bitrate": 6000000,
220+
"framerate": 30.0
221+
},
222+
"480p": {
223+
"codec": "avc1.64001e",
224+
"codedWidth": 848,
225+
"codedHeight": 480,
226+
"bitrate": 2000000,
227+
"framerate": 30.0
228+
}
229+
},
230+
"priority": 2,
231+
"display": {
232+
"width": 1280,
233+
"height": 720
234+
},
235+
"rotation": 0,
236+
"flip": false,
237+
}
238+
239+
4.3. Audio
240+
241+
An audio track contains the necessary information to decode an audio
242+
stream.
243+
244+
type AudioSchema = {
245+
"renditions": Map<TrackName, AudioDecoderConfig>,
246+
"priority": u8,
247+
}
248+
249+
The renditions field contains a map of track names to audio decoder
250+
configurations. See the WebCodecs specification
251+
(https://www.w3.org/TR/webcodecs/#audio-decoder-config) for specifics
252+
and registered codecs. Any Uint8Array fields are hex-encoded as a
253+
string.
254+
255+
For example:
256+
257+
{
258+
"renditions": {
259+
"stereo": {
260+
"codec": "opus",
261+
"sampleRate": 48000,
262+
"numberOfChannels": 2,
263+
"bitrate": 128000
264+
},
265+
"mono": {
266+
"codec": "opus",
267+
"sampleRate": 48000,
268+
"numberOfChannels": 1,
269+
"bitrate": 64000
270+
}
271+
},
272+
"priority": 1,
273+
}
274+
275+
5. Container
276+
277+
Audio and video tracks use a lightweight container to encapsulate the
278+
media payload.
279+
280+
Each moq-lite group MUST start with a keyframe. If codec does not
281+
support delta frames (ex. audio), then a group MAY consist of
282+
multiple keyframes. Otherwise, a group MUST consist of a single
283+
keyframe followed by zero or more delta frames.
284+
285+
Each frame starts with a timestamp, a QUIC variable-length integer
286+
(62-bit max) encoded in microseconds. The remainder of the payload
287+
is codec specific; see the WebCodecs specification for specifics.
288+
289+
For example, h.264 with no description field would be annex.b
290+
encoded, while h.264 with a description field would be AVCC encoded.
291+
292+
6. Security Considerations
293+
294+
TODO Security
295+
296+
7. IANA Considerations
297+
298+
This document has no IANA actions.
299+
300+
8. Normative References
301+
302+
[moql] Curley, L., "Media over QUIC - Lite", Work in Progress,
303+
Internet-Draft, draft-lcurley-moq-lite-02, 12 November
304+
2025, <https://datatracker.ietf.org/doc/html/draft-
305+
lcurley-moq-lite-02>.
306+
307+
[moqt] Nandakumar, S., Vasiliev, V., Swett, I., and A. Frindell,
308+
"Media over QUIC Transport", Work in Progress, Internet-
309+
Draft, draft-ietf-moq-transport-17, 2 March 2026,
310+
<https://datatracker.ietf.org/doc/html/draft-ietf-moq-
311+
transport-17>.
312+
313+
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
314+
Requirement Levels", BCP 14, RFC 2119,
315+
DOI 10.17487/RFC2119, March 1997,
316+
<https://www.rfc-editor.org/rfc/rfc2119>.
317+
318+
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
319+
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
320+
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
321+
322+
Acknowledgments
323+
324+
TODO acknowledge.
325+
326+
Author's Address
327+
328+
Luke Curley
329+
Email: kixelated@gmail.com

0 commit comments

Comments
 (0)