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