@blockcast/transport
v0.2.0
Published
Unified transport manager for MoQ with WebTransport, SSM multicast, AMT, DRIAD, and FEC support
Downloads
127
Maintainers
Readme
@blockcast/transport
Unified transport manager for MoQ with WebTransport, SSM multicast, AMT, DRIAD, and FEC support.
Features
- Transport Hierarchy: Automatic fallback from native SSM → IGMP → AMT → DRIAD → MOQ
- Adaptive Bitrate: Progressive quality upgrade based on network conditions
- FEC Recovery: RaptorQ-based forward error correction for lossy paths
- A/V Sync: SharedClock for cross-track synchronization
- DRIAD Discovery: RFC 8777 relay discovery via DNS-over-HTTPS
Installation
pnpm add @blockcast/transportUsage
Basic SSM Transport
import { ssmTransport } from '@blockcast/transport';
// Set up callbacks
ssmTransport.setPacketCallback((data) => {
console.log('Received packet:', data.byteLength, 'bytes');
});
ssmTransport.setStateCallback((state) => {
console.log('Transport state:', state.mode, state.connected);
});
// Connect to multicast stream
await ssmTransport.connect({
group: '232.1.1.1',
source: '192.168.1.100',
port: 5000,
streamType: 'video',
driadEnabled: true,
});
// Get current state
const state = ssmTransport.getState();
console.log(`Mode: ${state.mode}, Packets: ${state.packetsReceived}`);
// Disconnect
ssmTransport.disconnect();With FEC Recovery
import { MmtFecClient, createMulticastFecHandler } from '@blockcast/transport/fec';
// Create FEC client
const fecClient = new MmtFecClient({
interleaveDepth: 30,
blockTimeoutMs: 2000,
greenFillEnabled: true,
onMfuReady: (mfu) => {
console.log('MFU ready:', mfu.mpuSequenceNumber);
if (mfu.recoveredViaFec) {
console.log('Recovered via FEC!');
}
},
});
// Set WASM module (from libmmt)
fecClient.setWasmModule(mmtWasmModule);
await fecClient.init();
// Create packet handler for window.Multicast
const handler = createMulticastFecHandler(fecClient);
window.Multicast.subscribeSSM({
group: '232.1.1.1',
source: '192.168.1.100',
port: 5000,
}).then(sub => {
sub.onpacket = (event) => handler(event.data);
});A/V Synchronization
import { getSharedClock } from '@blockcast/transport/clock';
const clock = getSharedClock();
// Set anchor on first keyframe
clock.setAnchor(firstFrame.timestamp);
// Check if frame should be rendered
const decision = clock.shouldRender(frame.timestamp);
if (decision === 'render') {
renderFrame(frame);
} else if (decision === 'hold') {
const waitMs = clock.getWaitTimeMs(frame.timestamp);
await sleep(waitMs);
renderFrame(frame);
} else {
// discard - frame is too late
frame.close();
}DRIAD Discovery
import { driadDiscovery } from '@blockcast/transport';
// Discover AMT relays for a multicast group
const relays = await driadDiscovery.discoverRelays('232.1.1.1');
const bestRelay = await driadDiscovery.selectBestRelay(relays);
console.log(`Best relay: ${bestRelay.host}:${bestRelay.port} (RTT: ${bestRelay.rtt}ms)`);Direct AMT Gateway
import { AMTGateway } from '@blockcast/transport';
const gateway = new AMTGateway({
relayAddress: 'amt-relay.example.com',
relayPort: 2268,
onPacket: (packet) => {
console.log('Received:', packet.data.length, 'bytes from', packet.srcAddress);
},
onStateChange: (newState, oldState) => {
console.log(`State: ${oldState} -> ${newState}`);
},
});
// Join multicast group
await gateway.joinGroup('232.1.1.1', 5000, '192.168.1.100');
await gateway.open();
// Later...
await gateway.close();Quality Levels
The adaptive bitrate controller supports these quality levels:
| Name | Bitrate | Resolution | FPS | |------|---------|------------|-----| | 240p | 300 Kbps | 426x240 | 15 | | 360p | 500 Kbps | 640x360 | 24 | | 480p | 1 Mbps | 854x480 | 30 | | 720p | 2.5 Mbps | 1280x720 | 30 | | 1080p | 5 Mbps | 1920x1080 | 30 | | 1440p | 8 Mbps | 2560x1440 | 30 | | 4K | 15 Mbps | 3840x2160 | 30 |
Transport Modes
| Mode | Description | Requirements |
|------|-------------|--------------|
| ssm | Native Source-Specific Multicast | IWA + Direct Sockets |
| igmp | Native Any-Source Multicast | IWA + Direct Sockets |
| amt | AMT Gateway (configured relay) | WebSocket or Direct Sockets |
| driad | AMT via DRIAD discovery | HTTP access |
| moq | MOQ WebTransport fallback | WebTransport |
License
Apache-2.0
