Skip to main content

active_call/media/
mod.rs

1use serde::{Deserialize, Serialize};
2
3pub mod ambiance;
4pub mod asr_processor;
5pub mod cache;
6pub mod denoiser;
7pub mod dtmf;
8pub mod engine;
9pub mod inactivity;
10pub mod loader;
11pub mod negotiate;
12pub mod processor;
13pub mod realtime_processor;
14pub mod recorder;
15#[cfg(feature = "ringback-detection")]
16pub mod ringback_detection;
17pub mod stream;
18#[cfg(test)]
19mod tests;
20pub mod track;
21pub mod vad;
22pub mod volume_control;
23pub use audio_codec::PcmBuf;
24pub use audio_codec::Sample;
25pub const INTERNAL_SAMPLERATE: u32 = 16000;
26pub type TrackId = String;
27pub type PayloadBuf = Vec<u8>;
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub enum Samples {
31    PCM {
32        samples: PcmBuf,
33    },
34    RTP {
35        sequence_number: u16,
36        payload_type: u8,
37        payload: PayloadBuf,
38    },
39    Empty,
40}
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct SourcePacket {
43    pub sequence_number: u16,
44    pub payload_type: u8,
45    pub payload: PayloadBuf,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct AudioFrame {
50    pub track_id: TrackId,
51    pub samples: Samples,
52    pub src_packet: Option<SourcePacket>,
53    pub timestamp: u64,
54    pub sample_rate: u32,
55    pub channels: u16,
56}
57
58impl Samples {
59    pub fn payload_type(&self) -> Option<u8> {
60        match self {
61            Samples::RTP { payload_type, .. } => Some(*payload_type),
62            _ => None,
63        }
64    }
65}
66
67// get timestamp in milliseconds
68pub fn get_timestamp() -> u64 {
69    let now = std::time::SystemTime::now();
70    now.duration_since(std::time::UNIX_EPOCH)
71        .expect("Time went backwards")
72        .as_millis() as u64
73}