import * as Connection from "@moq/lite/Connection";import { Broadcast, Track } from "@moq/lite";import * as Path from "@moq/lite/Path";import * as Time from "@moq/lite/Time";import * as Signals from "@moq/lite/Signals";
The library exports:
Connection - Connect to MoQ relays and manage subscriptions
// Publish a broadcastconst broadcast = await conn.publish("my-broadcast");// Create a trackconst track = new Track("video");await broadcast.announce(track);// Write groups and framesconst group = track.appendGroup();await group.write(frameData);await group.close();
import { Track } from "@moq/lite";const track = new Track("video");// Append groups sequentiallyconst group = track.appendGroup();// Write frames to the groupawait group.write(frame1);await group.write(frame2);// Close the group when doneawait group.close();
// Iterate over groupsfor await (const group of track.groups()) { console.log("Group sequence:", group.sequence); // Iterate over frames in the group for await (const frame of group.frames()) { console.log("Frame:", frame.byteLength, "bytes"); // Process frame... }}
A Group represents a sequence of frames delivered over a single QUIC stream.
import { Group } from "@moq/lite";// Create a group (usually via track.appendGroup())const group = track.appendGroup();console.log("Sequence:", group.sequence);// Write framesconst encoder = new TextEncoder();await group.write(encoder.encode("Hello"));await group.write(encoder.encode("World"));// Close the groupawait group.close();
Utility namespaces for working with paths and timestamps:
import * as Path from "@moq/lite/Path";import * as Time from "@moq/lite/Time";// Path utilitiesconst trackPath = Path.join("broadcasts", "my-stream", "video");const parts = Path.split(trackPath);// Time utilitiesconst now = Time.now(); // Current timestampconst offset = Time.offset(timestamp1, timestamp2);
MoQ Lite uses @moq/signals for reactive state management:
import { Signal } from "@moq/lite/Signals";// Tracks have reactive stateconst dispose = track.state.groups.subscribe(groups => { console.log("Groups changed:", groups.length);});// Clean up when donedispose();