Quicr / quicr-protocol-spec

Media of QuicR Protocol
3 stars 0 forks source link

Mapping of media to QUIC Streams/Datagrams - Rush/QuicR/Warp #4

Open huitema opened 2 years ago

huitema commented 2 years ago

The current draft only considers two encodings, "reliable" and "datagram". Early work on MOQ shows interest for a "multi stream" structure, in which a media stream is published as a series of QUIC streams, each containing a group of objects -- this structure was pioneered in the RUSH implementation. In case of congestion, the multi-stream structure allows clients or server to drop old "group of objects" and either jump on the very last one, or maybe adopt a sampling strategy in which some group of objects are completely transmitted and others are completely ignored. This seems superior to simple streams, in which congestion will cause increased delays, and also superior to datagrams, in which congestion will cause random losses.

The QUICR protocol could easily be adapted to support RUSH like encodings. The consumer subscribes to a media stream, and then the server opens a set of QUIC streams as group of objects become available. On each of those QUIC streams, the server sends first a "stream header" explaining the origin, name, and position of the Group of Objects in the overall media stream, followed by a set of media objects in the group. Effectively, the main requirement is to define this mapping and the stream header.

suhasHere commented 2 years ago

QuicR is multistream be default, Each group of object belongs to a stream.

On a diff note, we need to explain what does that mean when we use Datagrams.

huitema commented 2 years ago

Yes, there are multiple streams, such as one for Alice and one for Bob. But the "Rush" bit is a bit different. The sequence would be something like:

This is particularly interesting in case of congestion. We could see something like:

Or alternately:

suhasHere commented 2 years ago

Yes, there are multiple streams, such as one for Alice and one for Bob. But the "Rush" bit is a bit different. The sequence would be something like:

I need to clarify on this, QuicR is one stream per Group of Objects and not per participant. May be it's not clearly said that way, that's a good one to clarify. In that way QuicR GoB and Warp Segments are closely related.

RUSH supports one stream per frame but it can be easily extended to GoB

huitema commented 2 years ago

Great. So the mapping from GoO to QUIC stream is obvious. We should definitely add that to the prototype. What is the relation between a GoO and the names in the headers for SUBSCRIBE and PUBLISH in the draft?

huitema commented 2 years ago

I think if we standardize on Rush/Warp for the stream mapping, then we can do something parallel for the datagram mapping.

That means evolving the prototype a little:

TimEvens commented 1 year ago

Any updates on this?