aboutsummaryrefslogtreecommitdiff
path: root/stream/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/src/lib.rs
parent0b07910ad847a8c4431b8be244b7105b7b23f6e2 (diff)
downloadjellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar
jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.bz2
jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.zst
dash
Diffstat (limited to 'stream/src/lib.rs')
-rw-r--r--stream/src/lib.rs31
1 files changed, 15 insertions, 16 deletions
diff --git a/stream/src/lib.rs b/stream/src/lib.rs
index a94f4c7..3f6e93f 100644
--- a/stream/src/lib.rs
+++ b/stream/src/lib.rs
@@ -5,6 +5,7 @@
*/
#![feature(iterator_try_collect)]
pub mod cues;
+pub mod dash;
mod fragment;
mod fragment_index;
mod hls;
@@ -17,7 +18,7 @@ use fragment::fragment_stream;
use fragment_index::fragment_index_stream;
use hls::{hls_multivariant_stream, hls_variant_stream};
use jellycache::Cache;
-use jellystream_types::{StreamContainer, StreamSpec};
+use jellystream_types::StreamSpec;
use serde::{Deserialize, Serialize};
use std::{
collections::BTreeSet,
@@ -29,6 +30,8 @@ use std::{
};
use stream_info::{stream_info, write_stream_info};
+use crate::{dash::dash, fragment::fragment_init_stream};
+
#[rustfmt::skip]
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Config {
@@ -53,24 +56,18 @@ pub struct StreamHead {
}
pub fn stream_head(spec: &StreamSpec) -> StreamHead {
- use StreamContainer::*;
use StreamSpec::*;
- let container_ct = |x: StreamContainer| match x {
- WebM => "video/webm",
- Matroska => "video/x-matroska",
- WebVTT => "text/vtt",
- JVTT => "application/jellything-vtt+json",
- MPEG4 => "video/mp4",
- };
let range_supported = matches!(spec, Remux { .. } | Original { .. });
let content_type = match spec {
Original { .. } => "video/x-matroska",
HlsMultiVariant { .. } => "application/vnd.apple.mpegurl",
HlsVariant { .. } => "application/vnd.apple.mpegurl",
Info => "application/jellything-stream-info+json",
+ Dash => "application/dash+xml",
FragmentIndex { .. } => "application/jellything-frag-index+json",
- Fragment { container, .. } => container_ct(*container),
- Remux { container, .. } => container_ct(*container),
+ FragmentInit { container, .. } => container.mime_type(),
+ Fragment { container, .. } => container.mime_type(),
+ Remux { container, .. } => container.mime_type(),
};
StreamHead {
content_type,
@@ -85,14 +82,16 @@ pub fn stream(
) -> Result<Box<dyn Read + Send + Sync>> {
match spec {
StreamSpec::Original { track } => original_stream(info, track, range),
- StreamSpec::HlsMultiVariant { container } => hls_multivariant_stream(&info, container),
- StreamSpec::HlsVariant {
+ StreamSpec::HlsMultiVariant => hls_multivariant_stream(&info),
+ StreamSpec::HlsVariant { track, format } => hls_variant_stream(&info, track, format),
+ StreamSpec::Info => write_stream_info(&info),
+ StreamSpec::Dash => dash(&info),
+ StreamSpec::FragmentIndex { track } => fragment_index_stream(info, track),
+ StreamSpec::FragmentInit {
track,
container,
format,
- } => hls_variant_stream(&info, track, format, container),
- StreamSpec::Info => write_stream_info(&info),
- StreamSpec::FragmentIndex { track } => fragment_index_stream(info, track),
+ } => fragment_init_stream(info, track, format, container),
StreamSpec::Fragment {
track,
index,