- room: WAI live-rooms descriptors and grants, read and checked from the extension's text, as the gateway admits a bearer token. - frame: one frame, one WAI1 envelope, in the payload framing of wai.video.avc, wai.video.vp8, wai.video.vp9, wai.video.av1 and wai.audio.opus.packet, with a live member: the room-clock time, the RTP timestamp and, on a group's first object, the grant reference. - package: video groups at keyframes, audio groups of a fixed duration, the RTP-to-room-clock mapping and its bound, and each group's receipts signed as the first hop and chained. - relay: the tracks published at the relay (PUBLISH), one subgroup stream a group, PUBLISH_DONE once every stream is acknowledged. - whip / whep: the sessions on str0m; WHEP verifies every object's receipt before it forwards it, and drops and counts what fails. - gateway: the HTTP resources (RFC 9725; draft-ietf-wish-whep-05), bearer tokens, 401 / 403 per RFC 6750, ETag and If-Match, the bounds. - record: each session's signed record, the seam for live metering's per-hop record. Co-Authored-By: Claude Opus 5.5 <[email protected]>
37 lines
1.7 KiB
Rust
37 lines
1.7 KiB
Rust
//! **joule-moq-ingest**: WebRTC into and out of WAI rooms over MoQ.
|
|
//!
|
|
//! - **WHIP** (RFC 9725, [`whip`]): any standard WebRTC encoder publishes into a room. The
|
|
//! gateway checks its bearer token, a room grant, against the room ([`room`]); takes
|
|
//! its media, frame by frame, from the WebRTC stack; packages each frame as one WAI
|
|
//! envelope ([`frame`]); groups the frames, one group per keyframe for video and per
|
|
//! fixed duration for audio ([`package`]); and publishes the tracks and their catalog
|
|
//! at the relay as their MoQ publisher ([`relay`], [`catalog`]), signing every group's
|
|
//! receipts as the first hop.
|
|
//! - **WHEP** (`draft-ietf-wish-whep-05`, [`whep`]): a standard WebRTC player watches a
|
|
//! publisher's tracks. The gateway subscribes at the relay, verifies every object
|
|
//! against its receipt, drops and counts what fails, and packetises the rest back to RTP.
|
|
//! - **Bounds** ([`config::Limits`]): sessions, bitrate, tracks per session.
|
|
//! - **Records** ([`record`]): each session ends with a record of what it carried, signed
|
|
//! by the gateway: the seam for live metering's per-hop record.
|
|
//!
|
|
//! The WebRTC stack is `str0m` (sans-IO, MIT OR Apache-2.0) with its pure-Rust crypto
|
|
//! backend; the relay protocol is `joule-moq`'s draft-22 codec and `joule-moq-relay`'s
|
|
//! client. The mapping this crate implements, and the ones it specifies only (E-RTMP v2
|
|
//! multitrack and SRT), are WAI's `extensions/live-ingest.md`.
|
|
|
|
pub mod catalog;
|
|
pub mod config;
|
|
pub mod frame;
|
|
pub mod gateway;
|
|
pub mod package;
|
|
pub mod record;
|
|
pub mod relay;
|
|
pub mod room;
|
|
pub mod rtc;
|
|
pub mod sdp;
|
|
pub mod whep;
|
|
pub mod whip;
|
|
|
|
pub use config::GatewayConfig;
|
|
pub use gateway::{Gateway, GatewayServer};
|
|
pub use record::{SessionRecord, SignedRecord};
|