Skip to content

Commit 559b3e5

Browse files
committed
Quick proof-reading.
1 parent c8e4a99 commit 559b3e5

2 files changed

Lines changed: 43 additions & 51 deletions

File tree

draft-lcurley-moq-transfork.md

Lines changed: 29 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ informative:
2424

2525
--- abstract
2626

27-
MoqTransfork is designed to serve live tracks to an unbounded number of viewers with different latency and quality targets: the entire spectrum between real-time and VOD.
27+
MoqTransfork is designed to serve live tracks over a CDN to viewers with varying latency and quality targets: the entire spectrum between real-time and VOD.
2828
MoqTransfork itself is a media agnostic transport, allowing relays and CDNs to forward the most important content under degraded networks without knowledge of codecs, containers, or even if the content is fully encrypted.
2929
Higher level protocols specify how to use MoqTransfork to encode and deliver video, audio, messages, or any form of live content.
3030

@@ -61,12 +61,12 @@ The appendix contains a list of high level differences between MoqTransport and
6161
MoqTransfork consists of:
6262

6363
- **Session**: An established connection between a client and server used to transmit any number of Tracks by path.
64-
- **Track**: An append-only series of Groups, each of which can be delivered and decoded independently.
65-
- **Group**: An append-only series of Frames, each of which are delivered and decoded in order
66-
- **Frame**: A sized payload of bytes, intended to represent a single moment in time.
64+
- **Track**: An series of Groups, each of which is delivered and decoded *independently*.
65+
- **Group**: An series of Frames, each of which is delivered and decoded *in orde.
66+
- **Frame**: A sized payload of bytes representing a single moment in time.
6767

6868
The application determines how to split data into tracks, groups, and frames.
69-
MoqTransfork only is responsible for the networking and deduplication by utilizing rules encoded in headers.
69+
MoqTransfork is responsible for the caching and delivery by utilizing rules encoded in headers.
7070
This provides robust and generic one-to-many transmission, even for latency sensitive applications.
7171

7272
## Session
@@ -121,7 +121,7 @@ A media protocol can only be considered "live" if it can handle degraded network
121121
MoqTransfork handles this by prioritizing the most important media while the remainder is starved.
122122

123123
The importance of each track/group/frame is signaled by the subscriber and the publisher will attempt to obey it.
124-
This is done via the Track Priority and the Group Order.
124+
Subscribers signal importance using Track Priority and Group Order.
125125
Any data that is excessively starved may be dropped (by either endpoint) rather than block the live stream.
126126

127127
A publisher that serves multiple sessions, commonly a relay, should prioritize on a per-session basis.
@@ -289,7 +289,7 @@ A future version of this draft may utilize reliable reset instead.
289289
This section covers the encoding of each message.
290290

291291
## STREAM_TYPE
292-
All streams start with a short header indiciating the stream type.
292+
All streams start with a short header indicating the stream type.
293293

294294
~~~
295295
STREAM_TYPE {
@@ -345,7 +345,7 @@ A value of 0 indicates that this information is not available.
345345

346346

347347
## ANNOUNCE_PLEASE
348-
A subscriber sends an ANNOUNCE_PLEASE message to indicate it wants any cooresponding ANNOUNCE messages.
348+
A subscriber sends an ANNOUNCE_PLEASE message to indicate it wants any corresponding ANNOUNCE messages.
349349

350350
~~~
351351
ANNOUNCE_PLEASE Message {
@@ -365,7 +365,7 @@ Otherwise, the publisher SHOULD respond with an ANNOUNCE message for any matchin
365365

366366
## ANNOUNCE
367367
A publisher sends an ANNOUNCE message to advertise a track.
368-
Only the suffix is encoded on the wire, the full path is constructed by prepending the prefix from the cooresponding ANNOUNCE_INTEREST.
368+
Only the suffix is encoded on the wire, the full path is constructed by prepending the prefix from the corresponding ANNOUNCE_INTEREST.
369369

370370
~~~
371371
ANNOUNCE Message {
@@ -640,45 +640,26 @@ Datagram and native QUIC support may be re-added in a future draft.
640640
Based on moq-transport-03.
641641
The significant changes have been broken into sections.
642642

643-
### Bikeshedding
644-
- Renamed Track Namespace to Broadcast
645-
- Renamed Object to Frame
646-
647-
### Stream per Group
648-
The MoQ WG couldn't agree on how to utilize QUIC streams, so the compromise was to support multiple modes and let the application choose.
649-
This is a headache for too many reasons to list.
650-
MoqTransfork only "supports" a stream per group.
651-
652-
### Subscriber's Choice
653-
MoqTransfork moves most decision making to the subscriber, so a single publisher can support multiple diverse subscribers.
654-
The publisher provides a default value to resolve conflicts when deduplicating.
655-
656-
### Control Streams
657-
Transactions like Announce and Subscribe use their own control stream, inheriting the stream state machine for error handling.
658-
659-
This replaces excessive message types in MoqTransport:
660-
- Removed ANNOUNCE_ERROR
661-
- Removed ANNOUNCE_DONE
662-
- Removed UNANNOUNCE
663-
- Removed SUBSCRIBE_OK
664-
- Removed SUBSCRIBE_ERROR
665-
- Removed SUBSCRIBE_DONE
666-
- Removed UNSUBSCRIBE
667-
668-
### Unambiguous Delivery
669-
With MoqTransfork, the subscriber knows if a group/frame will be delivered or was dropped.
670-
671-
- Group Sequences are sequential
672-
- All sequences within the SUBSCRIBE range are delivered or dropped.
673-
- SUBSCRIBE_GAP when a group is dropped.
674-
675-
### Fetch via Offset
676-
A reconnecting subscriber can request the retransmission of a group/stream at a given byte offset.
677-
Resumption in MoqTransport is more complicated and can only occur at object/group boundaries.
678-
679-
### Track INFO
680-
Added a mechanism to request information about the current track state.
681-
643+
- Bikeshedding
644+
- Renamed Track Namespace to Broadcast
645+
- Renamed Object to Frame
646+
- Each unidirectional stream contains a single group.
647+
- Removed stream per track.
648+
- Removed stream per object.
649+
- Subscriber chooses track priority and group order.
650+
- Bidirectional control stream per ANNOUNCE/SUBSCRIBE/FETCH/INFO.
651+
- Removed ANNOUNCE_ERROR
652+
- Removed ANNOUNCE_DONE
653+
- Removed UNANNOUNCE
654+
- Removed SUBSCRIBE_OK
655+
- Removed SUBSCRIBE_ERROR
656+
- Removed SUBSCRIBE_DONE
657+
- Removed UNSUBSCRIBE
658+
- Groups IDs are sequential.
659+
- All sequences are explicitly delivered.
660+
- (unreliable) GROUP for each sequence.
661+
- Or (reliable) SUBSCRIBE_GAP when a stream is reset.
662+
- Fetch Group via offset
682663
- Added INFO_PLEASE and INFO
683664
- Replaced SUBSCRIBE_OK with INFO
684665

draft-lcurley-moq-use-cases.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ informative:
2121

2222
--- abstract
2323

24-
MoQ is designed to serve live tracks to an unbounded number of viewers with different latency and quality targets: the entire spectrum between real-time and VOD.
25-
However, it's difficult to understand how to use the transport given the layering and complexitity of live media delivery.
24+
MoQ is designed to serve live tracks over a CDN to viewers with varying latency and quality targets: the entire spectrum between real-time and VOD.
25+
However, it's difficult to understand how to use the transport given the layering and complexity of live media delivery.
2626
This document outlines how an application could use MoQ to deliver video, audio, and metadata in a variety of scenarios.
2727

2828
--- middle
@@ -31,6 +31,17 @@ This document outlines how an application could use MoQ to deliver video, audio,
3131
{::boilerplate bcp14-tagged}
3232

3333

34+
# Introduction
35+
Media over QUIC is still in the concept phase; a loose collection of ideas and drafts on how to utilize QUIC for live media delivery.
36+
It's difficult to grasp how to utilize the various layers:
37+
38+
- QUIC: A transport layer that provides reliable, ordered, and secure streams.
39+
- MoqTransfork: A pub/sub layer that provides caching and fanout.
40+
- MoqKarp: A proposed media layer on top of MoqTransfork that deals with encoding and containers.
41+
- Application: Your application that utilizes any of the above layers.
42+
43+
This document briefly overviews how live media works and how you could use MoQ to deliver it.
44+
3445
# Video
3546
Video encoding involves complex dependencies between frames/slices.
3647
The terminology in this section stems from H.264 but is applicable to most modern codecs.
@@ -94,7 +105,7 @@ While not explicitly stated, I believe the complexity in MoqTransport stems almo
94105

95106
In theory, transmitting enhancement layers as tracks like mentioned above could introduce head-of-line blocking depending on the encoding.
96107
This would occur when enhancement layers are not self-referential, a rare configuration which also hurts the compression ratio.
97-
And in practice, there's no discernable user impact given the disproportionate size difference between base and enhancement layers.
108+
And in practice, there's no discernible user impact given the disproportionate size difference between base and enhancement layers.
98109

99110
The ability to drop individual non-reference frames in the middle of a group is an explicit non-goal for MoqTransfork.
100111

0 commit comments

Comments
 (0)