open-standards/joule-code/joule-code-rs/crates/joule-moq-ingest/src/lib.rs
Transaction Science 1be4c4e511 joule-moq-ingest: the WHIP and WHEP gateway
- 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]>
2026-10-18 14:05:28 -04:00

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};