@moq/watch 0.3.1 → 0.4.0

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 (73) hide show
  1. package/README.md +1 -2
  2. package/audio/decoder.d.ts +25 -15
  3. package/audio/decoder.d.ts.map +1 -1
  4. package/audio/emitter.d.ts +13 -10
  5. package/audio/emitter.d.ts.map +1 -1
  6. package/audio/index.d.ts +0 -2
  7. package/audio/index.d.ts.map +1 -1
  8. package/audio/source.d.ts +21 -17
  9. package/audio/source.d.ts.map +1 -1
  10. package/audio/unlock.d.ts +20 -0
  11. package/audio/unlock.d.ts.map +1 -0
  12. package/audio/unlock.test.d.ts +2 -0
  13. package/audio/unlock.test.d.ts.map +1 -0
  14. package/broadcast.d.ts +27 -57
  15. package/broadcast.d.ts.map +1 -1
  16. package/element.d.ts +42 -12
  17. package/element.d.ts.map +1 -1
  18. package/element.js +146 -90
  19. package/element.js.map +1 -1
  20. package/index.d.ts +9 -6
  21. package/index.d.ts.map +1 -1
  22. package/index.js +24 -5
  23. package/index.js.map +1 -0
  24. package/package.json +5 -6
  25. package/source-CWtgjSC_.js +1359 -0
  26. package/source-CWtgjSC_.js.map +1 -0
  27. package/support/element.d.ts.map +1 -1
  28. package/support/element.js.map +1 -1
  29. package/support/index.d.ts +3 -3
  30. package/support/index.d.ts.map +1 -1
  31. package/support/index.js +18 -17
  32. package/support/index.js.map +1 -1
  33. package/sync-zdwVEj9u.js +129 -0
  34. package/sync-zdwVEj9u.js.map +1 -0
  35. package/sync.d.ts +19 -18
  36. package/sync.d.ts.map +1 -1
  37. package/ui/components/buffer-control.d.ts +1 -1
  38. package/ui/components/buffer-control.d.ts.map +1 -1
  39. package/ui/components/fullscreen-button.d.ts +1 -2
  40. package/ui/components/fullscreen-button.d.ts.map +1 -1
  41. package/ui/components/play-pause.d.ts +1 -1
  42. package/ui/components/play-pause.d.ts.map +1 -1
  43. package/ui/element.d.ts.map +1 -1
  44. package/ui/element.js +269 -265
  45. package/ui/element.js.map +1 -1
  46. package/ui/fullscreen.d.ts +1 -2
  47. package/ui/fullscreen.d.ts.map +1 -1
  48. package/video/decoder.d.ts +32 -16
  49. package/video/decoder.d.ts.map +1 -1
  50. package/video/index.d.ts +0 -2
  51. package/video/index.d.ts.map +1 -1
  52. package/video/renderer.d.ts +14 -17
  53. package/video/renderer.d.ts.map +1 -1
  54. package/video/source.d.ts +23 -20
  55. package/video/source.d.ts.map +1 -1
  56. package/audio/backend.d.ts +0 -26
  57. package/audio/backend.d.ts.map +0 -1
  58. package/audio/mse.d.ts +0 -22
  59. package/audio/mse.d.ts.map +0 -1
  60. package/backend.d.ts +0 -65
  61. package/backend.d.ts.map +0 -1
  62. package/broadcast-C2qofUBv.js +0 -1701
  63. package/broadcast-C2qofUBv.js.map +0 -1
  64. package/buffered.d.ts +0 -19
  65. package/buffered.d.ts.map +0 -1
  66. package/mse.d.ts +0 -19
  67. package/mse.d.ts.map +0 -1
  68. package/sync-D67IxmxJ.js +0 -128
  69. package/sync-D67IxmxJ.js.map +0 -1
  70. package/video/backend.d.ts +0 -25
  71. package/video/backend.d.ts.map +0 -1
  72. package/video/mse.d.ts +0 -23
  73. package/video/mse.d.ts.map +0 -1
package/video/source.d.ts CHANGED
@@ -1,18 +1,15 @@
1
1
  import type * as Catalog from "@moq/hang/catalog";
2
- import { type Getter, Signal } from "@moq/signals";
2
+ import type * as Moq from "@moq/net";
3
+ import { type Getter, type Inputs, type Readonlys, Signal } from "@moq/signals";
3
4
  import type { Broadcast } from "../broadcast";
4
- import type { Sync } from "../sync";
5
5
  /**
6
- * A function that checks if a video configuration is supported by the backend.
6
+ * A function that checks if a video configuration can be played.
7
+ *
8
+ * `Decoder.supported` is the WebCodecs probe used by `<moq-watch>`.
7
9
  */
8
10
  export type Supported = (config: Catalog.VideoConfig) => Promise<boolean>;
9
11
  /** A video source error that prevents choosing a usable rendition. */
10
12
  export type SourceError = "unsupported";
11
- export type SourceProps = {
12
- broadcast?: Broadcast | Signal<Broadcast | undefined>;
13
- target?: Target | Signal<Target | undefined>;
14
- supported?: Supported;
15
- };
16
13
  export type Target = {
17
14
  name?: string;
18
15
  pixels?: number;
@@ -20,23 +17,29 @@ export type Target = {
20
17
  height?: number;
21
18
  bitrate?: number;
22
19
  };
20
+ export type SourceInput = {
21
+ broadcast: Getter<Broadcast | undefined>;
22
+ target: Getter<Target | undefined>;
23
+ supported: Getter<Supported | undefined>;
24
+ };
25
+ type SourceOutput = {
26
+ catalog: Signal<Catalog.Video | undefined>;
27
+ available: Signal<Record<string, Catalog.VideoConfig>>;
28
+ error: Signal<SourceError | undefined>;
29
+ track: Signal<string | undefined>;
30
+ config: Signal<Catalog.VideoConfig | undefined>;
31
+ jitter: Signal<Moq.Time.Milli | undefined>;
32
+ };
23
33
  /**
24
34
  * Source handles catalog extraction, support checking, and rendition selection
25
- * for video playback. It is used by both MSE and Decoder backends.
35
+ * for video playback. The Decoder consumes whichever rendition it picks.
26
36
  */
27
37
  export declare class Source {
28
38
  #private;
29
- broadcast: Signal<Broadcast | undefined>;
30
- target: Signal<Target | undefined>;
31
- readonly catalog: Getter<Catalog.Video | undefined>;
32
- readonly available: Getter<Record<string, Catalog.VideoConfig>>;
33
- /** The current source error, or undefined while healthy or still probing. */
34
- readonly error: Getter<SourceError | undefined>;
35
- readonly track: Getter<string | undefined>;
36
- readonly config: Getter<Catalog.VideoConfig | undefined>;
37
- sync: Sync;
38
- supported: Signal<Supported | undefined>;
39
- constructor(sync: Sync, props?: SourceProps);
39
+ readonly in: Readonlys<SourceInput>;
40
+ readonly out: Readonlys<SourceOutput>;
41
+ constructor(props?: Inputs<SourceInput>);
40
42
  close(): void;
41
43
  }
44
+ export {};
42
45
  //# sourceMappingURL=source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/video/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;AAEpC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA0JF;;;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,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,CAAe;IAI9D,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,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAIzC,YAAY,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW,EAc1C;IAiID,KAAK,IAAI,IAAI,CAEZ;CACD"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/video/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAErC,OAAO,EAAU,KAAK,MAAM,EAAU,KAAK,MAAM,EAAE,KAAK,SAAS,EAAa,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAInC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAGvD,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAGvC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAGhD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;CAC3C,CAAC;AA0JF;;;GAGG;AACH,qBAAa,MAAM;;IAClB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAUpC,QAAQ,CAAC,GAAG,0BAAwB;IAIpC,YAAY,KAAK,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,EAUtC;IAwID,KAAK,IAAI,IAAI,CAEZ;CACD"}
@@ -1,26 +0,0 @@
1
- import type { Getter, Signal } from "@moq/signals";
2
- import type { BufferedRanges } from "../buffered";
3
- import type { Source } from "./source";
4
- /** Audio-specific signals that work regardless of the backend source (MSE vs WebCodecs). */
5
- export interface Backend {
6
- /** The source of the audio. */
7
- source: Source;
8
- /** The volume of the audio, between 0 and 1. */
9
- volume: Signal<number>;
10
- /** Whether the audio is muted. */
11
- muted: Signal<boolean>;
12
- /** The stats of the audio. */
13
- stats: Getter<Stats | undefined>;
14
- /** Buffered time ranges for the MSE backend. */
15
- buffered: Getter<BufferedRanges>;
16
- /** The AudioContext used for WebCodecs playback. */
17
- context: Getter<AudioContext | undefined>;
18
- }
19
- /** Audio playback statistics. */
20
- export interface Stats {
21
- /** Number of samples decoded. */
22
- sampleCount: number;
23
- /** Number of encoded bytes received. */
24
- bytesReceived: number;
25
- }
26
- //# sourceMappingURL=backend.d.ts.map
@@ -1 +0,0 @@
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/mse.d.ts DELETED
@@ -1,22 +0,0 @@
1
- import { type Getter, Signal } from "@moq/signals";
2
- import { type BufferedRanges } from "../buffered";
3
- import type { Muxer } from "../mse";
4
- import type { Backend, Stats } from "./backend";
5
- import type { Source } from "./source";
6
- export type MseProps = {
7
- volume?: number | Signal<number>;
8
- muted?: boolean | Signal<boolean>;
9
- };
10
- export declare class Mse implements Backend {
11
- #private;
12
- muxer: Muxer;
13
- source: Source;
14
- volume: Signal<number>;
15
- muted: Signal<boolean>;
16
- readonly stats: Getter<Stats | undefined>;
17
- readonly buffered: Getter<BufferedRanges>;
18
- readonly context: Getter<AudioContext | undefined>;
19
- constructor(muxer: Muxer, source: Source, props?: MseProps);
20
- close(): void;
21
- }
22
- //# sourceMappingURL=mse.d.ts.map
@@ -1 +0,0 @@
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/backend.d.ts DELETED
@@ -1,65 +0,0 @@
1
- import * as Moq from "@moq/net";
2
- import { Effect, Signal } from "@moq/signals";
3
- import * as Audio from "./audio";
4
- import type { Broadcast } from "./broadcast";
5
- import type { BufferedRanges } from "./buffered";
6
- import { type Latency, Sync } from "./sync";
7
- import * as Video from "./video";
8
- export interface Backend {
9
- paused: Signal<boolean>;
10
- video?: Video.Backend;
11
- audio?: Audio.Backend;
12
- latency: Signal<Latency>;
13
- jitter: Signal<Moq.Time.Milli>;
14
- buffered: Signal<boolean>;
15
- reset(): void;
16
- }
17
- export interface MultiBackendProps {
18
- element?: HTMLCanvasElement | HTMLVideoElement | Signal<HTMLCanvasElement | HTMLVideoElement | undefined>;
19
- broadcast?: Broadcast | Signal<Broadcast | undefined>;
20
- latency?: Latency | Signal<Latency>;
21
- connection?: Signal<Moq.Connection.Established | undefined>;
22
- paused?: boolean | Signal<boolean>;
23
- visible?: Video.Visible | Signal<Video.Visible>;
24
- }
25
- declare class VideoBackend implements Video.Backend {
26
- source: Video.Source;
27
- stats: Signal<Video.Stats | undefined>;
28
- stalled: Signal<boolean>;
29
- buffered: Signal<BufferedRanges>;
30
- timestamp: Signal<Moq.Time.Milli>;
31
- constructor(source: Video.Source);
32
- }
33
- declare class AudioBackend implements Audio.Backend {
34
- source: Audio.Source;
35
- volume: Signal<number>;
36
- muted: Signal<boolean>;
37
- stats: Signal<Audio.Stats | undefined>;
38
- buffered: Signal<BufferedRanges>;
39
- context: Signal<AudioContext | undefined>;
40
- constructor(source: Audio.Source);
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
- */
47
- export declare class MultiBackend implements Backend {
48
- #private;
49
- element: Signal<HTMLCanvasElement | HTMLVideoElement | undefined>;
50
- broadcast: Signal<Broadcast | undefined>;
51
- latency: Signal<Latency>;
52
- jitter: Signal<Moq.Time.Milli>;
53
- buffered: Signal<boolean>;
54
- paused: Signal<boolean>;
55
- visible: Signal<Video.Visible>;
56
- video: VideoBackend;
57
- audio: AudioBackend;
58
- sync: Sync;
59
- signals: Effect;
60
- constructor(props?: MultiBackendProps);
61
- reset(): void;
62
- close(): void;
63
- }
64
- export {};
65
- //# sourceMappingURL=backend.d.ts.map
package/backend.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}