use broadcast_common::impl_spec_display;
use transmux::{Sample, TrackId, TrackSpec};
use super::action::StreamId;
use crate::error::SmoothError;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct QualityInfo {
pub bitrate: u64,
pub resolution: Option<(u32, u32)>,
pub codecs: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum ManifestFault {
Fetch,
Utf8,
Parse,
Timeline,
}
impl ManifestFault {
pub fn name(&self) -> &'static str {
match self {
Self::Fetch => "fetch",
Self::Utf8 => "utf8",
Self::Parse => "parse",
Self::Timeline => "timeline",
}
}
}
impl_spec_display!(ManifestFault);
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum Dropped {
Manifest(ManifestFault),
Fragment {
stream: StreamId,
status: Option<u16>,
},
FragmentUrl {
stream: StreamId,
},
StreamLost {
stream: StreamId,
},
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum Output {
Qualities {
qualities: Vec<QualityInfo>,
chosen: usize,
},
ManifestNotFound,
Tracks(Vec<TrackSpec>),
TracksChanged(Vec<TrackSpec>),
Sample {
track: TrackId,
sample: Sample,
},
Discontinuity,
Dropped(Dropped),
Ended,
Fatal(SmoothError),
}