use crate::model::packet::Flow5Tuple;
use std::net::SocketAddr;
#[derive(Debug, Clone, Copy)]
#[allow(dead_code)]
pub struct RtcpRtt {
pub ts_us: u64,
pub ssrc: u32,
pub rtt_ms: f64,
pub oneway_ms: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct NegotiatedMedia {
pub endpoints: Vec<SocketAddr>,
pub pts: Vec<u8>,
pub codecs: Vec<String>,
pub clock_rates: Vec<u32>,
}
impl NegotiatedMedia {
pub fn clock_rate_for_pt(&self, pt: u8) -> u32 {
self.pts
.iter()
.position(|p| *p == pt)
.and_then(|i| self.clock_rates.get(i).copied())
.filter(|&r| r > 0)
.unwrap_or_else(|| crate::decode::rtp::rtp_clock_rate_for_payload_type(pt))
}
}
#[derive(Debug, Clone, Copy, serde::Serialize)]
pub struct RatePoint {
pub ts_us: u64,
pub bytes: u64,
pub packets: u64,
pub loss_pct: f64,
pub jitter_ms: Option<f64>,
pub mos: Option<f64>,
}
#[derive(Debug, Clone, Default, serde::Serialize)]
pub struct StreamSummary {
pub call_id: Option<String>,
pub ssrc: u32,
pub flow: Option<Flow5Tuple>,
pub codec: Option<String>,
pub payload_type: Option<u8>,
pub packets: u64,
pub lost: u64,
pub expected: u64,
pub loss_pct: f64,
pub jitter_ms: Option<f64>,
pub first_ts_us: Option<u64>,
pub last_ts_us: Option<u64>,
pub rtt_min_ms: Option<f64>,
pub rtt_avg_ms: Option<f64>,
pub rtt_max_ms: Option<f64>,
pub oneway_ms: Option<f64>,
pub mos: Option<f64>,
pub direction: Option<String>,
pub leg: Option<String>,
pub via_turn: bool,
pub bytes: u64,
pub history: Vec<RatePoint>,
}