aboutsummaryrefslogtreecommitdiff
path: root/stream/src/hls.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-02 13:43:59 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-02 13:43:59 +0100
commitb9539ee3afbf1440b8628bf0609dc0e24aed116c (patch)
tree5fa67c5db5e3c266385da36116f7723bf1a72c96 /stream/src/hls.rs
parentf0dbf139d8708194d1ff7e887b1dff48ccc166fa (diff)
downloadjellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar
jellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar.bz2
jellything-b9539ee3afbf1440b8628bf0609dc0e24aed116c.tar.zst
change things
Diffstat (limited to 'stream/src/hls.rs')
-rw-r--r--stream/src/hls.rs42
1 files changed, 30 insertions, 12 deletions
diff --git a/stream/src/hls.rs b/stream/src/hls.rs
index dca1036..56edd2d 100644
--- a/stream/src/hls.rs
+++ b/stream/src/hls.rs
@@ -7,7 +7,7 @@
use anyhow::{anyhow, Result};
use jellybase::{
common::{
- stream::{StreamFormat, StreamSpec},
+ stream::{StreamContainer, StreamSpec},
LocalTrack, Node, SourceTrackKind,
},
CONF,
@@ -21,7 +21,8 @@ use tokio::{
pub async fn hls_master_stream(
node: Arc<Node>,
_local_tracks: Vec<LocalTrack>,
- _spec: StreamSpec,
+ segment: u64,
+ container: StreamContainer,
mut b: DuplexStream,
) -> Result<()> {
let media = node.media.as_ref().ok_or(anyhow!("no media"))?;
@@ -32,10 +33,11 @@ pub async fn hls_master_stream(
for (i, t) in media.tracks.iter().enumerate() {
let uri = format!(
"stream?{}",
- StreamSpec {
- track: vec![i],
- format: StreamFormat::HlsVariant,
- ..Default::default()
+ StreamSpec::HlsVariant {
+ track: i,
+ segment,
+ container,
+ format: 0
}
.to_query()
);
@@ -54,14 +56,21 @@ pub async fn hls_master_stream(
pub async fn hls_variant_stream(
node: Arc<Node>,
local_tracks: Vec<LocalTrack>,
- mut spec: StreamSpec,
+ segment: u64,
+ track: usize,
+ format: usize,
+ container: StreamContainer,
mut b: DuplexStream,
) -> Result<()> {
let local_track = local_tracks.first().ok_or(anyhow!("no track"))?.to_owned();
- let track_index = spec.track[0];
let media_info = node.media.to_owned().ok_or(anyhow!("no media?"))?;
let frags = spawn_blocking(move || {
- jellyremuxer::fragment::fragment_index(&CONF.media_path, &node, &local_track, track_index)
+ jellyremuxer::fragment::fragment_index(
+ &CONF.media_path,
+ &node,
+ &local_track,
+ track as usize,
+ )
})
.await??;
@@ -72,11 +81,20 @@ pub async fn hls_variant_stream(
writeln!(out, "#EXT-X-VERSION:4")?;
writeln!(out, "#EXT-X-MEDIA-SEQUENCE:0")?;
- spec.format = StreamFormat::Fragment;
for (i, Range { start, end }) in frags.iter().enumerate() {
writeln!(out, "#EXTINF:{:},", end - start)?;
- spec.index = Some(i);
- writeln!(out, "stream?{}", spec.to_query())?;
+ writeln!(
+ out,
+ "stream?{}",
+ StreamSpec::Fragment {
+ segment,
+ track,
+ index: i as u64,
+ container,
+ format,
+ }
+ .to_query()
+ )?;
}
writeln!(out, "#EXT-X-ENDLIST")?;