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/src/lib.rs | |
| parent | 0b07910ad847a8c4431b8be244b7105b7b23f6e2 (diff) | |
| download | jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.bz2 jellything-4c70753ee7311f644401669e6fde7b4a6cd32992.tar.zst | |
dash
Diffstat (limited to 'stream/src/lib.rs')
| -rw-r--r-- | stream/src/lib.rs | 31 |
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, |