@blockcast/mmt-container 2.2.0-main.c4fa878f4ff4 → 2.2.0-main.da2e7cd1dd5d

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 (62) hide show
  1. package/README.md +29 -17
  2. package/dist/browser-runtime.js +241 -149
  3. package/dist/browser-runtime.js.map +3 -3
  4. package/dist/catalog-fec-params.d.ts +17 -1
  5. package/dist/catalog-fec-params.d.ts.map +1 -1
  6. package/dist/catalog-fec-params.js +15 -0
  7. package/dist/catalog-fec-params.js.map +2 -2
  8. package/dist/cmcd-producer.d.ts +60 -47
  9. package/dist/cmcd-producer.d.ts.map +1 -1
  10. package/dist/cmcd-producer.js +138 -109
  11. package/dist/cmcd-producer.js.map +2 -2
  12. package/dist/delivery-catalog.js +24 -15
  13. package/dist/delivery-catalog.js.map +2 -2
  14. package/dist/delta-fallback-config.js.map +1 -1
  15. package/dist/fec-manager.d.ts +3 -1
  16. package/dist/fec-manager.d.ts.map +1 -1
  17. package/dist/fec-manager.js +26 -4
  18. package/dist/fec-manager.js.map +2 -2
  19. package/dist/fec-worker-setup.d.ts +1 -1
  20. package/dist/fec-worker-setup.js +1 -1
  21. package/dist/fec-worker-setup.js.map +1 -1
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +5 -1
  25. package/dist/index.js.map +2 -2
  26. package/dist/media-router.js.map +1 -1
  27. package/dist/mmtp-container-parser.d.ts +2 -0
  28. package/dist/mmtp-container-parser.d.ts.map +1 -1
  29. package/dist/mmtp-container-parser.js +4 -0
  30. package/dist/mmtp-container-parser.js.map +2 -2
  31. package/dist/mmtp-container-parser.no-modules.js +4 -0
  32. package/dist/mmtp-container-parser.no-modules.js.map +2 -2
  33. package/dist/mmtp-decode-pipeline.js +4 -0
  34. package/dist/mmtp-decode-pipeline.js.map +2 -2
  35. package/dist/mmtp-router.d.ts.map +1 -1
  36. package/dist/mmtp-router.js +38 -15
  37. package/dist/mmtp-router.js.map +2 -2
  38. package/dist/multicast-manager.js +64 -19
  39. package/dist/multicast-manager.js.map +2 -2
  40. package/dist/multicast-transport.js +24 -15
  41. package/dist/multicast-transport.js.map +2 -2
  42. package/dist/no-modules.js +4 -0
  43. package/dist/no-modules.js.map +2 -2
  44. package/dist/repair-layer-subscriptions.d.ts +6 -2
  45. package/dist/repair-layer-subscriptions.d.ts.map +1 -1
  46. package/dist/repair-layer-subscriptions.js +6 -3
  47. package/dist/repair-layer-subscriptions.js.map +2 -2
  48. package/dist/track-session.d.ts +1 -1
  49. package/dist/track-session.js.map +1 -1
  50. package/dist/wasm-mmtp-container-parser.js +4 -0
  51. package/dist/wasm-mmtp-container-parser.js.map +2 -2
  52. package/package.json +8 -5
  53. package/schemas/catalog.schema.json +4 -0
  54. package/src/catalog-fec-params.ts +36 -1
  55. package/src/cmcd-producer.ts +189 -179
  56. package/src/fec-manager.ts +26 -4
  57. package/src/fec-worker-setup.ts +2 -2
  58. package/src/index.ts +6 -2
  59. package/src/mmtp-container-parser.ts +12 -0
  60. package/src/mmtp-router.ts +21 -0
  61. package/src/repair-layer-subscriptions.ts +13 -5
  62. package/src/track-session.ts +1 -1
@@ -1459,11 +1459,11 @@ var MOQT_PUBLISHER_PRIORITY = Object.freeze({
1459
1459
  var AMTGatewayManager = class {
1460
1460
  subscriptions = /* @__PURE__ */ new Map();
1461
1461
  messageHandler;
1462
+ messageListenerRegistered = false;
1462
1463
  pendingPackets = /* @__PURE__ */ new Map();
1463
1464
  constructor() {
1464
1465
  this.messageHandler = (event) => {
1465
1466
  const data = event.data;
1466
- console.log(`[AMT] SW message received:`, data.type);
1467
1467
  if (data.type === "UDP_PACKET") {
1468
1468
  this.handlePacket(data);
1469
1469
  } else if (data.type === "SOCKET_ERROR") {
@@ -1472,12 +1472,22 @@ var AMTGatewayManager = class {
1472
1472
  console.log(`[AMT SW Debug] ${data.message}`);
1473
1473
  }
1474
1474
  };
1475
- if (typeof navigator !== "undefined" && navigator.serviceWorker) {
1476
- navigator.serviceWorker.addEventListener("message", this.messageHandler);
1477
- console.log("[AMT] Registered service worker message handler");
1478
- } else {
1479
- console.warn("[AMT] Service worker not available");
1475
+ }
1476
+ ensureMessageListener() {
1477
+ if (this.messageListenerRegistered || typeof navigator === "undefined" || !navigator.serviceWorker || !this.messageHandler) {
1478
+ return;
1479
+ }
1480
+ navigator.serviceWorker.addEventListener("message", this.messageHandler);
1481
+ this.messageListenerRegistered = true;
1482
+ console.log("[AMT] Registered service worker message handler");
1483
+ }
1484
+ removeMessageListener() {
1485
+ if (!this.messageListenerRegistered)
1486
+ return;
1487
+ if (this.messageHandler && typeof navigator !== "undefined" && navigator.serviceWorker) {
1488
+ navigator.serviceWorker.removeEventListener("message", this.messageHandler);
1480
1489
  }
1490
+ this.messageListenerRegistered = false;
1481
1491
  }
1482
1492
  /**
1483
1493
  * Subscribe via AMT tunnel
@@ -1487,6 +1497,7 @@ var AMTGatewayManager = class {
1487
1497
  if (config.protected) {
1488
1498
  throw new Error("AMTGatewayManager refuses a protected join: it reports no per-datagram sender (multicast-02 7.2.7)");
1489
1499
  }
1500
+ this.ensureMessageListener();
1490
1501
  const keyStr = this.getKeyString(key);
1491
1502
  if (this.subscriptions.has(keyStr)) {
1492
1503
  console.log(`[AMT] Reusing existing subscription to ${keyStr}`);
@@ -1522,6 +1533,8 @@ var AMTGatewayManager = class {
1522
1533
  this.subscriptions.delete(keyStr);
1523
1534
  this.pendingPackets.delete(subscription.subscriptionId);
1524
1535
  }
1536
+ if (this.subscriptions.size === 0)
1537
+ this.removeMessageListener();
1525
1538
  throw new Error(`Failed to subscribe via AMT: ${error instanceof Error ? error.message : String(error)}`);
1526
1539
  }
1527
1540
  }
@@ -1543,6 +1556,8 @@ var AMTGatewayManager = class {
1543
1556
  } finally {
1544
1557
  this.subscriptions.delete(handle);
1545
1558
  this.pendingPackets.delete(subscription.subscriptionId);
1559
+ if (this.subscriptions.size === 0)
1560
+ this.removeMessageListener();
1546
1561
  }
1547
1562
  }
1548
1563
  /**
@@ -1559,10 +1574,8 @@ var AMTGatewayManager = class {
1559
1574
  if (!subscriptionId)
1560
1575
  return;
1561
1576
  const subscription = this.subscriptions.get(subscriptionId);
1562
- if (!subscription) {
1563
- console.warn(`[AMT] Received packet for unknown subscription: ${subscriptionId}`);
1577
+ if (!subscription)
1564
1578
  return;
1565
- }
1566
1579
  if (!subscription.handshakeComplete) {
1567
1580
  const queue = this.pendingPackets.get(subscriptionId);
1568
1581
  const packetData2 = data;
@@ -1592,19 +1605,15 @@ var AMTGatewayManager = class {
1592
1605
  if (!subscriptionId)
1593
1606
  return;
1594
1607
  const subscription = this.subscriptions.get(subscriptionId);
1595
- if (!subscription) {
1596
- console.warn(`[AMT] Received error for unknown subscription: ${subscriptionId}`);
1608
+ if (!subscription)
1597
1609
  return;
1598
- }
1599
1610
  subscription.config.onError(new Error(error || "Unknown error"));
1600
1611
  }
1601
1612
  /**
1602
1613
  * Cleanup on destroy
1603
1614
  */
1604
1615
  destroy() {
1605
- if (this.messageHandler && typeof navigator !== "undefined" && navigator.serviceWorker) {
1606
- navigator.serviceWorker.removeEventListener("message", this.messageHandler);
1607
- }
1616
+ this.removeMessageListener();
1608
1617
  const handles = Array.from(this.subscriptions.keys());
1609
1618
  for (const handle of handles) {
1610
1619
  this.unsubscribe(handle).catch((err) => {