1use crate::{Result, codec};
7
8pub struct Bridge {
9 import: moq_mux::codec::opus::Import,
10}
11
12impl Bridge {
13 pub fn new(
14 mut broadcast: moq_net::BroadcastProducer,
15 catalog: moq_mux::catalog::Producer,
16 sample_rate: u32,
17 channel_count: u32,
18 ) -> Result<Self> {
19 let config = moq_mux::codec::opus::Config {
20 sample_rate,
21 channel_count,
22 };
23 let track = moq_mux::import::unique_track(&mut broadcast, ".opus")?;
24 let import = moq_mux::codec::opus::Import::new(track, catalog, config)?;
25 Ok(Self { import })
26 }
27}
28
29impl codec::Bridge for Bridge {
30 fn push(&mut self, frame: codec::Frame) -> Result<()> {
31 let pts = moq_mux::container::Timestamp::from_micros(frame.timestamp_us)
32 .map_err(|err| crate::Error::Other(anyhow::anyhow!("invalid timestamp: {err}")))?;
33 self.import.decode(&frame.payload, Some(pts))?;
34 Ok(())
35 }
36}