Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d263a0f
chore(quest): claim quest/m1/subscribe-ranges/model
kixelated Oct 16, 2026
36c1f47
feat(net)!: carry group ranges on track::Subscription
kixelated Oct 16, 2026
03e68a9
feat(ffi)!: carry subscription ranges and order through moq-ffi and m…
kixelated Oct 16, 2026
3fe7b3f
test(net): cover merged subscription ranges in-process and through a …
kixelated Oct 16, 2026
209a1ff
perf(net): union subscription ranges once per aggregate
kixelated Oct 16, 2026
39ee369
feat(bindings)!: carry subscription ranges and order through every wr…
kixelated Oct 16, 2026
118a422
chore(quest): finish model ranges, split dynamic range requests
kixelated Oct 16, 2026
0de44c0
style: format and convert the remaining start floors to with_groups
kixelated Oct 16, 2026
3c47a5f
fix(net): gate the wire-bound helpers on the async feature
kixelated Oct 16, 2026
35a6e67
fix(net): expect result_large_err only where the producer is large
kixelated Oct 16, 2026
d32e181
test(py): cast anchor variants for pyright
kixelated Oct 16, 2026
f0612ca
Merge origin/main into quest/m1/subscribe-ranges/model
kixelated Oct 17, 2026
f717aac
docs(net): say what a relative anchor sends upstream today
kixelated Oct 17, 2026
c8a8278
Merge origin/main into quest/m1/subscribe-ranges/model
kixelated Oct 17, 2026
ef5ef40
perf(net): keep the range union incremental
kixelated Oct 17, 2026
d7aae3f
fix(net): expect result_large_err on every target again
kixelated Oct 17, 2026
374e453
fix(net): count a relative start back from the first group, even once…
kixelated Oct 17, 2026
7d44715
fix(net): resolve relative starts against groups, not datagrams
kixelated Oct 17, 2026
c189a16
fix(net): skip empty ranges when resolving a subscriber's floor
kixelated Oct 17, 2026
405e94b
fix(net): count relative starts from produced groups, not fetched bac…
kixelated Oct 17, 2026
f102ff4
test(net): pin live ranges delivering datagrams on a track without gr…
kixelated Oct 17, 2026
5f662fd
quest: hand relative-start re-resolution outside the model to dynamic.md
kixelated Oct 17, 2026
6e1f92f
Merge origin/main into quest/m1/subscribe-ranges/model
kixelated Oct 17, 2026
611e008
Merge origin/main into quest/m1/subscribe-ranges/model
kixelated Oct 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion dart/moq/lib/src/aliases.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,18 @@ typedef Datagram = MoqDatagram;
/// A payload plus the timestamp it should be presented at.
typedef Frame = MoqFrame;

/// Tunes how a track subscription is delivered: priority, group ordering, and range.
/// Tunes how a track subscription is delivered: priority, latency budget, ranges, and group ordering.
typedef Subscription = MoqSubscription;

/// A span of a track to deliver: from `start` up to `end`, or onward when `end` is null.
typedef Range = MoqRange;

/// Where one end of a [Range] falls: absolute or relative to the latest group.
typedef Anchor = MoqAnchor;

/// Which pending group the publisher sends first.
typedef Order = MoqOrder;

/// Options for fetching one past group by sequence.
typedef FetchGroupOptions = MoqFetchGroupOptions;

Expand Down
33 changes: 33 additions & 0 deletions dart/moq/test/moq_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,39 @@ void main() {
broadcast.close();
});

test(
'an ascending subscription reads a cached backlog oldest first',
() async {
final broadcast = BroadcastProducer();
final track = broadcast.publishTrack(
name: 'backlog',
info: TrackInfo(timescale: 1000000),
);
for (var ms = 0; ms < 3; ms++) {
final group = track.appendGroup();
group.writeFrame(
frame: Frame(payload: utf8.encode('x'), timestampUs: ms * 1000),
);
group.finish();
}

final consumer = track.consume(
subscription: Subscription(
maxDelayUs: 10000000,
ranges: [Range(start: RelativeMoqAnchor(2))],
order: Order.ascending,
),
);
final sequences = <int>[];
for (var i = 0; i < 3; i++) {
final group = await consumer.recvGroup().timeout(timeout);
sequences.add(group!.sequence());
}
expect(sequences, [0, 1, 2]);
broadcast.close();
},
);

test('connects, announces, subscribes, and delivers a frame', () async {
final relay = MoqOriginProducer(config: MoqOriginConfig());
final server = MoqServer(
Expand Down
Loading
Loading