You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: draft-lcurley-moq-transfork.md
+12-12Lines changed: 12 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,11 +65,11 @@ A Group is always an ordered set of bytes, although it may be served via a QUIC
65
65
This simplification is able to support all of the documented use-cases; see the Appendix.
66
66
67
67
## Prioritization
68
-
Prioritization is important for low-latency, ensuring the publisher sends the most important media first during congetsion.
68
+
Prioritization is important for low-latency, ensuring the publisher sends the most important media first during congestion.
69
69
70
-
MoqTransport uses producer choosen priorities via send order.
70
+
MoqTransport uses producer chosen priorities via send order.
71
71
As the original proponent of this approach, I'm ashamed to admit that I was wrong.
72
-
Reality is more naunced; both the subscriber and publisher need to work together.
72
+
Reality is more nuanced; both the subscriber and publisher need to work together.
73
73
74
74
MoqTransfork instead delegates the priority decision for the last mile to the subscriber.
75
75
This is done via a `Track Priority` and `Group Order` field within `SUBSCRIBE`.
@@ -214,7 +214,7 @@ Streams may only be created by the indicated role, otherwise the session MUST be
214
214
The Session stream contains all messages that are session level.
215
215
216
216
The client MUST open a single Session Stream immediately after establishing the QUIC/WebTransport session.
217
-
The client sneds a SESSION_CLIENT message and the server replies with a SESSION_SERVER message.
217
+
The client sends a SESSION_CLIENT message and the server replies with a SESSION_SERVER message.
218
218
219
219
Afterwards, both endpoints MAY send SESSION_INFO messages containing information about the session.
220
220
The endpoint SHOULD send an updated SESSION_INFO message, such as after a significant change in the session bitrate.
@@ -578,7 +578,7 @@ This truncates the Group and a subscriber can issue a FETCH if it wants to resum
578
578
### Layers
579
579
An advanced application can subdivide a GoP into layers.
580
580
581
-
The most comprehesive way to do this is with Scalable Video Coding (SVC).
581
+
The most comprehensive way to do this is with Scalable Video Coding (SVC).
582
582
There is a base layer and one or more enhancement layers that depend on lower layers.
583
583
For example, a 4K stream could be broken into 4K, 1080p, and 360p (base) layers.
584
584
However, SVC has limited support and is complex to encode.
@@ -590,7 +590,7 @@ This is effectively a custom SVC scheme, however it's limited to time (can't cha
590
590
591
591
The purpose of these layers is to support degrading the quality of the broadcast.
592
592
A subscriber could limit bandwidth usage by choose to only receive the base layer or a subset of the enhancements layers.
593
-
During congestion, the base layer can be priortizied while the enhancement layers can be deprioritized/dropped.
593
+
During congestion, the base layer can be prioritized while the enhancement layers can be deprioritized/dropped.
594
594
However, the cost is a small increase in bitrate (10%) as limiting potential references can only hurt the compression ratio.
595
595
596
596
When using MoqTransfork, each layer is delivered as a separate Track.
@@ -612,7 +612,7 @@ You can configure the encoder to produce non-reference frames but the result is
612
612
But the main problem is the complexity introduced into the transport, as each frame must be transmitted as an individual QUIC stream based on a dependency graph that is not available to relays, and difficult for both broadcasters and viewers to parse.
613
613
614
614
The ability to drop individual non-reference frames in the middle of a group is an explicit non-goal for MoqTransfork.
615
-
An alternative is to put them into a seperate layer, such that the tail of the layer could be dropped.
615
+
An alternative is to put them into a separate layer, such that the tail of the layer could be dropped.
616
616
617
617
618
618
## Audio
@@ -690,8 +690,8 @@ However, this only applies to the first hop and won't be applicable when relays
690
690
## Latency
691
691
One explicit goal of MoqTransfork is to support multiple latency targets.
692
692
693
-
This is accomplished by using the same Tracks and Group for all viewers, but sliiightly changing the behavior based on the subscription.
694
-
This is driven by the subscriber, allowing them to choose the tradeoff between latency and reliability.
693
+
This is accomplished by using the same Tracks and Group for all viewers, but slightly changing the behavior based on the subscription.
694
+
This is driven by the subscriber, allowing them to choose the trade-off between latency and reliability.
695
695
This may be done on the fly via SUBSCRIBE_UPDATE, for example if a high-latency viewer wishes to join the stage and suddenly needs real-time latency.
696
696
697
697
The below examples assume one audio and one video track.
@@ -702,7 +702,7 @@ Real-time latency is accomplished by prioritizing the most important media durin
702
702
703
703
This is slightly different from other media protocols which instead opt to drop packets.
704
704
The end result is similar, but prioritization means utilizing all available bandwidth as determined by the congestion controller.
705
-
A subscriber or publisher can reset groups to avoid wasiting bandwidth on old data.
705
+
A subscriber or publisher can reset groups to avoid wasting bandwidth on old data.
706
706
707
707
A real-time viewer could issue:
708
708
@@ -791,7 +791,7 @@ A DVR player does the same thing but can automatically support joining the live
791
791
It's perfectly valid to specify a `end` in the future and it will behave like reliable live viewer once it reaches the live playhead.
792
792
793
793
Alternatively, a DVR player could prefetch the live playhead by issuing a parallel SUBSCRIBE at a lower priority.
794
-
This would allow playback to immediately continue after clicking the "Go Live" button, cancelling or deprioritizing the VOD subscription.
794
+
This would allow playback to immediately continue after clicking the "Go Live" button, canceling or deprioritizing the VOD subscription.
0 commit comments