use crate::time::Timescale;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MediaKind {
Video,
Audio,
Text,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Codec {
H264,
H265,
Av1,
Aac,
Ac3,
Eac3,
Opus,
WebVtt,
Other(String),
}
impl Codec {
pub fn rfc6381_family(&self) -> &str {
match self {
Codec::H264 => "avc1",
Codec::H265 => "hvc1",
Codec::Av1 => "av01",
Codec::Aac => "mp4a",
Codec::Ac3 => "ac-3",
Codec::Eac3 => "ec-3",
Codec::Opus => "Opus",
Codec::WebVtt => "wvtt",
Codec::Other(s) => s.as_str(),
}
}
}
#[derive(Debug, Clone)]
pub struct StreamInfo {
pub kind: MediaKind,
pub codec: Codec,
pub timescale: Timescale,
pub resolution: Option<(u32, u32)>,
pub sample_rate: Option<u32>,
pub bitrate: Option<u32>,
pub codec_string: Option<String>,
}
impl StreamInfo {
pub fn rfc6381(&self) -> String {
self.codec_string.clone().unwrap_or_else(|| self.codec.rfc6381_family().to_string())
}
}