diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-03 22:36:42 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-03 22:36:42 +0100 |
| commit | 4c70753ee7311f644401669e6fde7b4a6cd32992 (patch) | |
| tree | 2c1cc89367d76b918d6e33857ed8a2e346f2daa3 /stream/types/src/lib.rs | |
| parent | 0b07910ad847a8c4431b8be244b7105b7b23f6e2 (diff) | |
| download | jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.bz2 jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.zst | |
dash
Diffstat (limited to 'stream/types/src/lib.rs')
| -rw-r--r-- | stream/types/src/lib.rs | 71 |
1 files changed, 50 insertions, 21 deletions
diff --git a/stream/types/src/lib.rs b/stream/types/src/lib.rs index edafe00..d1583e9 100644 --- a/stream/types/src/lib.rs +++ b/stream/types/src/lib.rs @@ -26,18 +26,21 @@ pub enum StreamSpec { Original { track: TrackNum, }, - HlsMultiVariant { - container: StreamContainer, - }, + HlsMultiVariant, HlsVariant { track: TrackNum, - container: StreamContainer, format: FormatNum, }, + Dash, Info, FragmentIndex { track: TrackNum, }, + FragmentInit { + track: TrackNum, + container: StreamContainer, + format: FormatNum, + }, Fragment { track: TrackNum, index: IndexNum, @@ -77,6 +80,7 @@ pub enum TrackKind { #[derive(Debug, Clone, Deserialize, Serialize, Default)] pub struct StreamFormatInfo { pub codec: String, + pub codec_param: String, pub bitrate: f64, pub remux: bool, pub containers: Vec<StreamContainer>, @@ -98,6 +102,18 @@ pub enum StreamContainer { JVTT, } +impl StreamContainer { + pub fn mime_type(&self) -> &'static str { + match self { + Self::WebM => "video/webm", + Self::Matroska => "video/x-matroska", + Self::WebVTT => "text/vtt", + Self::JVTT => "application/jellything-vtt+json", + Self::MPEG4 => "video/mp4", + } + } +} + impl Display for TrackKind { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str(match self { @@ -122,18 +138,22 @@ impl StreamSpec { ) } StreamSpec::Original { track } => format!("?original&track={track}"), - StreamSpec::HlsMultiVariant { container } => { - format!("?hlsmultivariant&container={container}") + StreamSpec::HlsMultiVariant => { + format!("?hlsmultivariant") + } + StreamSpec::HlsVariant { track, format } => { + format!("?hlsvariant&track={track}&format={format}") } - StreamSpec::HlsVariant { - track, - container, - format, - } => format!("?hlsvariant&track={track}&container={container}&format={format}"), StreamSpec::Info => "?info".to_string(), + StreamSpec::Dash => "?info".to_string(), StreamSpec::FragmentIndex { track } => { format!("?fragmentindex&track={track}") } + StreamSpec::FragmentInit { + track, + container, + format, + } => format!("?fragmentinit&track={track}&container={container}&format={format}"), StreamSpec::Fragment { track, index, @@ -157,18 +177,22 @@ impl StreamSpec { ) } StreamSpec::Original { track } => format!("?original&t={track}"), - StreamSpec::HlsMultiVariant { container } => { - format!("?hlsmultivariant&c={container}") + StreamSpec::HlsMultiVariant => { + format!("?hlsmultivariant") + } + StreamSpec::HlsVariant { track, format } => { + format!("?hlsvariant&t={track}&f={format}") } - StreamSpec::HlsVariant { - track, - container, - format, - } => format!("?hlsvariant&t={track}&c={container}&f={format}"), StreamSpec::Info => "?info".to_string(), + StreamSpec::Dash => "?dash".to_string(), StreamSpec::FragmentIndex { track } => { format!("?fragmentindex&t={track}") } + StreamSpec::FragmentInit { + track, + container, + format, + } => format!("?fragmentinit&t={track}&c={container}&f={format}"), StreamSpec::Fragment { track, index, @@ -194,14 +218,19 @@ impl StreamSpec { }; if query.contains_key("info") { Ok(Self::Info) + } else if query.contains_key("dash") { + Ok(Self::Dash) } else if query.contains_key("hlsmultivariant") { - Ok(Self::HlsMultiVariant { - container: get_container()?, - }) + Ok(Self::HlsMultiVariant) } else if query.contains_key("hlsvariant") { Ok(Self::HlsVariant { track: get_num("track", "t")? as TrackNum, format: get_num("format", "f")? as FormatNum, + }) + } else if query.contains_key("fragmentinit") { + Ok(Self::FragmentInit { + track: get_num("track", "t")? as TrackNum, + format: get_num("format", "f")? as FormatNum, container: get_container()?, }) } else if query.contains_key("fragment") { |