Implement DRAFT-06 Support
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 48
- Forks
- 20
- PR merge metrics
- No merged PRs in 30d
Description
As a stepping stone to our ambitious goal of implementing DRAFT-07 FETCH support, we should get a working DRAFT-06 implementation up and running.
To start we can focus on implementing the features that have already been completed in @englishm's moq-rs/pull/draft-06. I've sorted this list by "what'll break first" so we can work our way from getting the setup messages working -> playback. Feel free to correct what I've gotten wrong or fill in additional context or thoughts.
// Implemented in moq-rs
- Update supported version to V6 (
0xff000006) - Stream Header type ID changes
- Object payload length
- the v6 relay won't even acknowledge the setup messages without the length entry. There is no validation (yet), so we could just send any number, but we might as well actually calculate the bytes.
- Control message length
- Track namespace + track as ordered N-tuple of bytes + sequence of bytes
- Namespaces have been changed from bytes -> a tuple of bytes, so we'll need to make these updates before we can subscribe to a track.
- SubGroups
- I think currently the backend is just putting everything that was in the group into a single subgroup, so we'll just need to update the types/data structures and use the subgroup data where we were using the group data
// Less urgent/publisher stuff
- SUBSCRIBE_NAMESPACE / UNSUBSCRIBE_NAMESPACE and OKs
- ability to subscribe/unsubscribe to all of the tracks under a namespace. don't think this is a "must have" to get playback working, but it is implemented on the backend and would be fun to add
- Too many subscribes error message
- Remove missing group status
- don't think moq-js ever had this
// Not yet implemented in moq-rs
- MAX_SUBSCRIBE_ID control message
- Delivery timeout parameter
- Max Cache Duration parameter
- Error Code for Announce Cancel
- Additional Subscribe Errors
// TODO: audit DRAFT-06/DRAFT-07 diff to make sure we aren't implementing anything in 06 that was subsequently removed in 07.
Resources:
- MoQT 05->06 Spec Diff:
https://author-tools.ietf.org/iddiff?url1=draft-ietf-moq-transport-05&url2=draft-ietf-moq-transport-06&difftype=--html - @englishm's
moq-rsWIP diff for implementing V6 in the relay/publisher:
https://github.com/englishm/moq-rs/pull/8- the diff is also a great reference to see what the backend is expecting
- Facebook player MOQTv7 (minus FETCH) implementation:
https://github.com/facebookexperimental/moq-encoder-player/pull/21/files- The FB player jumped from 05->07 directly, so it has more than we need (for now!), but this will be a great reference for adding message lengths/tuple updates/etc.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the MoQT 05→06 spec diff and the linked moq-rs PR #8, using its diff to understand the expected transport changes. Work through the listed setup-to-playback items, then audit the DRAFT-06/07 diff; done means the required DRAFT-06 behavior works through playback without carrying forward changes removed in DRAFT-07.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- networking
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100