moq-lite-05: make Timescale/Timestamp mandatory; drop one-sided field prefixes#40
Conversation
moq-lite: every Track now has a media timeline. `Timescale` MUST be non-zero and the per-frame `Timestamp Delta` and per-datagram `Timestamp` are unconditional on the wire, removing the timescale-0 fallback that forced both endpoints to handle present/absent timestamp fields. Expiration is always timestamp-based; only empty groups (which carry no timestamp) fall back to wall-clock. Also dropped the `Publisher`/`Subscriber` prefix from fields that exist on only one side: `Publisher Timescale`/`Publisher Compression` -> `Timescale`/`Compression`, `Subscriber Max Latency` -> `Max Latency`. `Priority` and `Ordered` keep the prefix since both variants exist and the prose distinguishes them. Wire format unchanged by the rename. moq-timestamp extension: keep graceful degradation since moq-transport objects are independently droppable. Removed SETUP negotiation (the properties are self-describing KVPs). A missing Timescale now defaults to milliseconds and an object with no Timestamp falls back to wall-clock arrival time. Documented that the object Timestamp is absolute, not delta-encoded, because moqt provides no sub-group reliability. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Caution Review failedPull request was closed or merged during review WalkthroughTwo IETF draft documents are updated. In 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
What changed
moq-lite: Timescale & Timestamp are now mandatory
Every Track has a media timeline.
TimescaleMUST be non-zero, and the per-frameTimestamp Delta(FRAME) and per-datagramTimestamp(datagram body) are now unconditional on the wire.Timescale == 0case that omitted the timestamp fields — endpoints no longer have to handle both present/absent variants.Timescaleof0is now a protocol violation (subscriber resets the Subscribe/Fetch stream).moq-lite: dropped
Publisher/Subscriberprefix on one-sided fieldsThe prefix now appears only where the same base name exists on both sides.
Publisher Timescale→TimescalePublisher Compression→CompressionSubscriber Max Latency→Max LatencyPriorityandOrderedkeep the prefix (bothPublisher/Subscribervariants exist and the prioritization rules/example rely on the distinction).moq-timestamp extension: graceful degradation instead of mandatory
moq-transport objects are independently droppable, so the extension keeps the optional/fallback posture (the inverse of moq-lite).
1000(milliseconds); an object with no Timestamp falls back to wall-clock arrival time.Reviewer notes
0x915C0TIMESCALE,0x915C2TIMESTAMP) where the setup option0x915C1used to sit. Harmless given the deliberately sparse values; can renumber to close it if preferred.make(kramdown-rfc + xml2rfc OK).🤖 Generated with Claude Code