Skip to main content

Minutes IETF120: moq: Thu 20:00
minutes-120-moq-202407252000-00

Meeting Minutes Media Over QUIC (moq) WG
Date and time 2024-07-25 20:00
Title Minutes IETF120: moq: Thu 20:00
State Active
Other versions markdown
Last updated 2024-08-06

minutes-120-moq-202407252000-00

MoQ Thursday

Warp

Will from Akamai:

Overview of Specifications

WARP is one streaming format along with LOC and Chat that could run on
top of MoQ Transport.

PR #27 added LoC packaging to WARP, in addition to CMAF. 'Packaging
Field Value' indicates which is used.

PR #26 is the timeline track proposal. Enables seeking, as well as
inserting events at various times.

Chat has some feedback about how CSV and strings are annoying. Will
previously mentioned CBOR as a future option.

Mo Zanaty: Maybe a separate binding to the timeline track would be
better.

Will: Not quite ready for adoption, still some work to do.

Cullen Jennings: Agree about where the draft is, but lean towards
bringing it in sooner rather than later.
Once it's clear that its the right shape, its a good point for people to
adopt.

Jordi: Are you proposing an independent draft?
Will: Yes, this depends upon Catalog.
Jordi: We could also use this without depending upon Catalog if we want.

Mo: This is a good basis for WG, but caution about few people looking at
the media formats MoQ would carry.
This is the SDP, Mime-types, etc of MoQ, and think other communities
should be included.

Metrics and Logging

Suhas from Cisco

Status Quo: Applications report information about media and quality
issues in near realtime or send at end-of-session.

Problem: Metrics can compete for application bandwidth, No shared
congestion context, everything is equally important

Proposed solution: Use fine grained control of priorities and the
burstiness of media to send logs when less busy.

Q&A

Martin Duke: Unsure I understand the communication model. Subscriber
sends data upsteam and data is cached there?
Answer: Yes

Jana Iyengar: Thinking about using MoQ for logging for a while, but it's
possible logs are in a different congestion context.
Answer: Thinking that HTTP and MoQ metrics could share a context.

Zahed: Trying to understand this better. More of a prioritization sort
of issue.

Jordi: Really like the idea of using MoQ to send metrics, but today
typically metrics are sent on a different connection.
Answer: MoQ has a next hop relay, so the relay could send metrics in a
different direction from where media is coming from.

Will Law: Really like it from a large scale view. Be nice to make this a
standard feature of relays.

Gurtej Chandok:
Suggest adding to the draft information about how end to end keying from
log producer and consumer with things like MLS

"Peeps" an Extended MoQT Object Model

Used the name Peeps because it has no baggage, and is whatever we say it
is.

Cullen: Don't completely agree what the premise of Martin's example.
Martin: Some confusion about status quo: For example, in Stream per
group, only the whole Group has a priority.
Cullen: ??

Jana: Is a peep a stream?
Martin: Not quite, because a peep could be split across streams in some
cases, and trying to avoid using an overloaded word.

Q&A

Mo: To answer Jana's question: At the Object model level, they're MoQ
data. One thing struggling with in MoQ is temporal
scalability in the current wire format. It's potentially a hacky way to
do it. Mo would like to see a different way to do it (Yes on PR)

Suhas: The Object model can have different priorities for different
Objects, if we ignore how it maps onto streams.
Use cases where you want to send all Objects at same priority, so
mapping to a stream works. Nice thing about Peeps
is that it makes it clear. A group can have multiple priorities. Yes we
should write a PR for this.

Luke Curley: Agree that is all comes down to temporal scalability. Added
Object per stream for that use case.
The different ways we map Objects to Stream are confusing. Yes on a PR,
anything to change stream modes is good,
3 different modes is problematic.

Cullen: An identifier is useful, but don't want to remove stream per
track in the same PR. It's likely a goodidea, but not yet motivated.

Ian: Fetch seems like the right use case for a single stream, so
hopefully Victor's PR will use that for older data
and then we can get rid of it for realtime data. Definitely like to see
a PR.

Christian Huitema: Like what you're proposing because Groups, Object IDs
don't fully capture

Mike: Like this, simplifies forwarding preference. Glad to help with PR.

Jana: Important to write the abstraction in the context of what we have.
Happy to help you articulate it well. Willing to help.

Track Switching in Media Over QUIC Transport

Zafer Gurel

Q&A

Kota Yatagai:

Will Law: Think the existing APIs are sufficient using a
SUBSCRIBE_UPDATE.
Answer: Seems possible, but if new track is not in cache, SUBSCRIBE_OK
takes a while.

Suhas: At a high level, I think this is a problem to solve. Not sure at
the MoQ transport we want dependencies between tracks.
There was a discussion of a mechanism to prewarm the cache for lower
qualities and make sure they're available in case
need to suddenly switch.

Cullen: Like to solve this problem. Would the freeze/unfreeze model for
a subscription meet your needs.

Jordi: Also want to solve this, but seems the only thing one needs is an
atomic SUBSCRIBE/UNSUBSCRIBE.
Could put this in SUBSCRIBE_UPDATE or create a new message.

Administrivia

Martin: Weekly interims will become biweekly during August, then go back
to weekly. Typically at 9am PST.

In-person interim. Identified NYC as a location, but haven't found a
host, so don't book tickets.

Ian: Transport

Should missing Objects be required?

#345 - sould missing object be required.

Suhas: For subscribe telling the other end missed object, not usefull.
For fetch it may be usefull.

Lenox: Is it something publish or relay put in
Ans: it is an indication you will never get i.

Martin: like explicit signalls. Happy to add don't have and won't send.
And don't have but will send later

Will: How does this work with ranges. For sparse obhjects, what is
communicated.
Ans: very sparse space, ask 1000 groups, and send bunch.
Will: why ? not usefull.
Ans: don't you want nukbers compact ? Case for explicit case

Luke: for low latency does not matter. For reliable live, want to know
if object is not coming. Doen't want to have a timer.

Cullen: There are some applications where you know the IDs are sparse
and you can wait. There's other applications where IDs don't collide. I
think we have applications where there can be large gaps to avoid
collisions and we shouldn't be publishing markers for each gaps. This
should be punted to the application. The relay doesn't care if there's a
gap.

Ian: Does a relay have to make a cache-miss request for each gap?

Cullen: That information should be elsewhere? (@Cullen elaborate)

No Limit on Subscriptions #272

No Limit on Subscriptions. SUBSCRIBE per stream?

Luke: think we probably need the setup paramterz. Don't share with
QUIC's flow control. 1&2

Cullen: Different max subscriptions and max announces limits.

Martin: Max subscribe ID not max subscriptions.

Mo: Splitting subscribes into separate control streams removes useful
HoLB.

MOQ Wednesday

Interop

moq-cat- draft-5 and -4 implemented, some testing
Call for MoQ interop Czar. Getting the interop apps similar, what we
want to interop on, maintain spreadsheet,

Payment offered: chocolate

No volunteers come forward. If you have an interop application, write
down what track and catalogue is to help make it happen

Livestreaming this meeting over MoQ

First MOQ public stream!
This and thursday session. Alpha stage. Lower expectations.

Feedback welcome

IETF network, wifi, relays in Akamai Linode to you

moq-encoder-player moxygen both from Meta (opensource)

No priority implemented yet, so audio and video both cut out if things
go bad

Can play with it: https://g28g.short.gy/moq120

the MOQ journey

moqt-00 July \'23

Bunch of new featurs, object model, subscribe, status, priroities,
mechanical and eitorial improvements

Consensus on layering
Adoption of Catalog
LoC and WARP open

Lots of feedback from implement and interop

Issues where we can get PR and consensus. 8-10 marked plus a few.
Volunteers needed. 6 volunteers

Cullen, Mo, Suhas, Coda, Christian, Mike English all volunteer

Where going: refine partial reliability, FETCH vs SUBSCRIBE, publisher
(make before break, multiple in meetings), security, auth

Cullen Jennings: Lookahead parsing issue. Harder to solve later.

Issue where someone can write text

Higher levels: Catalog - adopted, good place. Interop soon?

LoC - out there, part of demo

WARP - further away

Zaheduzzaman Sarker: thanks for update

MoQ Transport-05 updates+priorities

-03-04 SUBSCRIBEv2 simplifies subscribe
Clarification and an SUBSCRIBE_UPDATE

-04 to -05: Priority and group send order, terminology updates, object
status

Status lets us say when things are missing, not just a gap

SUBSCRIBE specifies a Priority
also Group Order

SUBSCRIBE_OK gives publisher one

Subscriber preferenced on theory it knows more

Alan Frindell: priority field went from varint to byte. Thanks to who
ever sent priority >62

Select subscription->group->object respecting priorities. Logic in the
slide

Tianji Jiang: Object payload and metadata, group object, id. Why not
extension field for metadata? Ignored by transport but for higher level
things

Cullen Jennings: Slight correction on send order for objects from
slides, send by object priority then object ID.
Mo Zanty: debate over who gets to touch metadata

Common Catalog

Will Law presenting.
Warmup to actual transport. Hypothetical but now in QUIC.video

Lots of changes and PRs merged, two for discussion, and three issues to
talk about.

Reminder of where the document is: now in IG github. Standards track

Delta required indication for simple players.

New root to hold inherited track fields. Another issue about not merging
this one

Packing or format? Track has objects with payloads. Want to say how
packaged: cmaf or loc very media specific. And more than packaging
matters. Replace with format to make it broader if you want

Victor: strings very flexible

Will: Version of application namespace for format. CMAF, CMAF mean
different things without namespace. No objection with IANA registry

Lucas Pardue: why not media types? We’ve got a registry already!

Will: MIME different: selection parameters. Beyond MIME. Still vary
package in MIME

Suhas Nandakumar: packaging fine name. Should be something in IANA.
Experiment not registry, but loc should mean loc.

Victor again: Just because different application doesn’t mean they share
types. No reuse because MIME is for files, sequences of bytes. MOQ is
things with a deep structure

Cullen: Nit sorry to be raised. Codec:opus in parameters, what do you
call that field?
RTP says format, using format registry, other format term already used.
Maybe moq-format
Will: track format?

Bernard: might be codec string. Not AV1 but full profile etc.

Will: yeah, intended

Mo Zanty: lots of confusion. Loc: what codec? Doesn’t specify. MIME not
appropriate because these are things never IETF specified. Other bodies
do it no IANA needed. Web codec tried in W3C for relevant subsets but we
don’t need to duplicate that. Explicit about what we reference. Codec
isn’t from any body, just word as tag in catalog

Will: Applications pick it

Mo: think we need a design team for all packaging, format, description
things to sort out what this all means. Especially given the questions

Magnus: don’t use media types: they don’t mean right thing. URN works,
IETF prefix for standardized. Anyone can make unique ones themselves

PR 63: type for tracks

Will: lots of use cases to say data or timeline track. Scope of
streaming or game using catalog to describe content. String, type
optional. Any application define contents

Victor: is field application specific

Will: yes

Victor: let applications add arbitrary fields with structure for this.
No need for standardization

Will: Extensible by application: we define base, can throw in JSON
everywhere, up for client understanding to use and parse. Clients that
don’t should ignore.

Victor: yeah, that’s position

Luke: use case is type safety. Parsing and knowing we want audio and
video. Any track any field: audio a width. If nebulous a pain to
implement. Understand Victor but we should define audio has something to
avoid lots of JSON. Some sort of thing exists for selection

Will: in application spec, or catalogue spec?

Luke: somebody must! If we don’t interop fails.

Will: WARP, not catalogue. Maybe a question. Streaming format defines
this. Parser against this app, not generic catalgoue

Mo: just like extensibility in lower level needed for catalgoue. Agree
some want blobs. Let’s make clear namespaces don’t collide

Will: add comments to issues, we’ll follow up

PR 46: field for track prioritization.

We need so producers say what’s more important

If any track needs, all do it. Equal priority can be done. Absence means
all equal

Suhas: make mandatory

Discussion about priorities and parsing.

Issue 33: commonTrackField premature optimization. If we wanted it
smaller, do binary. Repetition doesnt matter much.

Culleen: in agreement

Issue 44: string not integer for streaming format

3 fields. Lots of options. UTF-8 wanted

While doing this add in the version! And then can imply the catalog

Stuart Joshua: Strongly argue against option 4. Not UI, protocol
identifier. Numbers need allocation. Strings waste space but nicer.
UTF-8 and arbitrary scripts comes with problems and not worth it. DNS
discovery service types: US-ASCII letters and digits. Expressive enough
for memonic but not unlimited length

Cullen: UTF-8 will have interop bugs forever as people won’t test.
Semanticly different things in different fields, Versions can be
reasoned about, migration easier

Mo Zanty: don’t want to merge catalogue and streaming format.
Semantically incorrect. Want to parse catalogue before finding out
streaming version

Consensus for option 2: keep version separate ASCII name

WARP bumped to Thursday for technical difficulties

Secure Objects

Cullen

About e2e encryption. Equivalent of SRTP for RTP

Not replacement for cenc for CMAF

Minimize bw for MoQ esp. Audio

No new crypto
Integrate with MLS
Integrate with containers

Relay independence

Why not RTP to S/MIME? Because it gets big!

AEAD crypto: track used to derive keys, object and group id used as
nonce as they already exist

Lyria: 3kbs. Crypto doubles size

Emad: why not SFRAME

Answer; need some extra data to go in

Victor: don’t want to redo Sframe

Richard Barns: end up needing to remove some stuff and put it from moq.
Got PR to replace guts with it

Wrote by copying Sframe

Victor: don’t know where but useful. Don’t know about HKDF every time.
Only hard is auth tags

Catalog says how:

Richard Barnes: cant just use track frame, as need different keys over
time in MLS

Mo Zanaty: took this as an instantiation of sframe in MOQ context. Key
context things needed, this defines them and the derivation. Binds to
MOQ object as instantiation. Not competitive at all. On way layed out
struggle in Low Overhead Container. Just as MOQ needs extensibility for
headers maybe trailers, auth tag as trailer vs blob with all of it

Cullen: RTP says we did it wrong way

Suhas: metaquestion about how to do it, yes, once adopt can figure out

Ask adoption, but think some people need to see sframe connection worked
out. Hadn’t though about Mo’s idea, but think it’s good, but relates to
MOQ things.
Mo to file moqt issue for trailers in transport

Many faces of subscribe

Victor presenting

Subscribe is better in 5. But there are some corners

Current group, current object, absolute start, absolute range

Current object easy: track is somewhere, look at biggest object
delivered, send it (or not: unclear in spec) send newer objects

What if you ask for (1,000, 0) to (2,000,)? Do we open all streams, open
as the objects come, how does backpropagation work? Flow control
interactions!

Don’t know grouping of future objects!

Ian Swett: Think with group order need to send all data on group 1000
then 1001 1002 etc. think shape of problem is true but example is messy

What was written was supposed to clarify this. Writers intent, maybe not
reflected

Track at (10, 1000) stream per group

Current group, but miss on (10, 0), so has to grab a bunch of stuff, but
publisher still ahead. Takes a few rounds to converge, especially with
cache pressure.

What about objects that don’t exist in absolute requests? Holes in
cache, or publisher knows they don’t exist

Mo Zanaty: I thought this was going to happen when moqt doesn’t go for
live edge. As media is being produced. Not VOD. If VOD those are fetches
not subscriptions. Preserving subscribe only for live edge removes
issues, but when you do a FETCH assumption of line rate and parallel.
Most likely not what application wants. Then MOQ extended for media
rate. Separate this from FETCH. Lots of impacts between catchup, live,

Not even current group, no current object only or start of next (stream
said, group meant)

Suhas: brings back memory of last interim. As Mo said FETCH rich, and
that doesn’t exist for SUBSCRIBE for live data. So anything with live
range works older. But overload same as live has issues

Cullen: Each time you request thing in past comes back, sense as thing
in future, past and future different

Luke: for fetch suggestions has to be radically different otherwise same
issues as subscribe with flow control and cache misses/pollution. World
where easier but little harder than separate

Martin Duke: Current group gives you whole thing, or issue
Victor: might be long, might be constantly backfill
Martin: but it can get new in really
Victor: 5 clients all up to date on object 1000, new client says 0,
0…1000 dropped from relay cache…

Live and VOD
Live: new objects, a little bit of the past
VOD: fetch range from past

Past idea; subscribe and fetch

Atomic subscribe and fetch: grab the new, while catching up on the old

2 drawbacks: stuff can be reordered, producer might not close out old
group after new one opened

Fix: subscribe used to mean things in the future
Proposal: subscribe means things future at publisher, at relay as
delivered from publisher

Solves reordering issue

Fetch: - lots of properties not for just grab things

Actual proposal: backfill

Send what you got from N groups ago. Easy to implement, look in memory
and forget anything you don’t have.

Timeouts and priorities remain meaningful.

Concretely:
FETCH with range
Alter Subscribe:
N most current
Backfill semantics

Suhas: i like
Luke: don’t like that backfill depends on cache. Cache needs to be
transparent.

Mo Zanty: Like idea, maybe not specific. Should revisit this issue

Culleen: Promising direction, agree with luke and will on cache

Will Law: Support notion that cache is immaterial. Optimization.
Shouldn’t impact received or requested.

Ian: encouraging, observation absolute start is problematic with
subscribe is great. From writing before whole new message with
acoutrements is a wall of text. Maybe easier to make absolute start end
is other verb. Smaller diff