Skip to content

Commit

Permalink
Clarify behavior of STOP_SENDING and RESET_STREAM
Browse files Browse the repository at this point in the history
  • Loading branch information
mengelbart committed Jul 4, 2023
1 parent 1e00eec commit 363a296
Showing 1 changed file with 27 additions and 22 deletions.
49 changes: 27 additions & 22 deletions draft-ietf-avtcore-rtp-over-quic.md
Original file line number Diff line number Diff line change
Expand Up @@ -436,9 +436,12 @@ of flows.

To send RTP/RTCP packets over QUIC streams, a sender MUST open a new
unidirectional QUIC stream. Streams are unidirectional because there is no
synchronous relationship between sent and received RTP/RTCP packets. A sender
MAY open new QUIC streams for different packets using the same flow identifier,
for example, to avoid head-of-line blocking.
synchronous relationship between sent and received RTP/RTCP packets. A RoQ
sender MAY open new QUIC streams for different packets using the same flow
identifier, for example, to avoid head-of-line blocking. A RoQ receiver MUST be
able to receive packets of a single RTP/RTCP stream on multiple QUIC streams.

### Stream Encapsulation

{{fig-stream-payload}} shows the encapsulation format for RoQ Streams.

Expand Down Expand Up @@ -483,28 +486,28 @@ RTP/RTCP Packet:

: The RTP/RTCP packet to transmit.

If a sender knows that a packet, which was not yet successfully and completely
transmitted, is no longer needed, the sender MAY close the stream by sending a
RESET\_STREAM frame.

QUIC allows an application to abort reading the stream and specify an error code
{{Section 3.5 of !RFC9000}}. An RTP receiver can signal this to the RTP sender
by sending a QUIC STOP\_SENDING frame, which is exported to the RTP sender
through the ROQ API, as described in {{api-considerations}}. The RTP-sender
SHOULD not interpret the reception of STOP\_SENDING as an indication that the
RTP receiver lost interest in the media stream as a whole, but rather that a
part of the media stream was not received timely. In this case, the late data
could also delay the following media frames due to head-of-line blocking, which
the sender can avoid by transmitting new media frames on new QUIC streams. A
sender that receives STOP\_SENDING MUST NOT retransmit any media frames already
sent on the QUIC stream, on which it received the STOP\_SENDING, on a new QUIC
stream. An RTP sender SHOULD instead continue to send media frames on new QUIC
streams starting with the first frame that was not transmitted on the stream
that received STOP\_SENDING.
### RESET\_STREAM and STOP\_SENDING

QUIC uses RESET\_STREAM and STOP\_SENDING frames to terminate the sending part
of a stream and to request termination of an incoming stream by the sending
peer respectively.

A RoQ sender MAY use RESET\_STREAM if it knows that a packet, which was not yet
successfully and completely transmitted, is no longer needed.

A RoQ receiver that is no longer interested in reading a certain partition of
the media stream MAY signal this to the sending peer using a STOP\_SENDING
frame.

When a RoQ sender receives a STOP\_SENDING frame, the RoQ sender MUST open one
or more new QUIC streams to send new media frames. Any media frame that has
already been sent on the QUIC stream that received the STOP\_SENDING frame, MUST
NOT be sent again on the new QUIC stream(s).

Note that an RTP receiver cannot request a reset of only a particular media
frame because the sending QUIC implementation might already have sent data for
the following frame on the same stream. In that case, STOP\_SENDING might lead
the following frame on the same stream. In that case, STOP\_SENDING and the
following RESET\_STREAM would also drop the following media frame and thus lead
to unintentionally skipping one or more frames.

> **Editor's note:** A receiver cannot cancel a certain frame but still receive
Expand All @@ -525,6 +528,8 @@ is not closed with a RESET\_STREAM frame. No retransmission has to be
implemented by the application since QUIC frames lost in transit are
retransmitted by QUIC.

### Flow control and MAX\_STREAMS

Opening new streams for new packets MAY implicitly limit the number of packets
concurrently in transit because the QUIC receiver provides an upper bound of
parallel streams, which it can update using QUIC MAX\_STREAMS frames. The number
Expand Down

0 comments on commit 363a296

Please sign in to comment.