aboutsummaryrefslogtreecommitdiff
path: root/stream/types/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-03-03 22:36:42 +0100
committermetamuffin <metamuffin@disroot.org>2026-03-03 22:36:42 +0100
commit4c70753ee7311f644401669e6fde7b4a6cd32992 (patch)
tree2c1cc89367d76b918d6e33857ed8a2e346f2daa3 /stream/types/src/lib.rs
parent0b07910ad847a8c4431b8be244b7105b7b23f6e2 (diff)
downloadjellything-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.rs71
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") {