Hang 🚧

Hang 🚧

Hang (moq-hang) enables building real-time conferencing applications over Media over QUIC (MoQ).

Overview

Flow

  sequenceDiagram
	participant Alice
	participant Relay
	participant Bob

Key Concepts

  • Room: A collection of participants, each publishing under a common prefix.
  • Participant: A broadcaster that can produce any number of media tracks.
  • Catalog: A JSON document describing available media tracks, supporting live updates.

Discovery

Participants discover each other in a room using moq-lite’s ANNOUNCE mechanism. Each participant publishes a broadcast with the room path as a prefix (e.g., /room/alice.hang). Discovery is dynamic, and presence is updated live.

Catalog

Each participant can publish a catalog.json track describing their available audio and video tracks, using a schema compatible with W3C WebCodecs. Catalogs are updated live as tracks change.

Example Video Track (from the draft):

{
	"track": { "name": "video", "priority": 2 },
	"config": {
		"codec": "avc1.64001f",
		"codedWidth": 1280,
		"codedHeight": 720,
		"bitrate": 6000000,
		"framerate": 30.0
	}
}

Example Audio Track (from the draft):

{
	"track": { "name": "audio", "priority": 1 },
	"config": {
		"codec": "opus",
		"sampleRate": 48000,
		"numberOfChannels": 2,
		"bitrate": 128000
	}
}

Media Delivery

Media tracks are split into groups and frames. Each group starts with a keyframe (for video), and frames are timestamped for synchronized playback.

For more details, see the IETF draft.