@blockcast/mmt-transport 0.2.0 → 0.2.2

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 (98) hide show
  1. package/README.md +264 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/abr-controller.d.ts +3 -0
  4. package/dist/abr-controller.d.ts.map +1 -1
  5. package/dist/abr-controller.js +5 -0
  6. package/dist/abr-controller.js.map +1 -1
  7. package/dist/amt-gateway.d.ts.map +1 -1
  8. package/dist/amt-gateway.js +2 -1
  9. package/dist/amt-gateway.js.map +1 -1
  10. package/dist/endpoint-config.d.ts +20 -0
  11. package/dist/endpoint-config.d.ts.map +1 -0
  12. package/dist/endpoint-config.js +103 -0
  13. package/dist/endpoint-config.js.map +1 -0
  14. package/dist/endpoint-config.test.d.ts +2 -0
  15. package/dist/endpoint-config.test.d.ts.map +1 -0
  16. package/dist/endpoint-config.test.js +39 -0
  17. package/dist/endpoint-config.test.js.map +1 -0
  18. package/dist/fec-client.d.ts +2 -2
  19. package/dist/fec-client.d.ts.map +1 -1
  20. package/dist/fec-client.js +10 -5
  21. package/dist/fec-client.js.map +1 -1
  22. package/dist/index.d.ts +8 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/mmt-transport.no-modules.js +1154 -0
  27. package/dist/mmt-transport.no-modules.js.map +7 -0
  28. package/dist/multicast-orchestrator.d.ts +56 -0
  29. package/dist/multicast-orchestrator.d.ts.map +1 -0
  30. package/dist/multicast-orchestrator.js +123 -0
  31. package/dist/multicast-orchestrator.js.map +1 -0
  32. package/dist/multicast-subscription-pool.d.ts +18 -0
  33. package/dist/multicast-subscription-pool.d.ts.map +1 -0
  34. package/dist/multicast-subscription-pool.js +130 -0
  35. package/dist/multicast-subscription-pool.js.map +1 -0
  36. package/dist/multicast-subscription-pool.test.d.ts +2 -0
  37. package/dist/multicast-subscription-pool.test.d.ts.map +1 -0
  38. package/dist/multicast-subscription-pool.test.js +108 -0
  39. package/dist/multicast-subscription-pool.test.js.map +1 -0
  40. package/dist/multicast-tier.d.ts +14 -0
  41. package/dist/multicast-tier.d.ts.map +1 -0
  42. package/dist/multicast-tier.js +22 -0
  43. package/dist/multicast-tier.js.map +1 -0
  44. package/dist/multicast-tier.test.d.ts +2 -0
  45. package/dist/multicast-tier.test.d.ts.map +1 -0
  46. package/dist/multicast-tier.test.js +75 -0
  47. package/dist/multicast-tier.test.js.map +1 -0
  48. package/dist/no-modules.d.ts +29 -0
  49. package/dist/no-modules.d.ts.map +1 -0
  50. package/dist/no-modules.js +35 -0
  51. package/dist/no-modules.js.map +1 -0
  52. package/dist/stall-detector.d.ts +22 -0
  53. package/dist/stall-detector.d.ts.map +1 -0
  54. package/dist/stall-detector.js +46 -0
  55. package/dist/stall-detector.js.map +1 -0
  56. package/dist/stall-detector.test.d.ts +2 -0
  57. package/dist/stall-detector.test.d.ts.map +1 -0
  58. package/dist/stall-detector.test.js +33 -0
  59. package/dist/stall-detector.test.js.map +1 -0
  60. package/dist/takeover.d.ts +49 -0
  61. package/dist/takeover.d.ts.map +1 -0
  62. package/dist/takeover.js +43 -0
  63. package/dist/takeover.js.map +1 -0
  64. package/dist/transport-manager.d.ts +28 -18
  65. package/dist/transport-manager.d.ts.map +1 -1
  66. package/dist/transport-manager.js +192 -138
  67. package/dist/transport-manager.js.map +1 -1
  68. package/dist/transport-manager.test.d.ts +2 -0
  69. package/dist/transport-manager.test.d.ts.map +1 -0
  70. package/dist/transport-manager.test.js +155 -0
  71. package/dist/transport-manager.test.js.map +1 -0
  72. package/dist/types.d.ts +36 -36
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js.map +1 -1
  75. package/dist/unicast-fallback.d.ts +36 -0
  76. package/dist/unicast-fallback.d.ts.map +1 -0
  77. package/dist/unicast-fallback.js +53 -0
  78. package/dist/unicast-fallback.js.map +1 -0
  79. package/package.json +6 -6
  80. package/src/abr-controller.ts +9 -0
  81. package/src/amt-gateway.ts +2 -1
  82. package/src/endpoint-config.test.ts +54 -0
  83. package/src/endpoint-config.ts +121 -0
  84. package/src/fec-client.ts +11 -5
  85. package/src/index.ts +72 -2
  86. package/src/multicast-orchestrator.ts +150 -0
  87. package/src/multicast-subscription-pool.test.ts +115 -0
  88. package/src/multicast-subscription-pool.ts +164 -0
  89. package/src/multicast-tier.test.ts +80 -0
  90. package/src/multicast-tier.ts +32 -0
  91. package/src/no-modules.ts +44 -0
  92. package/src/stall-detector.test.ts +34 -0
  93. package/src/stall-detector.ts +63 -0
  94. package/src/takeover.ts +71 -0
  95. package/src/transport-manager.test.ts +192 -0
  96. package/src/transport-manager.ts +203 -153
  97. package/src/types.ts +50 -31
  98. package/src/unicast-fallback.ts +57 -0
@@ -0,0 +1,57 @@
1
+ export interface FallbackTrack { name: string; type: "video" | "audio"; }
2
+ export interface FallbackGroup { readFrame(): Promise<Uint8Array | undefined>; close(): void; }
3
+ export interface FallbackSubscription { nextGroup(): Promise<FallbackGroup | undefined>; close(): void; }
4
+ export interface FallbackBroadcast { subscribe(name: string, priority: number): FallbackSubscription; }
5
+ export interface FallbackSessions { enterUnicastFallback(): void; }
6
+ export type FallbackGroupLike = FallbackGroup;
7
+ export type FallbackSubLike = FallbackSubscription;
8
+ export type FallbackBroadcastLike = FallbackBroadcast;
9
+ export interface FallbackSessionManagerLike extends FallbackSessions { hasActiveFallback(): boolean; }
10
+
11
+ export function runUnicastFallback(input: {
12
+ tracks: FallbackTrack[];
13
+ broadcast: FallbackBroadcast;
14
+ sessions: FallbackSessions;
15
+ onPacket(packet: Uint8Array): void;
16
+ priority: number;
17
+ signal: AbortSignal;
18
+ onError?(trackName: string, error: unknown): void;
19
+ }): { done: Promise<void> } {
20
+ input.sessions.enterUnicastFallback();
21
+ const tracks = Array.from(new Map(input.tracks.map((track) => [track.name, track])).values());
22
+ let resolveAbort: (value: undefined) => void;
23
+ const aborted = new Promise<undefined>((resolve) => {
24
+ resolveAbort = resolve;
25
+ if (input.signal.aborted) resolve(undefined);
26
+ });
27
+ const onAbort = () => resolveAbort(undefined);
28
+ if (!input.signal.aborted) input.signal.addEventListener("abort", onAbort, { once: true });
29
+
30
+ const drainers = tracks.map(async (track) => {
31
+ const subscription = input.broadcast.subscribe(track.name, input.priority);
32
+ try {
33
+ while (!input.signal.aborted) {
34
+ const nextGroup = subscription.nextGroup();
35
+ const group = await Promise.race([nextGroup, aborted]);
36
+ if (!group && input.signal.aborted) void nextGroup.then((lateGroup) => lateGroup?.close());
37
+ if (!group) break;
38
+ try {
39
+ while (!input.signal.aborted) {
40
+ const frame = await Promise.race([group.readFrame(), aborted]);
41
+ if (!frame) break;
42
+ input.onPacket(frame);
43
+ }
44
+ } finally { group.close(); }
45
+ }
46
+ } catch (error) {
47
+ if (!input.signal.aborted) {
48
+ if (input.onError) input.onError(track.name, error);
49
+ else console.warn(`[unicast-fallback] drainer error on ${track.name}:`, error);
50
+ }
51
+ } finally { subscription.close(); }
52
+ });
53
+ const done = Promise.all(drainers).then(() => undefined).finally(() => {
54
+ input.signal.removeEventListener("abort", onAbort);
55
+ });
56
+ return { done };
57
+ }