moq-rs/HACKATHON.md

2.6 KiB

Hackathon

IETF Prague 118

MoqTransport

Reference libraries are available at moq-rs and moq-js. The Rust library is well documented but the web library, not so much.

TODO Update both to draft-01. TODO Switch any remaining forks over to extensions. ex: track_id in SUBSCRIBE

The stream mapping right now is quite rigid: stream == group == object.

TODO Support multiple objects per group. They MUST NOT use different priorities, different tracks, or out-of-order sequences.

The API and cache aren't designed to send/receive arbitrary objects over arbitrary streams as specified in the draft. I don't think it should, and it wouldn't be possible to implement in time for the hackathon anyway.

TODO Make an extension to enforce this stream mapping?

Generic Relay

I'm hosting a simple CDN at: relay.quic.video

The traffic is sharded based on the WebTransport path to avoid namespace collisions. Think of it like a customer ID, although it's completely unauthenticated for now. Use your username or whatever string you want: CONNECT https://relay.quic.video/alan.

TODO Currently, it performs an implicit ANNOUNCE "" when role=publisher. This means there can only be a single publisher per shard and role=both is not supported. I should have explicit ANNOUNCE messages supported before the hackathon to remove this limitation.

TODO I don't know if I will have subscribe hints fully working in time. They will be parsed but might be ignored.

CMAF Media

You can publish and watch broadcasts. There's a 24/7 bunny stream or you can publish your own using moq-pub.

If you want to fetch from the relay directly, the name of the broadcast is the path. For example, https://quic.video/watch/bbb can be accessed at relay.quic.video/bbb.

The namespace is empty and the catalog track is .catalog. I'm currently using simple JSON catalog with no support for delta updates.

TODO update to the proposed Warp catalog.

The media tracks uses a single (unbounded) object per group. Video groups are per GoP, while audio groups are per frame. There's also an init track containing information required to initialize the decoder.

TODO Base64 encode the init track in the catalog.

Clock

TODO Host a clock demo that sends a group per second:

GROUP: YYYY-MM-DD HH:MM
OBJECT: SS