use std::fmt;
use std::ops::RangeInclusive;
use std::time::Instant;
use crate::packet::MediaKind;
use crate::rtp_::{Direction, ExtensionValues, MediaTime, Mid, Pt, Rid, SenderInfo, SeqNo};
use crate::sdp::Simulcast as SdpSimulcast;
use super::PayloadParams;
use crate::format::CodecExtra;
impl From<SdpSimulcast> for Simulcast {
fn from(s: SdpSimulcast) -> Self {
let send = s.send.iter().map(|r| r.0.as_ref()).map(Rid::from).collect();
let recv = s.recv.iter().map(|r| r.0.as_ref()).map(Rid::from).collect();
Simulcast { send, recv }
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct MediaAdded {
pub mid: Mid,
pub kind: MediaKind,
pub direction: Direction,
pub simulcast: Option<Simulcast>,
}
#[derive(Debug, PartialEq, Eq)]
pub struct MediaChanged {
pub mid: Mid,
pub direction: Direction,
}
#[derive(Debug, PartialEq, Eq)]
pub struct Simulcast {
pub send: Vec<Rid>,
pub recv: Vec<Rid>,
}
#[derive(PartialEq, Eq)]
pub struct MediaData {
pub mid: Mid,
pub pt: Pt,
pub rid: Option<Rid>,
pub params: PayloadParams,
pub time: MediaTime,
pub network_time: Instant,
pub seq_range: RangeInclusive<SeqNo>,
pub contiguous: bool,
pub data: Vec<u8>,
pub ext_vals: ExtensionValues,
pub codec_extra: CodecExtra,
pub last_sender_info: Option<SenderInfo>,
pub audio_start_of_talk_spurt: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct KeyframeRequest {
pub mid: Mid,
pub rid: Option<Rid>,
pub kind: KeyframeRequestKind,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyframeRequestKind {
Pli,
Fir,
}
impl fmt::Debug for MediaData {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("MediaData")
.field("mid", &self.mid)
.field("pt", &self.pt)
.field("rid", &self.rid)
.field("time", &self.time)
.field("len", &self.data.len())
.finish()
}
}