Skip to main content

active_call/media/
mod.rs

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