From b9539ee3afbf1440b8628bf0609dc0e24aed116c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 2 Mar 2025 13:43:59 +0100 Subject: change things --- common/src/stream.rs | 72 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 6 deletions(-) (limited to 'common/src/stream.rs') 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 */ 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, + tracks: Vec, 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::>() + .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", + }) + } +} -- cgit v1.2.3-70-g09d2