diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-02 13:43:59 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-02 13:43:59 +0100 |
commit | b9539ee3afbf1440b8628bf0609dc0e24aed116c (patch) | |
tree | 5fa67c5db5e3c266385da36116f7723bf1a72c96 /common/src | |
parent | f0dbf139d8708194d1ff7e887b1dff48ccc166fa (diff) | |
download | jellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar jellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar.bz2 jellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar.zst |
change things
Diffstat (limited to 'common/src')
-rw-r--r-- | common/src/stream.rs | 72 |
1 files changed, 66 insertions, 6 deletions
diff --git a/common/src/stream.rs b/common/src/stream.rs index 46f6abc..0e8f810 100644 --- a/common/src/stream.rs +++ b/common/src/stream.rs @@ -4,22 +4,23 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use serde::{Deserialize, Serialize}; +use std::fmt::Display; #[derive(Debug, Clone, Deserialize, Serialize)] pub enum StreamSpec { Whep { - track: u64, + track: usize, seek: u64, }, WhepControl { token: String, }, Remux { - track: Vec<u64>, + tracks: Vec<usize>, container: StreamContainer, }, Original { - track: u64, + track: usize, }, HlsSuperMultiVariant { container: StreamContainer, @@ -30,7 +31,7 @@ pub enum StreamSpec { }, HlsVariant { segment: u64, - track: u64, + track: usize, container: StreamContainer, format: usize, }, @@ -39,11 +40,11 @@ pub enum StreamSpec { }, FragmentIndex { segment: u64, - track: u64, + track: usize, }, Fragment { segment: u64, - track: u64, + track: usize, index: u64, container: StreamContainer, format: usize, @@ -58,3 +59,62 @@ pub enum StreamContainer { WebVTT, JVTT, } + +impl StreamSpec { + pub fn to_query(&self) -> String { + match self { + StreamSpec::Whep { track, seek } => format!("?whep&track={track}&seek={seek}"), + StreamSpec::WhepControl { token } => format!("?whepcontrol&token={token}"), + StreamSpec::Remux { tracks, container } => { + format!( + "?remux&tracks={}&container={container}", + tracks + .iter() + .map(|t| t.to_string()) + .collect::<Vec<String>>() + .join(",") + ) + } + StreamSpec::Original { track } => format!("?original&track={track}"), + StreamSpec::HlsSuperMultiVariant { container } => { + format!("?hlssupermultivariant&container={container}") + } + StreamSpec::HlsMultiVariant { segment, container } => { + format!("?hlsmultivariant&segment={segment}&container={container}") + } + StreamSpec::HlsVariant { + segment, + track, + container, + format, + } => format!( + "?hlsvariant&segment={segment}&track={track}&container={container}&format={format}" + ), + StreamSpec::Info { + segment: Some(segment), + } => format!("?info&segment={segment}"), + StreamSpec::Info { segment: None } => format!("?info"), + StreamSpec::FragmentIndex { segment, track } => { + format!("?fragmentindex&segment={segment}&track={track}") + } + StreamSpec::Fragment { + segment, + track, + index, + container, + format, + } => format!("?fragment&segment={segment}&track={track}&index={index}&container={container}&format={format}"), + } + } +} + +impl Display for StreamContainer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + StreamContainer::WebM => "webm", + StreamContainer::Matroska => "matroska", + StreamContainer::WebVTT => "webvtt", + StreamContainer::JVTT => "jvtt", + }) + } +} |