Skip to main content

ustreamer_transport/
lib.rs

1//! WebTransport server for streaming encoded video and receiving input.
2//!
3//! Uses `quinn` for QUIC/HTTP3 transport:
4//! - **Unreliable datagrams** for video frames (newest-wins, no retransmission)
5//! - **Unreliable datagrams** for continuous input (pointer move, scroll)
6//! - **Reliable QUIC streams** for discrete input (key press, tool select)
7//! - **Reliable QUIC stream** for session control (codec negotiation, quality params)
8//!
9//! Also includes a WebSocket fallback transport for browsers without WebTransport.
10
11pub mod session;
12pub mod websocket;
13pub use session::{
14    AcceptedSession, InputReliability, ReceivedInput, ServerIdentity, StreamSession,
15    TransportConfig, WebTransportServer,
16};
17pub use websocket::{AcceptedWebSocketSession, WebSocketServer, WebSocketSession};
18
19#[derive(Debug, thiserror::Error)]
20pub enum TransportError {
21    #[error("transport initialization failed: {0}")]
22    InitFailed(String),
23    #[error("connection failed: {0}")]
24    ConnectionFailed(String),
25    #[error("session closed")]
26    SessionClosed,
27    #[error("peer does not support QUIC datagrams")]
28    DatagramsUnsupported,
29    #[error("datagram too large: {size} bytes (max {max})")]
30    DatagramTooLarge { size: usize, max: usize },
31    #[error("invalid frame packet: {0}")]
32    InvalidFramePacket(String),
33    #[error("invalid input event: {0}")]
34    InvalidInputEvent(String),
35    #[error("stream I/O failed: {0}")]
36    StreamIo(String),
37}