Skip to main content

o_sfu/config/
settings.rs

1use std::{
2    net::{IpAddr, SocketAddr},
3    time::Duration,
4};
5
6use o_sfu_core::prelude::Bitrate;
7
8use super::{
9    CodecPreferences, MediaCodecFlags, RoomMediaLimits, RoomWorkerPolicy, RtcPortRange,
10    RtcUdpIoBackend, VideoAdaptationTuning, VideoBitrateLimits, diagnostics::DiagnosticsConfig,
11    feature_flags::RuntimeFeatureFlags, telemetry::TelemetryConfig,
12};
13
14pub const DEFAULT_MAX_PRE_AUTH_WEBSOCKET_SESSIONS: usize = 512;
15pub const DEFAULT_MAX_PRE_AUTH_WEBSOCKET_SESSIONS_PER_ORIGIN: usize = 16;
16
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub struct Config {
19    pub auth: AuthConfig,
20    pub http: HttpConfig,
21    pub user: UserConfig,
22    pub transport: TransportConfig,
23    pub codecs: CodecConfig,
24    pub features: RuntimeFeatureFlags,
25    pub telemetry: TelemetryConfig,
26    pub diagnostics: DiagnosticsConfig,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq)]
30pub struct AuthConfig {
31    pub key: String,
32    pub authentication_timeout_ms: u64,
33    pub max_pre_auth_websocket_sessions: usize,
34    pub max_pre_auth_websocket_sessions_per_origin: usize,
35}
36
37#[derive(Debug, Clone, PartialEq, Eq)]
38pub struct HttpConfig {
39    pub bind_address: SocketAddr,
40    pub trust_proxy_headers: bool,
41    /// Positive deadline in milliseconds for listener, session, background and RTC worker drainage.
42    /// Loaded from `SHUTDOWN_TIMEOUT_MS` with a `10_000` default.
43    pub shutdown_timeout_ms: u64,
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq)]
47pub struct UserConfig {
48    pub room_size: usize,
49    pub timeout_ms: u64,
50    pub ping_interval_ms: u64,
51    pub outbound_queue_capacity: usize,
52    pub outbound_queue_byte_capacity: usize,
53    pub room_reservation_ttl: Duration,
54}
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq)]
57pub struct TransportConfig {
58    pub announced_ip: IpAddr,
59    pub max_bitrate_in: Bitrate,
60    pub max_bitrate_out: Bitrate,
61    pub video_bitrate_limits: VideoBitrateLimits,
62    pub rtc_port_range: RtcPortRange,
63    pub rtc_udp_io_backend: RtcUdpIoBackend,
64    pub rtc_media_worker_count: usize,
65    pub room_worker_policy: RoomWorkerPolicy,
66    pub room_media_limits: RoomMediaLimits,
67    pub video_adaptation_tuning: VideoAdaptationTuning,
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
71pub struct CodecConfig {
72    pub flags: MediaCodecFlags,
73    pub preferences: CodecPreferences,
74}