hang
A media library built on top of moq-lite for streaming audio and video.
hang provides media-specific functionality, split into a few components:
- Broadcast: A discoverable collection of tracks, documented using a catalog.
- Catalog: Metadata describing the available tracks, codec information, etc. This is a live track itself and is updated as tracks are added/removed/changed.
- Track: Audio/video streams, as well as other types of data.
- Group: A group of pictures (video) or collection of samples (audio). Each group is independently decodable.
- Frame: A timestamp and a codec payload pair.
Supported Codecs
We most of the implement the WebCodecs specification.
- Video: H.264, H.265, VP8, VP9, AV1
- Audio: AAC, Opus
CMAF Import
There's also a cmaf module that can import fMP4/CMAF files into a hang broadcast.
It's crude and doesn't support all features, but it's a good starting point to ingest existing content.
Example
use ;
let mut broadcast = new;
// Create a video track
let video = Video ;
let mut track = broadcast.create_video;
// NOTE: Unlike moq_lite, you don't create a group producer.
// One will be created automatically when you write a keyframe.
let frame = Frame ;
track.write;