{"_id":"@blockcast/transport","name":"@blockcast/transport","dist-tags":{"latest":"0.2.0"},"versions":{"0.2.0":{"name":"@blockcast/transport","version":"0.2.0","description":"Unified transport manager for MoQ with WebTransport, SSM multicast, AMT, DRIAD, and FEC support","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./fec":{"import":"./dist/fec-client.js","types":"./dist/fec-client.d.ts"},"./clock":{"import":"./dist/clock.js","types":"./dist/clock.d.ts"}},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest"},"devDependencies":{"typescript":"^5.9.3","vitest":"^1.6.1"},"keywords":["moq","webtransport","multicast","ssm","amt","driad","fec","raptorq","streaming","quic"],"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/Blockcast/pim-multicast-gateway.git","directory":"packages/ssm-transport"},"_id":"@blockcast/transport@0.2.0","gitHead":"88c52a06154515a8ddbd74bbb15f814f3fcfd178","bugs":{"url":"https://github.com/Blockcast/pim-multicast-gateway/issues"},"homepage":"https://github.com/Blockcast/pim-multicast-gateway#readme","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-xg4Z3kBF+kwt0WBMksKVB1Y66kZfIoWCWA1cFlddaCaMA7PUb3EfsaSLuBnFvBiQltQIP4gXUgSJ1Dzy1Cn7Rg==","shasum":"9281026dee4bf8e403590259fb54aa6604ed5a2d","tarball":"https://registry.npmjs.org/@blockcast/transport/-/transport-0.2.0.tgz","fileCount":47,"unpackedSize":343945,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDR85YTHWXyVXfpuVGDIT4Wob1Wql809QkVvEOiKyo19AiBzrzny3YIIPGerHGnAaRN1cchuNoOl2U381Jn9NZp90A=="}]},"_npmUser":{"name":"blockcast","email":"omar@blockcast.net"},"directories":{},"maintainers":[{"name":"blockcast","email":"omar@blockcast.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/transport_0.2.0_1768363781643_0.5891265712051856"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-14T04:09:41.256Z","0.2.0":"2026-01-14T04:09:41.811Z","modified":"2026-01-14T04:09:42.042Z"},"maintainers":[{"name":"blockcast","email":"omar@blockcast.net"}],"description":"Unified transport manager for MoQ with WebTransport, SSM multicast, AMT, DRIAD, and FEC support","homepage":"https://github.com/Blockcast/pim-multicast-gateway#readme","keywords":["moq","webtransport","multicast","ssm","amt","driad","fec","raptorq","streaming","quic"],"repository":{"type":"git","url":"git+https://github.com/Blockcast/pim-multicast-gateway.git","directory":"packages/ssm-transport"},"bugs":{"url":"https://github.com/Blockcast/pim-multicast-gateway/issues"},"license":"Apache-2.0","readme":"# @blockcast/transport\n\nUnified transport manager for MoQ with WebTransport, SSM multicast, AMT, DRIAD, and FEC support.\n\n## Features\n\n- **Transport Hierarchy**: Automatic fallback from native SSM → IGMP → AMT → DRIAD → MOQ\n- **Adaptive Bitrate**: Progressive quality upgrade based on network conditions\n- **FEC Recovery**: RaptorQ-based forward error correction for lossy paths\n- **A/V Sync**: SharedClock for cross-track synchronization\n- **DRIAD Discovery**: RFC 8777 relay discovery via DNS-over-HTTPS\n\n## Installation\n\n```bash\npnpm add @blockcast/transport\n```\n\n## Usage\n\n### Basic SSM Transport\n\n```typescript\nimport { ssmTransport } from '@blockcast/transport';\n\n// Set up callbacks\nssmTransport.setPacketCallback((data) => {\n  console.log('Received packet:', data.byteLength, 'bytes');\n});\n\nssmTransport.setStateCallback((state) => {\n  console.log('Transport state:', state.mode, state.connected);\n});\n\n// Connect to multicast stream\nawait ssmTransport.connect({\n  group: '232.1.1.1',\n  source: '192.168.1.100',\n  port: 5000,\n  streamType: 'video',\n  driadEnabled: true,\n});\n\n// Get current state\nconst state = ssmTransport.getState();\nconsole.log(`Mode: ${state.mode}, Packets: ${state.packetsReceived}`);\n\n// Disconnect\nssmTransport.disconnect();\n```\n\n### With FEC Recovery\n\n```typescript\nimport { MmtFecClient, createMulticastFecHandler } from '@blockcast/transport/fec';\n\n// Create FEC client\nconst fecClient = new MmtFecClient({\n  interleaveDepth: 30,\n  blockTimeoutMs: 2000,\n  greenFillEnabled: true,\n  onMfuReady: (mfu) => {\n    console.log('MFU ready:', mfu.mpuSequenceNumber);\n    if (mfu.recoveredViaFec) {\n      console.log('Recovered via FEC!');\n    }\n  },\n});\n\n// Set WASM module (from libmmt)\nfecClient.setWasmModule(mmtWasmModule);\nawait fecClient.init();\n\n// Create packet handler for window.Multicast\nconst handler = createMulticastFecHandler(fecClient);\nwindow.Multicast.subscribeSSM({\n  group: '232.1.1.1',\n  source: '192.168.1.100',\n  port: 5000,\n}).then(sub => {\n  sub.onpacket = (event) => handler(event.data);\n});\n```\n\n### A/V Synchronization\n\n```typescript\nimport { getSharedClock } from '@blockcast/transport/clock';\n\nconst clock = getSharedClock();\n\n// Set anchor on first keyframe\nclock.setAnchor(firstFrame.timestamp);\n\n// Check if frame should be rendered\nconst decision = clock.shouldRender(frame.timestamp);\nif (decision === 'render') {\n  renderFrame(frame);\n} else if (decision === 'hold') {\n  const waitMs = clock.getWaitTimeMs(frame.timestamp);\n  await sleep(waitMs);\n  renderFrame(frame);\n} else {\n  // discard - frame is too late\n  frame.close();\n}\n```\n\n### DRIAD Discovery\n\n```typescript\nimport { driadDiscovery } from '@blockcast/transport';\n\n// Discover AMT relays for a multicast group\nconst relays = await driadDiscovery.discoverRelays('232.1.1.1');\nconst bestRelay = await driadDiscovery.selectBestRelay(relays);\n\nconsole.log(`Best relay: ${bestRelay.host}:${bestRelay.port} (RTT: ${bestRelay.rtt}ms)`);\n```\n\n### Direct AMT Gateway\n\n```typescript\nimport { AMTGateway } from '@blockcast/transport';\n\nconst gateway = new AMTGateway({\n  relayAddress: 'amt-relay.example.com',\n  relayPort: 2268,\n  onPacket: (packet) => {\n    console.log('Received:', packet.data.length, 'bytes from', packet.srcAddress);\n  },\n  onStateChange: (newState, oldState) => {\n    console.log(`State: ${oldState} -> ${newState}`);\n  },\n});\n\n// Join multicast group\nawait gateway.joinGroup('232.1.1.1', 5000, '192.168.1.100');\nawait gateway.open();\n\n// Later...\nawait gateway.close();\n```\n\n## Quality Levels\n\nThe adaptive bitrate controller supports these quality levels:\n\n| Name | Bitrate | Resolution | FPS |\n|------|---------|------------|-----|\n| 240p | 300 Kbps | 426x240 | 15 |\n| 360p | 500 Kbps | 640x360 | 24 |\n| 480p | 1 Mbps | 854x480 | 30 |\n| 720p | 2.5 Mbps | 1280x720 | 30 |\n| 1080p | 5 Mbps | 1920x1080 | 30 |\n| 1440p | 8 Mbps | 2560x1440 | 30 |\n| 4K | 15 Mbps | 3840x2160 | 30 |\n\n## Transport Modes\n\n| Mode | Description | Requirements |\n|------|-------------|--------------|\n| `ssm` | Native Source-Specific Multicast | IWA + Direct Sockets |\n| `igmp` | Native Any-Source Multicast | IWA + Direct Sockets |\n| `amt` | AMT Gateway (configured relay) | WebSocket or Direct Sockets |\n| `driad` | AMT via DRIAD discovery | HTTP access |\n| `moq` | MOQ WebTransport fallback | WebTransport |\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md","_rev":"1-42427e8d055fc3848a631148504d12c2"}