# FrameSequencerOptions

URL: https://www.caprid.com/docs/reference/typescript/caprid/moq-media/interfaces/framesequenceroptions/

Defined in: [sequencer.ts:52](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L52)

Options for [createFrameSequencer](https://www.caprid.com/docs/reference/typescript/caprid/moq-media/functions/createframesequencer/).

## Properties

### catchUpAfterUs?

```ts
catchUpAfterUs?: number;
```

Defined in: [sequencer.ts:86](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L86)

Signal a catch-up when frames keep arriving late with none delivered: from the first frame dropped as late to the
latest is at least this long, in microseconds of the clock's local time. Late means past the late-drop limit
(frame grouping) or the target latency (keyframe grouping), as when a relay holds a growing backlog for this
subscriber. The poll after that frame returns `catchUp: true`, once, until a frame is delivered again; whoever owns
the subscription then replaces it at the live edge (a supervised subscriber's `catchUp(key)`), which drops the
relay's backlog, and restarts the sequencer. Set it below the clock's target latency, or a resync re-anchors on
the late frames first. Default: never. Positive and finite.

***

### clock

```ts
clock: PlayoutClock;
```

Defined in: [sequencer.ts:54](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L54)

The broadcast's playout clock. It holds the target latency and is where lateness is measured.

***

### grouping?

```ts
grouping?: "keyframe" | "frame";
```

Defined in: [sequencer.ts:59](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L59)

`'keyframe'` (default): a keyframe opens each group and later objects depend on it, as video. `'frame'`: every
group is independently decodable, as audio.

***

### lateDropUs?

```ts
lateDropUs?: number;
```

Defined in: [sequencer.ts:67](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L67)

Frame grouping only: how far behind the clock's position a frame may still be delivered, in microseconds. Default:
the clock's `lateDropUs`, which every track on the clock shares. A listener set to drop late audio sets it near
its playout target; a reader that wants every frame, such as speech-to-text, sets `Infinity`. Not negative.

***

### reorderWindowUs?

```ts
reorderWindowUs?: number;
```

Defined in: [sequencer.ts:76](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L76)

Frame grouping only: how long, in microseconds of the clock's local time, a frame waits for an earlier group that
has not arrived, counted from when the frame arrived. Default 0: frames go out at once and an earlier group that
arrives after a later one is dropped as behind. A frame that turns late while it waits is dropped as late. For a
reader that wants every frame of a talker, set it to at least the publisher's delivery timeout: a group the
publisher's transport is still resending can arrive that long after the group that follows it. Finite, not
negative.

***

### timestampPlayout?

```ts
timestampPlayout?: 
  | boolean
  | TimestampPlayoutOptions;
```

Defined in: [sequencer.ts:99](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L99)

Frame grouping only: hold frames that arrive early and release each at its timestamp, for a talker that sends
faster than real time, such as a text-to-speech agent handing over a reply in bursts. Without it, a frame more than
the clock's target latency ahead of the position makes the sequencer resync forward, as after a stall, which drops
what the player holds and re-anchors on the newest frame. With it, a frame is held until its timestamp is within
`leadUs` of the position, and only a frame more than `horizonUs` ahead resyncs forward. While the clock has no
position, the first frame anchors one of the sequencer's own on the clock's local time, which gives way to the
clock's once the player reports. Late drop, resyncs and catch-up are unchanged, so a live talker's frames, which
are never early, play as without it. Delay that underruns added (the clock fell behind local time while a queue
built) is given back: held frames go out early by it, less 40 ms, so the jitter buffer trims it, as without this
option. `true` takes the defaults of [TimestampPlayoutOptions](https://www.caprid.com/docs/reference/typescript/caprid/moq-media/interfaces/timestampplayoutoptions/). Default off.

***

### trackProperties?

```ts
trackProperties?: readonly KeyValuePair[];
```

Defined in: [sequencer.ts:61](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/sequencer.ts#L61)

The track properties from SUBSCRIBE_OK, which may declare the Timescale.
