@moq/watch 0.2.17 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +4 -3
  2. package/audio/backend.d.ts +11 -1
  3. package/audio/backend.d.ts.map +1 -1
  4. package/audio/buffer.d.ts +10 -1
  5. package/audio/buffer.d.ts.map +1 -1
  6. package/audio/decoder.d.ts +8 -1
  7. package/audio/decoder.d.ts.map +1 -1
  8. package/audio/emitter.d.ts.map +1 -1
  9. package/audio/mse.d.ts +1 -1
  10. package/audio/mse.d.ts.map +1 -1
  11. package/audio/render.d.ts +6 -1
  12. package/audio/render.d.ts.map +1 -1
  13. package/audio/ring-buffer.d.ts +2 -0
  14. package/audio/ring-buffer.d.ts.map +1 -1
  15. package/audio/shared-ring-buffer.d.ts +8 -1
  16. package/audio/shared-ring-buffer.d.ts.map +1 -1
  17. package/audio/source.d.ts.map +1 -1
  18. package/backend.d.ts +22 -18
  19. package/backend.d.ts.map +1 -1
  20. package/{broadcast-80k1hgfM.js → broadcast-Duw8w3D_.js} +446 -439
  21. package/broadcast-Duw8w3D_.js.map +1 -0
  22. package/broadcast.d.ts +15 -3
  23. package/broadcast.d.ts.map +1 -1
  24. package/buffered.d.ts +19 -0
  25. package/buffered.d.ts.map +1 -0
  26. package/element.d.ts +22 -4
  27. package/element.d.ts.map +1 -1
  28. package/element.js +65 -36
  29. package/element.js.map +1 -1
  30. package/index.d.ts +1 -0
  31. package/index.d.ts.map +1 -1
  32. package/index.js +7 -6
  33. package/mse.d.ts.map +1 -1
  34. package/package.json +6 -6
  35. package/support/element.d.ts.map +1 -1
  36. package/support/element.js.map +1 -1
  37. package/support/index.js.map +1 -1
  38. package/sync-D67IxmxJ.js +128 -0
  39. package/sync-D67IxmxJ.js.map +1 -0
  40. package/sync.d.ts +27 -5
  41. package/sync.d.ts.map +1 -1
  42. package/sync.test.d.ts +2 -0
  43. package/sync.test.d.ts.map +1 -0
  44. package/ui/components/latency.d.ts.map +1 -1
  45. package/ui/element.d.ts.map +1 -1
  46. package/ui/element.js +215 -178
  47. package/ui/element.js.map +1 -1
  48. package/video/backend.d.ts +10 -1
  49. package/video/backend.d.ts.map +1 -1
  50. package/video/decoder.d.ts +1 -1
  51. package/video/decoder.d.ts.map +1 -1
  52. package/video/mse.d.ts +3 -3
  53. package/video/mse.d.ts.map +1 -1
  54. package/video/renderer.d.ts +1 -1
  55. package/video/renderer.d.ts.map +1 -1
  56. package/video/source.d.ts.map +1 -1
  57. package/broadcast-80k1hgfM.js.map +0 -1
package/README.md CHANGED
@@ -70,16 +70,17 @@ The simplest way to watch a stream:
70
70
  | `name` | string | required | Broadcast name/path |
71
71
  | `paused` | boolean | false | Pause playback |
72
72
  | `muted` | boolean | false | Mute audio |
73
- | `visible` | `never` \| distance \| `always` | `0px` | When to download video (see below) |
73
+ | `visible` | never, distance, or always | `20%` | When to download video (see below) |
74
74
  | `volume` | number | 0.5 | Audio volume (0-1) |
75
+ | `reload` | boolean | true | Wait for (re)announcement before subscribing. Defaults off for `mediaoverquic.com` relays until they support broadcast discovery. |
75
76
 
76
77
  The `visible` attribute controls when the video track is downloaded, based on the canvas
77
78
  position relative to the viewport:
78
79
 
79
80
  - `never`: never download video.
80
81
  - a distance (`0px`, `200px`, `100%`, ...): download while the canvas is within that distance
81
- of the viewport **and** the tab is visible. `0px` (the default) means strictly on screen; a
82
- larger distance pre-warms the video before it scrolls into view.
82
+ of the viewport **and** the tab is visible. `0px` means strictly on screen; a larger distance
83
+ (`20%`, the default) pre-warms the video before it scrolls into view.
83
84
  - `always`: always download video, regardless of the canvas position or tab visibility.
84
85
 
85
86
  Only the distance mode suspends video while the tab is hidden; `always` keeps downloading.
@@ -1,16 +1,26 @@
1
1
  import type { Getter, Signal } from "@moq/signals";
2
- import type { BufferedRanges } from "../backend";
2
+ import type { BufferedRanges } from "../buffered";
3
3
  import type { Source } from "./source";
4
+ /** Audio-specific signals that work regardless of the backend source (MSE vs WebCodecs). */
4
5
  export interface Backend {
6
+ /** The source of the audio. */
5
7
  source: Source;
8
+ /** The volume of the audio, between 0 and 1. */
6
9
  volume: Signal<number>;
10
+ /** Whether the audio is muted. */
7
11
  muted: Signal<boolean>;
12
+ /** The stats of the audio. */
8
13
  stats: Getter<Stats | undefined>;
14
+ /** Buffered time ranges for the MSE backend. */
9
15
  buffered: Getter<BufferedRanges>;
16
+ /** The AudioContext used for WebCodecs playback. */
10
17
  context: Getter<AudioContext | undefined>;
11
18
  }
19
+ /** Audio playback statistics. */
12
20
  export interface Stats {
21
+ /** Number of samples decoded. */
13
22
  sampleCount: number;
23
+ /** Number of encoded bytes received. */
14
24
  bytesReceived: number;
15
25
  }
16
26
  //# sourceMappingURL=backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/audio/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,OAAO;IAEvB,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAGjC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAGjC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,KAAK;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/audio/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,4FAA4F;AAC5F,MAAM,WAAW,OAAO;IACvB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IAEf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEvB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAEjC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAEjC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,iCAAiC;AACjC,MAAM,WAAW,KAAK;IACrB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;CACtB"}
package/audio/buffer.d.ts CHANGED
@@ -16,6 +16,15 @@ export interface AudioBuffer {
16
16
  insert(timestamp: Time.Micro, data: Float32Array[]): void;
17
17
  /** Update the target latency in samples. */
18
18
  setLatency(samples: number): void;
19
+ /** Flush buffered samples and re-stall, ready to anchor the next utterance (buffered mode). */
20
+ reset(): void;
21
+ /**
22
+ * Resolve once the playhead is near enough to decode a frame at `timestamp`. In buffered mode this
23
+ * applies backpressure: it stays pending while decoding `timestamp` would run more than the latency
24
+ * floor ahead of the playhead, so the caller holds the (encoded) frame instead of decoding it too
25
+ * far ahead of the floor-sized ring. Resolves immediately when not buffered (the ring bounds itself).
26
+ */
27
+ wait(timestamp: Time.Micro): Promise<void>;
19
28
  /** Current playback timestamp (derived from reader position). */
20
29
  readonly timestamp: Getter<Time.Micro>;
21
30
  /** Whether the buffer is stalled (waiting to fill). */
@@ -29,5 +38,5 @@ export declare function supportsSharedArrayBuffer(): boolean;
29
38
  * Create the best audio buffer implementation for the current environment.
30
39
  * Picks `SharedAudioBuffer` when possible, falling back to `PostAudioBuffer`.
31
40
  */
32
- export declare function createAudioBuffer(worklet: AudioWorkletNode, channels: number, rate: number, latencySamples: number): AudioBuffer;
41
+ export declare function createAudioBuffer(worklet: AudioWorkletNode, channels: number, rate: number, latencySamples: number, buffered?: boolean): AudioBuffer;
33
42
  //# sourceMappingURL=buffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/audio/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAI3D;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,gFAAgF;IAChF,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE1D,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElC,gEAAgE;IAChE,KAAK,IAAI,IAAI,CAAC;CACd;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACpB,WAAW,CAOb"}
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/audio/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAwD3D;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,gFAAgF;IAChF,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE1D,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,+FAA+F;IAC/F,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElC,gEAAgE;IAChE,KAAK,IAAI,IAAI,CAAC;CACd;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,QAAQ,UAAQ,GACd,WAAW,CAOb"}
@@ -1,13 +1,19 @@
1
1
  import { Time } from "@moq/net";
2
2
  import { type Getter, Signal } from "@moq/signals";
3
- import type { BufferedRanges } from "../backend";
3
+ import type { BufferedRanges } from "../buffered";
4
4
  import type { Source } from "./source";
5
5
  export type DecoderProps = {
6
6
  enabled?: boolean | Signal<boolean>;
7
7
  };
8
8
  export interface AudioStats {
9
+ /** Number of encoded bytes received. */
9
10
  bytesReceived: number;
10
11
  }
12
+ /**
13
+ * Downloads audio from a track and emits it to an AudioContext.
14
+ *
15
+ * The user is responsible for hooking up audio to speakers, an analyzer, etc.
16
+ */
11
17
  export declare class Decoder {
12
18
  #private;
13
19
  source: Source;
@@ -20,6 +26,7 @@ export declare class Decoder {
20
26
  readonly stalled: Getter<boolean>;
21
27
  readonly buffered: Getter<BufferedRanges>;
22
28
  constructor(source: Source, props?: DecoderProps);
29
+ reset(): void;
23
30
  close(): void;
24
31
  }
25
32
  //# sourceMappingURL=decoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/audio/decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG;IAE1B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,OAAO;;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAiB;IAKnE,QAAQ,CAAC,IAAI,EAAoB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAG/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAoB;IAGnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAe;IAI7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAmB;IAIrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAiB;IAOlD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;gBAO/C,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY;IAwVhD,KAAK;CAGL"}
1
+ {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/audio/decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG;IAE1B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,OAAO;;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAiB;IAKnE,QAAQ,CAAC,IAAI,EAAoB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAG/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAoB;IAGnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAe;IAI7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAmB;IAIrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAiB;IAOlD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;IAuB3D,YAAY,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAc/C;IA+VD,KAAK,IAAI,IAAI,CAEZ;IAaD,KAAK,SAEJ;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/audio/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,MAAM,YAAY,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACnC,CAAC;AAGF,qBAAa,OAAO;;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAIvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAUZ,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,YAAY;IAiEjD,KAAK;CAGL"}
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/audio/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,MAAM,YAAY,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACnC,CAAC;AAGF,qBAAa,OAAO;;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAIvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAUxB,YAAY,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,YAAY,EA+DhD;IAED,KAAK,SAEJ;CACD"}
package/audio/mse.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type Getter, Signal } from "@moq/signals";
2
- import { type BufferedRanges } from "../backend";
2
+ import { type BufferedRanges } from "../buffered";
3
3
  import type { Muxer } from "../mse";
4
4
  import type { Backend, Stats } from "./backend";
5
5
  import type { Source } from "./source";
@@ -1 +1 @@
1
- {"version":3,"file":"mse.d.ts","sourceRoot":"","sources":["../../src/audio/mse.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,YAAY,CAAC;AAEpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,qBAAa,GAAI,YAAW,OAAO;;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAe;IAGxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;IAG3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAmD;gBAIzF,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ;IAwM1D,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"mse.d.ts","sourceRoot":"","sources":["../../src/audio/mse.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,qBAAa,GAAI,YAAW,OAAO;;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAe;IAGxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;IAG3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAmD;IAIrG,YAAY,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAUzD;IA8LD,KAAK,IAAI,IAAI,CAEZ;CACD"}
package/audio/render.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Time } from "@moq/net";
2
2
  import type { SharedRingBufferInit } from "./shared-ring-buffer";
3
- export type Message = InitShared | InitPost | Data | Latency;
3
+ export type Message = InitShared | InitPost | Data | Latency | Reset;
4
4
  export type ToMain = State;
5
5
  /** Init message when SharedArrayBuffer is available. */
6
6
  export interface InitShared extends SharedRingBufferInit {
@@ -12,6 +12,11 @@ export interface InitPost {
12
12
  channels: number;
13
13
  rate: number;
14
14
  latency: Time.Milli;
15
+ buffered: boolean;
16
+ }
17
+ /** Flush the buffer and re-stall (fallback path only; shared path resets via Atomics). */
18
+ export interface Reset {
19
+ type: "reset";
15
20
  }
16
21
  /** Audio samples sent via postMessage (fallback path only). */
17
22
  export interface Data {
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/audio/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC;AAE3B,wDAAwD;AACxD,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACvD,IAAI,EAAE,aAAa,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,+DAA+D;AAC/D,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/audio/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC;AACrE,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC;AAE3B,wDAAwD;AACxD,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACvD,IAAI,EAAE,aAAa,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,0FAA0F;AAC1F,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,OAAO,CAAC;CACd;AAED,+DAA+D;AAC/D,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACjB"}
@@ -7,6 +7,7 @@ export declare class AudioRingBuffer {
7
7
  rate: number;
8
8
  channels: number;
9
9
  latency: Time.Milli;
10
+ buffered?: boolean;
10
11
  });
11
12
  get stalled(): boolean;
12
13
  get timestamp(): Time.Micro;
@@ -14,6 +15,7 @@ export declare class AudioRingBuffer {
14
15
  get capacity(): number;
15
16
  resize(latency: Time.Milli): void;
16
17
  write(timestamp: Time.Micro, data: Float32Array[]): void;
18
+ reset(): void;
17
19
  read(output: Float32Array[]): number;
18
20
  }
19
21
  //# sourceMappingURL=ring-buffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/audio/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,qBAAa,eAAe;;IAK3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGd,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAA;KAAE;IAiB1E,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAE1B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAgCjC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI;IAiExD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM;CAsBpC"}
1
+ {"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/audio/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,qBAAa,eAAe;;IAK3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAU1B,YAAY,KAAK,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACnB,EAqBA;IAMD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAE1B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAgChC;IAED,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CA6EvD;IAGD,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAqBnC;CACD"}
@@ -5,13 +5,15 @@ export interface SharedRingBufferInit {
5
5
  rate: number;
6
6
  samples: SharedArrayBuffer;
7
7
  control: SharedArrayBuffer;
8
+ buffered: boolean;
8
9
  }
9
- export declare function allocSharedRingBuffer(channels: number, capacity: number, rate: number): SharedRingBufferInit;
10
+ export declare function allocSharedRingBuffer(channels: number, capacity: number, rate: number, buffered?: boolean): SharedRingBufferInit;
10
11
  export declare class SharedRingBuffer {
11
12
  #private;
12
13
  readonly channels: number;
13
14
  readonly capacity: number;
14
15
  readonly rate: number;
16
+ readonly buffered: boolean;
15
17
  readonly init: SharedRingBufferInit;
16
18
  constructor(init: SharedRingBufferInit);
17
19
  /**
@@ -26,6 +28,11 @@ export declare class SharedRingBuffer {
26
28
  read(output: Float32Array[]): number;
27
29
  /** Update the target latency in samples. */
28
30
  setLatency(samples: number): void;
31
+ /**
32
+ * Flush buffered samples and re-stall, ready to anchor the next utterance (buffered mode).
33
+ * Main thread only. The worklet reader sees STALLED and stops until the next insert.
34
+ */
35
+ reset(): void;
29
36
  /**
30
37
  * Allocate a new ring with `newCapacity` samples and copy the unread window
31
38
  * [READ, WRITE) plus control state into it. Used when growing capacity so
@@ -1 +1 @@
1
- {"version":3,"file":"shared-ring-buffer.d.ts","sourceRoot":"","sources":["../../src/audio/shared-ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAShC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAa5G;AA0BD,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAKxB,IAAI,EAAE,oBAAoB;IAetC;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI;IA+DzD;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM;IAkCpC,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IA8B7C,6DAA6D;IAC7D,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAG1B;IAED,uDAAuD;IACvD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACD"}
1
+ {"version":3,"file":"shared-ring-buffer.d.ts","sourceRoot":"","sources":["../../src/audio/shared-ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAShC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAE3B,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,UAAQ,GACd,oBAAoB,CAatB;AA0BD,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAQpC,YAAY,IAAI,EAAE,oBAAoB,EAcrC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAqExD;IAED;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAiCnC;IAED,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI,CAKZ;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CA6B5C;IAED,6DAA6D;IAC7D,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAG1B;IAED,uDAAuD;IACvD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/audio/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAKpC,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAG7C,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,qBAAa,MAAM;;IAClB,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAGpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAmB;IAGlF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAe;IAGzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAgB;IAExE,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGzC,IAAI,EAAE,IAAI,CAAC;gBAIC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW;IAgG3C,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/audio/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAKpC,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAG7C,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,qBAAa,MAAM;;IAClB,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAGpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAmB;IAGlF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAe;IAGzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAgB;IAExE,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGzC,IAAI,EAAE,IAAI,CAAC;IAIX,YAAY,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW,EAe1C;IAiFD,KAAK,IAAI,IAAI,CAEZ;CACD"}
package/backend.d.ts CHANGED
@@ -1,21 +1,18 @@
1
1
  import * as Moq from "@moq/net";
2
- import { Signal } from "@moq/signals";
2
+ import { Effect, Signal } from "@moq/signals";
3
3
  import * as Audio from "./audio";
4
4
  import type { Broadcast } from "./broadcast";
5
+ import type { BufferedRanges } from "./buffered";
5
6
  import { type Latency, Sync } from "./sync";
6
7
  import * as Video from "./video";
7
- export interface BufferedRange {
8
- start: Moq.Time.Milli;
9
- end: Moq.Time.Milli;
10
- }
11
- export type BufferedRanges = BufferedRange[];
12
- export declare function timeRangesToArray(ranges: TimeRanges): BufferedRanges;
13
8
  export interface Backend {
14
9
  paused: Signal<boolean>;
15
10
  video?: Video.Backend;
16
11
  audio?: Audio.Backend;
17
12
  latency: Signal<Latency>;
18
13
  jitter: Signal<Moq.Time.Milli>;
14
+ buffered: Signal<boolean>;
15
+ reset(): void;
19
16
  }
20
17
  export interface MultiBackendProps {
21
18
  element?: HTMLCanvasElement | HTMLVideoElement | Signal<HTMLCanvasElement | HTMLVideoElement | undefined>;
@@ -27,34 +24,41 @@ export interface MultiBackendProps {
27
24
  }
28
25
  declare class VideoBackend implements Video.Backend {
29
26
  source: Video.Source;
30
- stats: Moq.Signals.Signal<Video.Stats | undefined>;
31
- stalled: Moq.Signals.Signal<boolean>;
32
- buffered: Moq.Signals.Signal<BufferedRanges>;
33
- timestamp: Moq.Signals.Signal<Moq.Time.Milli>;
27
+ stats: Signal<Video.Stats | undefined>;
28
+ stalled: Signal<boolean>;
29
+ buffered: Signal<BufferedRanges>;
30
+ timestamp: Signal<Moq.Time.Milli>;
34
31
  constructor(source: Video.Source);
35
32
  }
36
33
  declare class AudioBackend implements Audio.Backend {
37
34
  source: Audio.Source;
38
- volume: Moq.Signals.Signal<number>;
39
- muted: Moq.Signals.Signal<boolean>;
40
- stats: Moq.Signals.Signal<Audio.Stats | undefined>;
41
- buffered: Moq.Signals.Signal<BufferedRanges>;
42
- context: Moq.Signals.Signal<AudioContext | undefined>;
35
+ volume: Signal<number>;
36
+ muted: Signal<boolean>;
37
+ stats: Signal<Audio.Stats | undefined>;
38
+ buffered: Signal<BufferedRanges>;
39
+ context: Signal<AudioContext | undefined>;
43
40
  constructor(source: Audio.Source);
44
41
  }
42
+ /**
43
+ * A generic backend that supports either MSE or WebCodecs based on the provided element.
44
+ *
45
+ * This primarily backs the `<moq-watch>` web component, but is useful standalone.
46
+ */
45
47
  export declare class MultiBackend implements Backend {
46
48
  #private;
47
- element: Moq.Signals.Signal<HTMLVideoElement | HTMLCanvasElement | undefined>;
49
+ element: Signal<HTMLCanvasElement | HTMLVideoElement | undefined>;
48
50
  broadcast: Signal<Broadcast | undefined>;
49
51
  latency: Signal<Latency>;
50
52
  jitter: Signal<Moq.Time.Milli>;
53
+ buffered: Signal<boolean>;
51
54
  paused: Signal<boolean>;
52
55
  visible: Signal<Video.Visible>;
53
56
  video: VideoBackend;
54
57
  audio: AudioBackend;
55
58
  sync: Sync;
56
- signals: Moq.Signals.Effect;
59
+ signals: Effect;
57
60
  constructor(props?: MultiBackendProps);
61
+ reset(): void;
58
62
  close(): void;
59
63
  }
60
64
  export {};
package/backend.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAGjC,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;CACpB;AACD,MAAM,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;AAG7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAUpE;AAED,MAAM,WAAW,OAAO;IAEvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGxB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAC1G,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAGpC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE5D,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAGnC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAChD;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAE1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,KAAK,8CAAkD;IAGvD,OAAO,8BAA8B;IAGrC,QAAQ,qCAAkC;IAG1C,SAAS,qCAAmD;gBAEhD,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAC1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,MAAM,6BAA2B;IAGjC,KAAK,8BAA8B;IAGnC,KAAK,8CAAkD;IAGvD,QAAQ,qCAAkC;IAG1C,OAAO,+CAAmD;gBAE9C,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAKD,qBAAa,YAAa,YAAW,OAAO;;IAC3C,OAAO,uEAA2E;IAClF,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGxB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE/B,KAAK,EAAE,YAAY,CAAC;IAGpB,KAAK,EAAE,YAAY,CAAC;IAIpB,IAAI,EAAE,IAAI,CAAC;IAEX,OAAO,qBAAgB;gBAEX,KAAK,CAAC,EAAE,iBAAiB;IAiGrC,KAAK,IAAI,IAAI;CAMb"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}