Internet DRAFT - draft-jennings-moq-quicr-proto
draft-jennings-moq-quicr-proto
Network Working Group C. Jennings
Internet-Draft cisco
Intended status: Informational S. Nandakumar
Expires: 12 January 2023 Cisco
C. Huitema
Private Octopus Inc.
11 July 2022
QuicR - Media Delivery Protocol over QUIC
draft-jennings-moq-quicr-proto-01
Abstract
Recently new use cases have emerged requiring higher scalability of
media delivery for interactive realtime applications and much lower
latency for streaming applications and a combination thereof.
draft-jennings-moq-arch specifies architectural aspects of QuicR, a
media delivery protocol based on publish/subscribe metaphor and Relay
based delivery tree, that enables a wide range of realtime
applications with different resiliency and latency needs.
This specification defines the protocol aspects of the QuicR media
delivery architecture.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 12 January 2023.
Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved.
Jennings, et al. Expires 12 January 2023 [Page 1]
Internet-Draft QuicR Media July 2022
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Contributing . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.1. Typical Publish/Subscribe Message Exchange . . . . . . . 5
4.2. Origin Server . . . . . . . . . . . . . . . . . . . . . . 7
4.3. Relays . . . . . . . . . . . . . . . . . . . . . . . . . 7
5. Names and Named Objects . . . . . . . . . . . . . . . . . . . 8
5.1. Named Objects . . . . . . . . . . . . . . . . . . . . . . 8
5.2. Wildcarding with Names . . . . . . . . . . . . . . . . . 9
6. QuicR Manifest . . . . . . . . . . . . . . . . . . . . . . . 10
6.1. Scope of the manifest . . . . . . . . . . . . . . . . . . 11
7. QuicR Protocol Design . . . . . . . . . . . . . . . . . . . . 13
7.1. Control Channel . . . . . . . . . . . . . . . . . . . . . 13
7.2. QuicR Control Messages . . . . . . . . . . . . . . . . . 13
7.2.1. Subscribe Message . . . . . . . . . . . . . . . . . . 14
7.2.2. SUBSCRIBE_REPLY Message . . . . . . . . . . . . . . . 15
7.2.3. PUBLISH_INTENT Message. . . . . . . . . . . . . . . . 16
7.2.4. Start Point Message . . . . . . . . . . . . . . . . . 17
7.2.5. Fragment Message . . . . . . . . . . . . . . . . . . 18
7.2.6. Fin Message . . . . . . . . . . . . . . . . . . . . . 18
7.2.7. SUBSCRIBE_CANCEL Message . . . . . . . . . . . . . . 19
7.2.8. RELAY_REDIRECT MESSAGE . . . . . . . . . . . . . . . 19
7.3. Sending Media as Datagrams . . . . . . . . . . . . . . . 19
7.3.1. Datagram Header . . . . . . . . . . . . . . . . . . . 19
8. Relay Function and Relays . . . . . . . . . . . . . . . . . . 21
8.1. Cache and Relaying . . . . . . . . . . . . . . . . . . . 21
8.2. Out of order relaying . . . . . . . . . . . . . . . . . . 22
8.3. Relay or Cache or Drop Decisions . . . . . . . . . . . . 23
8.4. Cache cleanup . . . . . . . . . . . . . . . . . . . . . . 23
8.5. Relay fail over . . . . . . . . . . . . . . . . . . . . . 23
8.6. Relay Discovery . . . . . . . . . . . . . . . . . . . . . 23
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 24
Appendix B. TODO Items . . . . . . . . . . . . . . . . . . . . . 24
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24
Jennings, et al. Expires 12 January 2023 [Page 2]
Internet-Draft QuicR Media July 2022
1. Introduction
This specification defines QuicR, a publish and subscribe based media
delivery protocol over QUIC.
Recently new use cases have emerged requiring higher scalability of
media delivery for interactive realtime applications and much lower
latency for streaming applications and a combination thereof.
On one side are use cases such as normal web conferences wanting to
distribute out to millions of viewers and allow viewers to instantly
move to being a presenter (a.k.a active participant). On the other
side are use cases such as streaming a soccer game to millions of
people including people in the stadium watching the game live.
Viewers watching an e-sports event want to be able to comment with
low latency to ensure the interactivity aspects between what
different viewers are preserved. All of these use cases push towards
latencies that are in the order of 100ms over the natural latency the
network causes.
The architecture for this specification is outlined in draft-
jennings-moq-arch, where the principal idea is client endpoints
publish and subscribe to named objects that is sent to, and received
from relays, that forms an overlay delivery network similar to what
CDN provides today.
The architecture specification, draft-jennings-moq-arch, is a
perquisite to read this specification.
This specification defines the protocol specifics of the QuicR Media
Delivery Architecture.
2. Contributing
All significant discussion of development of this protocol is in the
GitHub issue tracker at: "https://github.com/Quicr/quicr-protocol-
spec"
3. Terminology
* Relay Function: Functionality of the QuicR architecture, that
implements store and forward behavior at the minimum. Such a
function typically receives subscriptions and publishes data to
the other endpoints that have subscribed to the named data. Such
functions may cache the data as well for optimizing the delivery
experience.
Jennings, et al. Expires 12 January 2023 [Page 3]
Internet-Draft QuicR Media July 2022
* Relay: Server component (physical/logical) in the cloud that
implements the Relay Function.
* Publisher: An endpoint that sends named objects to a Relay. [ also
referred to as producer of the named object]
* Subscriber: An endpoint that subscribes and receives the named
objects. Relays can act as subscribers to other relays.
Subscribers can also be referred to as consumers.
* Client/QuicR Client: An endpoint that acts as a Publisher,
Subscriber, or both. May also implement a Relay Function in
certain contexts.
* Named Object: Application level chunk of Data that has a unique
Name, a limited lifetime, priority and is transported via the
protocol defined in this specification.
* Origin server: Component managing/authoring the names scoped under
a domain for a specific application and is responsible for
establishing trust between clients and relays for delivering
media. Origin servers MAY implement other QuicR functions, such
as Relay function, as necessary.
4. Overview
At a high level, entities within QuicR architecture publish named
media objects that are end-to-end encrypted and consume media by
subscribing to the named objects. The published data carry metadata
identifying relative priority, time-to-live and other useful metadata
that's authenticated for components implementing Relay functions to
make drop/forwarding decisions. Entities that perform "Relay"
function provide the store and forward behavior to serve the
subscription requests, they optimize media delivery latencies through
local delivery and improved media quality via local repairs, wherever
applicable. The names (Section 5) used in the QuicR protocol are
scoped and authorized to a domain by the Origin serving that domain.
Jennings, et al. Expires 12 January 2023 [Page 4]
Internet-Draft QuicR Media July 2022
4.1. Typical Publish/Subscribe Message Exchange
A QuicR "Control Channel", based on QUIC streams, is used to setup
properties for media delivery over a "Media Channel" which in turn
can be over QUIC streams or QUIC datagrams. The Control channel is
typically used to setup QuicR names to be used, control media
properties during setup and mid-session, start/stop media delivery
and so on. The media data itself is sent over the "Media Channel"
and carry enough metadata to enable Relays and end-points to make a
forward/drop decisions under congestion, for example. Further
details on the messages can be found in Section 7.
Below is an high-level exchange capturing publish/subscribe flow
between Alice, the publisher and Bob, Carl, the subscribers and the
interactions that occur between Relays on-path and the origin server.
The details on how the trust setup happens between these entities are
skipped, however.
In the exchange depicted following sequence happen
* Alice sets up a control channel (QUIC Stream) to the relay
indicating its intent to publish media with name (video1/1) as the
representation id. It does so by sending "publish_intent".
video1/1 might represent video stream camera-1, quality-id 1 (HD),
for example. QuicR manifests (Section 6) are used to setup and
consume the names being published.
* On receiving the "publish_intent" from Alice, the Relay sets up
another control channel to the authorized Origin server and
forwards Alice's "publish_intent" message.
* Once "publish_intent_ok" is received from the Origin, Relay
forwards the same to Alice to enable publishing the media over the
media channel [QUIC Stream or QUIC Datagram]
* In the meanwhile, Bob and Carl subscribe to receiving media
corresponding to the wildcard'ed name (video1/*). They each send
"subscribe" messages to the Relay on the control channel and the
same is forwarded by the Relay to the Origin. Successful
subscribe responses are sent back to Bob and via the relay. Relay
makes note of Bob and Carl's interest in the name (video1/*). The
details of knowing the name via "manifest" is skipped in the
callflow.
* Eventually, Alice publishes media on the name (video1/1) towards
the relay on the media channel, which could be over QUIC Streams
or QUIC Datagram as chosen by Alice.
Jennings, et al. Expires 12 January 2023 [Page 5]
Internet-Draft QuicR Media July 2022
* Media from Alice gets cached at the relay and is forwarded to the
Origin server (optionally). On noting about interested
subscribers, the media received from Alice is forwarded to both
Bob and Carl from the local cache by the Relay.
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ Alice │ │ Bob │ │ Carl │ │ Relay │ │Origin │
└───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘
│ │ │ │
│ ctrl: pub_intent│ │ │
│ (video1/1) │ │ ctrl:pub_intent │
│ │ │ (video1/1) │
├─────────────┼────────────┼───────────────▶│ │
│ │ │ ├─────────────────▶
│ │ │ │
│ │ │ ctrl:pub_intent_ok
│ ctrl: pub_inten│_ok │
│ │ │◀────────────────┤
◀─────────────┼────────────┼────────────────┤ │
│ │ │ │
│ │ ctrl: subscribe (video1/*) │ │
│ │ │ │
│ ├────────────┼────────────────▶ ctrl: subscribe │
│ │ │ │ (video1/*) │
│ │ │ │─────────────────▶
│ │ │ │ │
│ │ │ │ ctrl: │
│ │ │ │ subscribe_ok │
│ │ │ │ (video1/*) │
│ │ │ │ │
│ │ │ ◀─────────────────┤
│ │ │ │ │
│ │ │─────┐ add bob: │
│ │ ctrl: subscribe_ok │ ◀───┘ video1/* │
│ │ │ │
│ │◀───────────┼────────────────┤ │
│ │ │ │ │
│ │ │ ctrl:sub: │ │
│ │ │ (video1/*) │ │
│ │ │ │ │
│ │ ├────────────────▶ ctrl: subscribe │
│ │ │ │ (video1/*) │
│ │ │ │─────────────────▶
│ │ │ │ ctrl: │
│ │ │ │ subscribe_ok │
│ │ │ │ (video1/*) │
│ │ │ │ │
│ │ │ ◀─────────────────┤
Jennings, et al. Expires 12 January 2023 [Page 6]
Internet-Draft QuicR Media July 2022
│ │ │ │ │
│ │ ├────┐ add carl: │
│ │ ctrl: subscribe_ok │◀───┘ video1/* │
│ │ │ │
│ │◀───────────┼────────────────┤ │
│ │ │ │
│ media:pub:video1/1 │ │ │
│ │ │ cache │
├─────────────┼────────────┼───────────────▶│ │
│ │ │ │─────┐ │
│ │ │ │ ◀───┘ [pub] │
│ │ │ │ │
│ │ media:pub: ├─────────────────▶
│ media:pub: │ (video1/1) │ │
│ (video1/1) │ │ │
│ │◀───────────────┤ │
│◀────────────┼────────────┼────────────────┤ │
│ │ │ │ │
│ │ │ │
{: title="Pub/Sub flow between Alice(publisher), Bob, Carl
(subscribers), Relay and Origin"}
4.2. Origin Server
The Origin serves as the authorization authority for the named
resources, in the manner similar to an HTTP origin. QuicR names to
be used under a given domain and the application are authorized by
the Origin server. It is also responsible for establishing necessary
trust relationship between the clients, the relay and itself.
4.3. Relays
The Relays play an important role within the QuicR architecture.
They receive subscriptions and intent to publish and forwards them
towards the origin. This may involve sending messages directly to
the Origin Relay or possibly traverse another Relay on the path.
Replies to theses message follow the reverse direction of the request
and when the Origin gives the OK to a subscription or intent to
publish, the Relay allows the subscription or future publishes to the
Names in the request. In this role, the Relays perform the role of
subscribers (consumers) as well as publishers (producers).
Jennings, et al. Expires 12 January 2023 [Page 7]
Internet-Draft QuicR Media July 2022
Subscriptions received are aggregated. When a relay receives a
publish request with data, it will forward it both towards the Origin
and to any clients or relays that have a matching subscriptions.
This "short circuit" of distribution by a relay before the data has
even reached the Origin servers provides significant latency
reduction for clients closer to the relay.
The Relay keeps an outgoing queue of objects to be sent to the each
subscriber and objects are sent in strict priority order. Relays MAY
cache some of the information for short period of time and the time
cached may depend on the origin and local cache policies.
Section 8 covers further details on the Relay functionality.
5. Names and Named Objects
Names are basic elements with in the QuicR architecture and they
uniquely identify objects. For publishers of the media, the names
identify application defined data objects being contributed and for
the subscribers/receivers, the names correspond to application data
objects to be consumed.
The scope and granularity of the names and the data objects they
represent are application defined and controlled.
However, a given QuicR name must maintain certain properties as given
below
* Each published name must be unique and is scoped to a given domain
and an application under that domain.
* Names should support a way for the subscribers to request for the
associated data either by specifying the full or partial names.
The latter is supported via wildcarding.
* Named objects should enable caching in relays in a way CDNs cache
resources and thus can obtain similar benefits such caching
mechanisms would offer.
5.1. Named Objects
The names of each object in QuicR is composed of the following
components:
1. Domain Identifier
2. Application Identifier
Jennings, et al. Expires 12 January 2023 [Page 8]
Internet-Draft QuicR Media July 2022
3. Data Identifier
Domain component uniquely identifies a given application domain.
This is like a HTTP Origin or an standardized identifier that
uniquely identifies the application and a root relay function.
Application component is scoped under a given Domain. This component
identifies aspects specific to a given application instance hosted
under a given domain (e.g. which movie or meeting identifier).
Data identifier identifies aspects of application, for example
representation_id in a CMAF segment or video stream from a conference
user. In cases where media being delivered is naturally grouped into
independently consumable groups (video group of picture or audio
synchronization points for example), this component is futher
composed into set of such groups, which are in turn made up of set of
objects (video frames idr, p-frame within a given gop). Each such
group is identified by a monotonically increasing integer and objects
within the group are also identified by another set of monotonically
increasing integers. The groupID and objectID start at 0.
Example: In the example below the domain component identifies
acme.meeting.com domain, the application component identifies an
instance of a meeting under this domain, say "meeting123", and the
data component captures high resolution camera stream from the user
"alice" being published as object 17 under group 15.
Example 1
quicr://acme.meeting.com/meeting123/alice/cam5/HiRes/15/17
Example 2
quicr://twitch.com/channel-fluffy/video-quality-id/group12/object0
Once a named object is created, the content inside the named object
can never be changed. Objects have an expiry time after which they
should be discarded by caches. Objects have an priority that the
relays and clients can use to make drop decisions or sequencing the
sending order. The data inside an object is end-to-end encrypted
whose keys are not available to Relay(s).
5.2. Wildcarding with Names
QuicR allows subscribers to request for media based on wildcard'ed
names. Wildcarding enables subscribes/requests for media to be made
as aggregates instead of at the object level granularity. Wildcard
names are formed by skipping the right most segments of the "Data
Identifier" component of the names.
Jennings, et al. Expires 12 January 2023 [Page 9]
Internet-Draft QuicR Media July 2022
For example, in an web conferencing use case, the client may
subscribe to just the origin, meeting_id and one of the publishers so
as to get all the media from that user in a particular. The example
matches all the named objects published by the user alice in the
meeting123.
"quicr://acme.meeting.com/meeting123/alice/*"
When subscribing, there is an option to tell the relay to one of:
A. Deliver any new objects it receives that match the name
B. Deliver any new objects it receives and in addition send any
previous objects it has received that are in the same group that
matches the name.
C. Wait until an object that has a objectId that matches the name is
received then start sending any objects that match the name.
6. QuicR Manifest
QuicR Manifests provides a light-weight declarative way for the
publishers to advertise their capabilities for publishing media.
Publisher manifest advertisement captures supported codecs, encoding
rates and also use case specific media properties such as languages
supported. Publisher advertisements are intend to declare
publisher's capabilities and a publisher is free to choose a subset
of those advertised in the manifest as part of the session and thus
does not require a manifest update. This could be, for example - to
change encoding bitrate or the codec used. However, in the case
where a new capability needs to be advertised, a manifest update MAY
be necessary.
Publishers advertise their capabilities via QuicR Control channel, as
and when its deemed necessary, under a well-known name. Manifest
objects are also scoped to a domain and the application under a given
Origin server.
Subscribers can retrieve the manifest for a given session by
subscribing to the well-known manifest QuicR name. On retrieving the
manifest, Subscribers/Receivers of the media can discover names being
published and proceed to request media for the corresponding names by
sending appropriate subscriptions (with wildcarding as necessary).
A representative well-known name for subscribing to manifest updates
for channel-2, twitch live session jon.doe.music.live.tv, can be
represented as
Jennings, et al. Expires 12 January 2023 [Page 10]
Internet-Draft QuicR Media July 2022
quicr://jon.doe.music.live.tv/channel-2/manifest/*
At any point in the session, updated manifest is pushed to the
subscribers like any media objects are delivered to the subscribers
of the manifest QuicR name.
6.1. Scope of the manifest
The role of the manifest is to identify the names as well as aspects
pertaining to the associated data in a given usage context of the
application.
* Typically a manifest identifies the domain and application aspects
for the set of names that can be published.
* The content of Manifest is application defined and end-to-end
encrypted.
* The manifest is owned by the application's origin server and are
accessed as a protected resources by the authorized QuicR clients.
* The QuicR protocol treats Manifests as a named object, thus
allowing for clients to subscribe for the purposes of
bootstrapping into the session as well as to follow manifest
changes during a session [ new members joining a conference for
example].
* The manifest has well known name on the Origin server.
Also to note, a given application might provide non QuicR mechanisms
to retrieve the manifest.
Below is a sample manifest for streaming application where a media
presentation server describes media streams available for
distribution. For downstream distribution of media data to clients
with varying requirements, the central server (along with the source)
generate different quality media representations. Each such quality
is represented with a unique name and subscribers are made know of
the same via the Manifest.
Note: Below json representation is provided as an example and need
not be the only way to encode the manifest.
Jennings, et al. Expires 12 January 2023 [Page 11]
Internet-Draft QuicR Media July 2022
{
"liveSessionID" : "jon.doe.music.live.tv",
"streams: [
{
"id": "1234",
"codec": "av1",
"quality": "1280x720_30fps",
"bitrate": "1200kbps",
"crypto": "aes128-gcm",
},
{
"id": "5678",
"codec": "av1",
"quality": "3840x2160_30fps",
"bitrate": "4000kbps",
"crypto": "aes256-gcm",
},
{
"id": "9999",
"codec": "av1",
"quality": "640x480_30fps",
"crypto": "aes128-gcm",
},
]
}
Given the above manifest, if a publisher wants to send a 4k stream,
it does so by publishing objects following the below pattern
//4K Stream
publish: quicr://jon.doe.music.live.tv/video/5678/[groupN/objectM ...]
If at any point, the producer intends to move to a lower quality
stream due to underlying network conditions, it can do so by
switching the published stream as below
//480p Stream
publish: quicr://jon.doe.music.live.tv/video/9999/[groupN/objectM ...]
and subscriber who is capable of receiving any of the qualities can
do so by
// Receiving any of the published streams and use its name
// to know more information about media properties via manifest and
// object data
subscribe: quicr://jon.doe.music.live.tv/video/*
Jennings, et al. Expires 12 January 2023 [Page 12]
Internet-Draft QuicR Media July 2022
7. QuicR Protocol Design
QuicR supports delivering media over QUIC Streams as well as over
QUIC Datagrams as chosen by the application.
Media delivery in QuicR is started by the publisher/subscriber
setting up a "Control Channel" for a given QuicR name. The control
channel, which is based on QUIC stream, is used to configure and
setup properties for the "Media Channel". Media data is delivered
over the Media Channel over QUIC streams or QUIC datagrams based on
the application settings. The Control Channel can also be used to
configure in-session parameters.
7.1. Control Channel
When a client or relay begins a transaction with the relay/origin,
the client starts by opening a new bilateral stream. This stream
will act as the "control channel" for the exchange of data, carrying
a series of control messages in both directions. The same channel
can be used for carrying media "fragment" messages if the media data
is sent in "stream" mode.
The control stream will remain open as long as the peers are still
sending or receiving the media. If either peer closes the control
stream, the other peer will close its end of the stream and discard
the state associated with the media transfer.
Streams are "one way". If a peer both sends and receive media, there
will be different control streams for sending and receiving.
7.2. QuicR Control Messages
The control channel carry series of messages, encoded as a length
followed by a message value:
quicr_message {
length(16),
value(...)
}
The length is encoded as a 16 bit number in big endian network order.
Jennings, et al. Expires 12 January 2023 [Page 13]
Internet-Draft QuicR Media July 2022
7.2.1. Subscribe Message
Entities that intend to receive named objects will do so via
subscriptions to the named objects. Subscriptions are sent from the
QuicR clients to the origin server(s) (via relays, if present) and
are typically processed by the relays. See {#relay_behavior} for
further details. All the subscriptions MUST be authorized at the
Origin server.
Subscriptions are typically long-lived transactions and they stay
active until one of the following happens
* a client local policy dictates expiration of a subscription.
* optionally, a server policy dictates subscription expiration.
* the underlying transport is disconnected.
When an explicit indication is preferred to indicate the expiry of
subscription, it is indicated via "SUBSCRIPTION_EXPIRY" message.
While the subscription is active for a given name, the Relay(s) must
send named objects it receives to all the matching subscribers. A
QuicR client can renew its subscriptions at any point by sending a
new "quicr_subscribe_message". Such subscriptions MUST refresh the
existing subscriptions for that name. A renewal period of 5 seconds
is RECOMMENDED.
enum subscribe_intent
{
immediate(0),
catch_up(1),
wait_up(2),
}
quicr_subscribe_message {
* message_type(i),
* name_length(i),
* name(...),
* mask(7)
* subscribe_intent intent,
* [datagram_stream_id(i)]
* }
Jennings, et al. Expires 12 January 2023 [Page 14]
Internet-Draft QuicR Media July 2022
The message type will be set to SUBSCRIBE_STREAM (1) if the client
wants to receive the media in stream mode (via QUIC streams), or
SUBSCRIBE_DATAGRAM (2) if receiving in datagram mode. If in datagram
mode, the client must select a datagram stream id that is not yet
used for any other media stream.
The origin field in the name identifies the Origin server for which
this subscription is targeted. "name" identified the fully formed
name or wildcard name along with the appropriate bitmask length.
The "intent" field specifies how the Relay Function should provided
the named objects to the client. Following options are defined for
the "intent"
* immediate: Deliver any new objects it receives that match the name
* catch_up: Deliver any new objects it receives and in addition send
any previous objects it has received that matches the name.
* wait_up: Wait until an object that has a objectId that matches the
name is received then start sending any objects that match the
name.
7.2.1.1. Aggregating Subscriptions
Subscriptions are aggregated at entities that perform Relay Function.
Aggregating subscriptions helps reduce the number of subscriptions
for a given named object in transit and also enables efficient
distribution of published media with minimal copies between the
client and the origin server/ or other relays, as well as reduce the
latencies when there are multiple subscribers for a given named
object behind a given cloud server.
7.2.1.2. Wildcard Names
The names used in "quicr_subscribe_message" can be truncated by
skipping the right most segments of the name that is application
specific, in which case it will act as a wildcard subscription to all
names that match the provided part of the name. The same is
indicated via bitmask associated with the name in
"quicr_subscribe_message". Wildcard search on Relay(s) thus turns
into a bitmask at the appropriate bit location of the hashed name.
7.2.2. SUBSCRIBE_REPLY Message
A "quicr_subscribe_reply" provides result of the subscription.
Jennings, et al. Expires 12 January 2023 [Page 15]
Internet-Draft QuicR Media July 2022
enum response
{
ok(0),
expired(1)
fail(2),
redirect(2)
}
quicr_subscribe_reply
{
Response response
[Reason Phrase Length (i),
[Reason Phrase (..)],
}
A response of "ok" indicates successful subscription, for "failed" or
"expired" responses, "Reason Phrase" shall be populated with
appropriate reason. An response of "redirect" informs the client
that relay is no longer serving the subscriptions and client should
retry to the alternate relay provided in the redirect message.
7.2.3. PUBLISH_INTENT Message.
The "quicr_publish_intent_message" indicates the names chosen by a
Publisher for transmitting named objects within a session. This
message is sent to the Origin Server whenever a given publisher
intends to publish on a new name (which can be at the beginning of
the session or during mid session). This message is authorized at
the Origin server and thus requires a mechanism to setup the initial
trust (via out of band) between the publisher and the origin server.
quicr_publish_intent_message {
* message_type(i),
* name_length(i),
* name(...)
* datagram_capable(i)
* }
The message type will be set to PUBLISH_INTENT (6). The
"datagram_capable" flag is set to 0 if the client can only publish/
post data in stream mode, to 1 if the client is also capable of
posting media fragments as datagrams.
Jennings, et al. Expires 12 January 2023 [Page 16]
Internet-Draft QuicR Media July 2022
On a successful validation at the Origin server, a
"publish_intent_ok" message is returned by the Origin server. The
"publish_intent_ok" message is sent in response to the
"quicr_publish_intent_message", on the server side of the QUIC
control stream. This message indicates the publisher is authorized
for using the intended name provided in
"quicr_publish_intent_message".
quicr_publish_intent_ok_message {
* message_type(i),
* use_datagram(i),
* [datagram_stream_id(i)]
}
The message id is set to PUBLISH_INTENT_OK (7). The "use_datagram"
flag is set to 0 if the server wants to receive data in stream mode,
and to 1 if the server selects to receive data fragments as
datagrams. In that case, the server must select a datagram stream id
that is not yet used to receive any other media stream.
This message enables cloud relays to know the authorized names from a
given Publisher. This helps to make caching decisions, deal with
collisions and so on.
"A>A cloud relay could start caching the data associated with the
names that has not been validated yet by the origin server and decide
to flush its cache if no PUBLISH\_INTENT\_OK is received within a
given implementation defined timeout. This is an optimization that
would allow publishers to start transmitting the data without needing
to wait a RTT."
7.2.4. Start Point Message
The Start Point message indicates the begin of message to be sent for
the media. They correspond to Group ID and Object ID of the first
object that will be sent for the media. It may be sent by the server
that received a "quicr_subscribe_message", or by the client that sent
a "quicr_publish_intent_message". This message is optional: by
default, media streams start with Group ID and Object ID set to 0.
* quicr_start_point_message {
* message_type(i),
* start_group_id(i),
* start_object_id(i),
* flags(i)
* }
The message id is set to START_POINT (8).
Jennings, et al. Expires 12 January 2023 [Page 17]
Internet-Draft QuicR Media July 2022
7.2.5. Fragment Message
The quicr_fragment_message message is used to convey the content of a
media stream as a series of fragments:
quicr_fragment_message {
* message_type(i),
* group_id(i),
* object_id(i),
* best_before(i),
* flags(i),
* offset_and_fin(i),
* length(i),
* data(...)
}
flags := Reserved (3) | IsDiscardable (1) | Priority (3)
The message type will be set to FRAGMENT (5). The "offset_and_fin"
field encodes two values, as in:
offset_and_fin = 2 * offset + is_last_fragment
The flag "is_last_fragment" is set to 1 if this fragment is the last
one of an object. The offset value indicates where the fragment data
starts in the object designated by "group_id" and "object_id".
Successive messages are sent in order, which means one of the
following three conditions must be verified:
* The group id and object id match the group id and object id of the
previous fragment, the previous fragment is not a "last fragment",
and the offset matches the previous offset plus the previous
length.
* The group id matches the group id of the previous message, the
object id is equal to the object id of the previous fragment plus
1, the offset is 0, and the previous message is a "last fragment".
* The group id matches the group id of the previous message plus 1,
the object id is 0, the offset is 0, and the previous message is a
"last fragment".
7.2.6. Fin Message
The Fin message indicates the final point of a media stream.
Jennings, et al. Expires 12 January 2023 [Page 18]
Internet-Draft QuicR Media July 2022
* quicr_fin_message {
* message_type(i),
* final_group_id(i),
* final_object_id(i)
* }
The message type will be set to FIN (3). The final "group_id" is set
to the "group_id" of the last fragment sent. The final "object_id"
is set to the object_id of the last fragment sent, plus 1. This
message is not sent when fragments are sent on stream.
7.2.7. SUBSCRIBE_CANCEL Message
A "quicr_subscribe_cancel_message" indicates a given subscription is
no longer valid. This message is an optional message and is sent to
indicate the peer about discontinued interest in a given named data.
* quicr_subscribe_cancel_message {
* message_type(i),
* name_length(i),
* name(...)
* Reason Phrase Length (i),
* Reason Phrase (..),
* }
7.2.8. RELAY_REDIRECT MESSAGE
"quicr_relay_redirect_message" enables relay failover scenarios that
is sent in response to PUBLISH, PUBLISH_INTENT and SUBSCRIBE messages
indicating the new relay to the clients.
quicr_relay_redirect_message
{
relay_address_length(i),
relay_address(...)
}
7.3. Sending Media as Datagrams
If transmission as datagram is negotiated, the media fragments are
sent as QUIC Datagram frames.
7.3.1. Datagram Header
The datagram frames are encoded as a datagram header, followed by the
bytes in the fragment:
Jennings, et al. Expires 12 January 2023 [Page 19]
Internet-Draft QuicR Media July 2022
datagram_frame_content {
datagram_header,
datagram_content
}
The datagram header is defined as:
* quicr_datagram_header {
* datagram_stream_id (i),
* group_id (i),
* object_id (i),
* offset_and_fin (i),
* best_before(i),
* flags (8),
* [nb_objects_previous_group (i)]
* }
flags := Reserved (3) | IsDiscardable (1) | Priority (3)
The datagram_stream_id identifies a specific media stream. The ID is
chosen by the receiver of the media stream, and conveyed by the
Request or Accept messages.
The "offset_and_fin" field encodes two values, as in:
offset_and_fin = 2*offset + is_last_fragment
The "flags" identifies the relative "priority" of this object and if
the object can be discarded. This can help Relay to make dropping/
caching decisions. "best_before" identifies the time upto when the
data for the given object valid. This aids in caches dropping the
data after "best_before" and also cease any error recovery mechanisms
that might be in progress for the corresponding data. "best_before"
can also be used by clients to make send/drop decisions.
The "nb_objects_previous_group" is present if and only if this is the
first fragment of the first object in a group, i.e., "object_id" and
"offset" are both zero. The number indicates how many objects were
sent in the previous groups. It enables receiver to check whether
all these objects have been received.
Jennings, et al. Expires 12 January 2023 [Page 20]
Internet-Draft QuicR Media July 2022
8. Relay Function and Relays
Clients may be configured to connect to a local relay which then does
a Publish/Subscribe for the appropriate named data towards the origin
or towards another Relay. These relays can aggregate the
subscriptions of multiple clients. This allows a relay in the LAN to
aggregate request from multiple clients in subscription to the same
data such that only one copy of the data flows across the WAN. In
the case where there is only one client, this may still provides
benefit in that a client that is experiencing loss on WIFI WAN has a
very short RTT to the local relay so can recover the lost data much
faster, and with less impact on end user QoE, than having to go
across the LAN to recover the data.
Relays can also be deployed in classic CDN cache style for large
scale streaming applications yet still provide much lower latency
than traditional CDNs using Dash or HLS. Moving these relays into
the 5G network close to clients may provide additional increase in
QoE.
At a high level, Relay Function within QuicR architecture support
store and forward behavior. Relay function can be realized in any
component of the QuicR architecture depending on the application.
Typical use-cases might require the intermediate servers (caches) and
the origin server to implement the relay function. However the
endpoint themselves can implement the Relay function in a Isomorphic
deployment, if needed.
The relays are capable of receiving data in stream mode or in
datagram mode. In both modes, relays will cache fragments as they
arrive.
In all modes, the relays maintain a list of connections that will
receive new fragments when they are ready: connections from clients
that have subscribed to the stream through this relay; and, if the
media was received from a client, a connection to the origin to pass
the content of the client-posted media to the origin. When new
fragments are received, they are posted on the relevant connections
as soon as the flow control and congestion control of the underlying
QUIC connections allow.
8.1. Cache and Relaying
The prototype relays maintain a separate cache of received fragments
for each media stream that it is processing. If fragments are
received in stream mode, they will arrive in order. If fragments are
received in datagram mode, fragments may arrive out of order.
Jennings, et al. Expires 12 January 2023 [Page 21]
Internet-Draft QuicR Media July 2022
The cache is created the first time a client connection refers to the
media URL. This might be:
* A client connection requesting the name, in which case the relay
will ask a copy of the media from the origin or the next hop relay
towards the origin.
* A client connection publishing named data, in which case the relay
will post a copy of the media towards the origin.
Once the media is available, the relay will learn the starting group
ID and object ID.
Fragments are received from the "incoming" connection. If fragments
are received in stream mode, they will arrive in order. If fragments
are received in datagram mode, fragments may arrive out of order.
When receiving in datagram mode, the media order is used to remove
incoming duplicate fragments. When a non duplicate fragment is
received, it is added to the cache and posted to corresponding
subscribers over streams or datagrams, when flow and congestion
control allow transmissions
In stream mode, the transmission may be delayed until fragments are
received in order. If the last fragment received "fills a hole",
that fragment and the next available fragments in media order will be
forwarded.
8.2. Out of order relaying
As noted in Section 8.1, fragments that arrive out of order are
relayed immediately.
This design has better properties compared to the following
alternatives:
* insisting on full order before relaying, as is done for stream
mode; OR
* insisting on full reception of all fragments making an object.
Jennings, et al. Expires 12 January 2023 [Page 22]
Internet-Draft QuicR Media July 2022
Full order would introduce the same head-of-line blocking also
visible in stream-based relays. In theory, relaying full objects
without requiring that objects be ordered would avoid some of the
head-of-line blocking, but in practice it is observed when some
streams contain large and small objects, and that losses affecting
fragments of large objects cause almost the same head of line
blocking delays as full ordering. Moreover, if losses happen at
several places in the relay graph, the delays will accumulate. Out
of order relaying avoids these delays.
8.3. Relay or Cache or Drop Decisions
Relays makes use of priority, time-to-live, is_discardable metadata
properties from the published data to make forward or drop decisions
when reacting to congestion as indicated by the underlying QUIC
stack. The same can be used to make caching decisions.
8.4. Cache cleanup
Relays store objects no more than "best_before" time associated with
the object. Congestion/Rate control feedback can further influence
what gets cached based on the relative priority and rate at which
data can be delivered. Local cache policies can also limit the
amount and duration of data that can be cached.
8.5. Relay fail over
A relay that wants to shutdown shall use the redirect message to move
traffic to a new relay. If a relay has failed and restarted or been
load balanced to a different relay, the client will need to
resubscribe to the new relay after setting up the connection.
TODO: Cluster so high reliable relays should share subscription info
and publication to minimize of loss of data during a full over.
8.6. Relay Discovery
Local relays can be discovered via MDNS query to TODO. Cloud relays
are discovered via application defined ways that is out of scope of
this document. A Relay can send a message to client with the address
of new relay. Client moves to the new relay with all of its
Subscriptions and then Client unsubscribes from old relay and closes
connection to it.
This allows for make before break transfer from one relay to another
so that no data is lost during transition. One of the uses of this
is upgrade of the Relay software during operation.
Jennings, et al. Expires 12 January 2023 [Page 23]
Internet-Draft QuicR Media July 2022
Appendix A. Acknowledgments
Thanks to TODO for contributions and suggestions to this
specification.
Appendix B. TODO Items
* Authorization and Authentication Considerations for control and
media messages
* End to End Security of named objects
* Manifest Encoding
Authors' Addresses
Cullen Jennings
cisco
Canada
Email: fluffy@iii.ca
Suhas Nandakumar
Cisco
Email: snandaku@cisco.com
Christian Huitema
Private Octopus Inc.
Email: huitema@huitema.net
Jennings, et al. Expires 12 January 2023 [Page 24]