hyperspeed_broadcast/rtc/
workers.rs1use mediasoup::{worker::Worker, worker::WorkerSettings, worker_manager::WorkerManager};
2use once_cell::sync::OnceCell;
3use log::debug;
4
5static WORKER_POOL: OnceCell<WorkerPool> = OnceCell::new();
6
7#[derive(Debug)]
11pub struct WorkerPool {
12 _manager: WorkerManager,
13 worker: Worker,
14}
15
16impl WorkerPool {
17 pub async fn init() {
18 let worker_pool = WorkerPool::new().await;
19 WORKER_POOL.set(worker_pool).unwrap();
20 }
21
22 pub fn get() -> &'static WorkerPool {
23 WORKER_POOL
24 .get()
25 .expect("Mediasoup worker pool not initialized")
26 }
27
28 pub async fn new() -> Self {
29 let manager = WorkerManager::new();
30 let mut settings = WorkerSettings::default();
31 settings.rtc_ports_range = 10100..=10200;
33
34 let worker = manager.create_worker(settings).await.unwrap();
35 debug!("Initialized worker pool");
36 WorkerPool {
37 _manager: manager,
38 worker,
39 }
40 }
41
42 pub fn get_worker(&self) -> &Worker {
43 &self.worker
44 }
45}