@blockcast/mmt-container 2.2.0-main.efb4fa4521af → 2.2.0-main.fb5c7dfbe2de

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 (82) hide show
  1. package/README.md +29 -17
  2. package/dist/browser-runtime.js +1336 -302
  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 +26 -16
  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 +70 -12
  16. package/dist/fec-manager.d.ts.map +1 -1
  17. package/dist/fec-manager.js +403 -58
  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 +4 -4
  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/iso-block-locator.d.ts +48 -13
  27. package/dist/iso-block-locator.d.ts.map +1 -1
  28. package/dist/iso-block-locator.js +97 -25
  29. package/dist/iso-block-locator.js.map +2 -2
  30. package/dist/iso-bmff-timing.d.ts +10 -1
  31. package/dist/iso-bmff-timing.d.ts.map +1 -1
  32. package/dist/iso-bmff-timing.js +36 -2
  33. package/dist/iso-bmff-timing.js.map +2 -2
  34. package/dist/media-router.js.map +1 -1
  35. package/dist/mmtp-container-parser.d.ts +79 -10
  36. package/dist/mmtp-container-parser.d.ts.map +1 -1
  37. package/dist/mmtp-container-parser.js +207 -26
  38. package/dist/mmtp-container-parser.js.map +2 -2
  39. package/dist/mmtp-container-parser.no-modules.js +209 -29
  40. package/dist/mmtp-container-parser.no-modules.js.map +2 -2
  41. package/dist/mmtp-decode-pipeline.js +206 -26
  42. package/dist/mmtp-decode-pipeline.js.map +2 -2
  43. package/dist/mmtp-router.d.ts +34 -8
  44. package/dist/mmtp-router.d.ts.map +1 -1
  45. package/dist/mmtp-router.js +555 -79
  46. package/dist/mmtp-router.js.map +2 -2
  47. package/dist/multicast-manager.d.ts +13 -3
  48. package/dist/multicast-manager.d.ts.map +1 -1
  49. package/dist/multicast-manager.js +980 -146
  50. package/dist/multicast-manager.js.map +2 -2
  51. package/dist/multicast-transport.js +28 -18
  52. package/dist/multicast-transport.js.map +2 -2
  53. package/dist/no-modules.js +206 -26
  54. package/dist/no-modules.js.map +2 -2
  55. package/dist/repair-fetch.d.ts +36 -8
  56. package/dist/repair-fetch.d.ts.map +1 -1
  57. package/dist/repair-fetch.js +285 -26
  58. package/dist/repair-fetch.js.map +3 -3
  59. package/dist/repair-layer-subscriptions.d.ts +6 -2
  60. package/dist/repair-layer-subscriptions.d.ts.map +1 -1
  61. package/dist/repair-layer-subscriptions.js +6 -3
  62. package/dist/repair-layer-subscriptions.js.map +2 -2
  63. package/dist/track-session.d.ts +1 -1
  64. package/dist/track-session.d.ts.map +1 -1
  65. package/dist/track-session.js +1 -0
  66. package/dist/track-session.js.map +2 -2
  67. package/dist/wasm-mmtp-container-parser.js +206 -26
  68. package/dist/wasm-mmtp-container-parser.js.map +2 -2
  69. package/package.json +8 -5
  70. package/src/catalog-fec-params.ts +36 -1
  71. package/src/cmcd-producer.ts +189 -179
  72. package/src/fec-manager.ts +433 -32
  73. package/src/fec-worker-setup.ts +2 -2
  74. package/src/index.ts +9 -2
  75. package/src/iso-block-locator.ts +133 -31
  76. package/src/iso-bmff-timing.ts +40 -1
  77. package/src/mmtp-container-parser.ts +306 -29
  78. package/src/mmtp-router.ts +548 -38
  79. package/src/multicast-manager.ts +44 -6
  80. package/src/repair-fetch.ts +363 -49
  81. package/src/repair-layer-subscriptions.ts +13 -5
  82. package/src/track-session.ts +4 -1
@@ -1335,9 +1335,9 @@ async function openSubscription(rx, openedPromise, options, packetIds) {
1335
1335
  } catch (error) {
1336
1336
  throw new MulticastError("subscription-failed", "MulticastReceiver did not open", error);
1337
1337
  }
1338
- if (rx.integrityScheme !== INTEGRITY_SCHEME) {
1338
+ if (opened.integrityScheme !== INTEGRITY_SCHEME) {
1339
1339
  await rx.close();
1340
- throw unsupported(`integrity scheme ${String(rx.integrityScheme)} is not ${INTEGRITY_SCHEME}`);
1340
+ throw unsupported(`integrity scheme ${String(opened.integrityScheme)} is not ${INTEGRITY_SCHEME}`);
1341
1341
  }
1342
1342
  const events = new EventTarget();
1343
1343
  let state = "connected";
@@ -1456,14 +1456,15 @@ var MOQT_PUBLISHER_PRIORITY = Object.freeze({
1456
1456
  });
1457
1457
 
1458
1458
  // node_modules/@blockcast/mmt-transport/dist/amt-gateway.js
1459
+ var MAX_PENDING_PACKETS = 256;
1459
1460
  var AMTGatewayManager = class {
1460
1461
  subscriptions = /* @__PURE__ */ new Map();
1461
1462
  messageHandler;
1463
+ messageListenerRegistered = false;
1462
1464
  pendingPackets = /* @__PURE__ */ new Map();
1463
1465
  constructor() {
1464
1466
  this.messageHandler = (event) => {
1465
1467
  const data = event.data;
1466
- console.log(`[AMT] SW message received:`, data.type);
1467
1468
  if (data.type === "UDP_PACKET") {
1468
1469
  this.handlePacket(data);
1469
1470
  } else if (data.type === "SOCKET_ERROR") {
@@ -1472,12 +1473,22 @@ var AMTGatewayManager = class {
1472
1473
  console.log(`[AMT SW Debug] ${data.message}`);
1473
1474
  }
1474
1475
  };
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");
1476
+ }
1477
+ ensureMessageListener() {
1478
+ if (this.messageListenerRegistered || typeof navigator === "undefined" || !navigator.serviceWorker || !this.messageHandler) {
1479
+ return;
1480
+ }
1481
+ navigator.serviceWorker.addEventListener("message", this.messageHandler);
1482
+ this.messageListenerRegistered = true;
1483
+ console.log("[AMT] Registered service worker message handler");
1484
+ }
1485
+ removeMessageListener() {
1486
+ if (!this.messageListenerRegistered)
1487
+ return;
1488
+ if (this.messageHandler && typeof navigator !== "undefined" && navigator.serviceWorker) {
1489
+ navigator.serviceWorker.removeEventListener("message", this.messageHandler);
1480
1490
  }
1491
+ this.messageListenerRegistered = false;
1481
1492
  }
1482
1493
  /**
1483
1494
  * Subscribe via AMT tunnel
@@ -1487,6 +1498,7 @@ var AMTGatewayManager = class {
1487
1498
  if (config.protected) {
1488
1499
  throw new Error("AMTGatewayManager refuses a protected join: it reports no per-datagram sender (multicast-02 7.2.7)");
1489
1500
  }
1501
+ this.ensureMessageListener();
1490
1502
  const keyStr = this.getKeyString(key);
1491
1503
  if (this.subscriptions.has(keyStr)) {
1492
1504
  console.log(`[AMT] Reusing existing subscription to ${keyStr}`);
@@ -1522,6 +1534,8 @@ var AMTGatewayManager = class {
1522
1534
  this.subscriptions.delete(keyStr);
1523
1535
  this.pendingPackets.delete(subscription.subscriptionId);
1524
1536
  }
1537
+ if (this.subscriptions.size === 0)
1538
+ this.removeMessageListener();
1525
1539
  throw new Error(`Failed to subscribe via AMT: ${error instanceof Error ? error.message : String(error)}`);
1526
1540
  }
1527
1541
  }
@@ -1543,6 +1557,8 @@ var AMTGatewayManager = class {
1543
1557
  } finally {
1544
1558
  this.subscriptions.delete(handle);
1545
1559
  this.pendingPackets.delete(subscription.subscriptionId);
1560
+ if (this.subscriptions.size === 0)
1561
+ this.removeMessageListener();
1546
1562
  }
1547
1563
  }
1548
1564
  /**
@@ -1559,14 +1575,12 @@ var AMTGatewayManager = class {
1559
1575
  if (!subscriptionId)
1560
1576
  return;
1561
1577
  const subscription = this.subscriptions.get(subscriptionId);
1562
- if (!subscription) {
1563
- console.warn(`[AMT] Received packet for unknown subscription: ${subscriptionId}`);
1578
+ if (!subscription)
1564
1579
  return;
1565
- }
1566
1580
  if (!subscription.handshakeComplete) {
1567
1581
  const queue = this.pendingPackets.get(subscriptionId);
1568
1582
  const packetData2 = data;
1569
- if (queue) {
1583
+ if (queue && queue.length < MAX_PENDING_PACKETS) {
1570
1584
  queue.push({
1571
1585
  data: packetData2.data,
1572
1586
  remoteAddress: packetData2.remoteAddress,
@@ -1592,19 +1606,15 @@ var AMTGatewayManager = class {
1592
1606
  if (!subscriptionId)
1593
1607
  return;
1594
1608
  const subscription = this.subscriptions.get(subscriptionId);
1595
- if (!subscription) {
1596
- console.warn(`[AMT] Received error for unknown subscription: ${subscriptionId}`);
1609
+ if (!subscription)
1597
1610
  return;
1598
- }
1599
1611
  subscription.config.onError(new Error(error || "Unknown error"));
1600
1612
  }
1601
1613
  /**
1602
1614
  * Cleanup on destroy
1603
1615
  */
1604
1616
  destroy() {
1605
- if (this.messageHandler && typeof navigator !== "undefined" && navigator.serviceWorker) {
1606
- navigator.serviceWorker.removeEventListener("message", this.messageHandler);
1607
- }
1617
+ this.removeMessageListener();
1608
1618
  const handles = Array.from(this.subscriptions.keys());
1609
1619
  for (const handle of handles) {
1610
1620
  this.unsubscribe(handle).catch((err) => {