aboutsummaryrefslogtreecommitdiff
path: root/stream/src/hls.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-26 21:02:30 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-26 21:02:30 +0100
commit7cc21df6a80881de08e008c3f79b232bd3591973 (patch)
tree8d3af04cf0821d6c4bf4c72676a84202eb296cd6 /stream/src/hls.rs
parent036390867efb2c08a70853b96309f09637e08a30 (diff)
downloadjellything-7cc21df6a80881de08e008c3f79b232bd3591973.tar
jellything-7cc21df6a80881de08e008c3f79b232bd3591973.tar.bz2
jellything-7cc21df6a80881de08e008c3f79b232bd3591973.tar.zst
fix hls?
Diffstat (limited to 'stream/src/hls.rs')
-rw-r--r--stream/src/hls.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/stream/src/hls.rs b/stream/src/hls.rs
index 4f83577..310c6b1 100644
--- a/stream/src/hls.rs
+++ b/stream/src/hls.rs
@@ -25,7 +25,7 @@ pub async fn hls_master_stream(
let mut out = String::new();
writeln!(out, "#EXTM3U")?;
writeln!(out, "#EXT-X-VERSION:4")?;
- writeln!(out, "#EXT-X-INDEPENDENT-SEGMENTS")?;
+ // writeln!(out, "#EXT-X-INDEPENDENT-SEGMENTS")?;
for t in spec.tracks {
let uri = format!(
"stream?{}",
@@ -37,6 +37,7 @@ pub async fn hls_master_stream(
.to_query()
);
// writeln!(out,"#EXT-X-MEDIA:NAME=\"track {t}\", TYPE=AUDIO, GROUP-ID=\"track{t}\", DEFAULT=YES, AUTOSELECT=YES, URI=\"{uri}\"")?;
+ writeln!(out, "#EXT-X-STREAM-INF:BANDWIDTH=5000000")?;
writeln!(out, "{uri}")?;
}
tokio::spawn(async move { b.write_all(out.as_bytes()).await });
@@ -51,6 +52,7 @@ pub async fn hls_variant_stream(
) -> Result<()> {
let local_track = local_tracks.get(0).ok_or(anyhow!("no track"))?.to_owned();
let track_index = spec.tracks[0];
+ let media_info = node.public.media.to_owned().ok_or(anyhow!("no media?"))?;
let snips = spawn_blocking(move || {
jellyremuxer::snippet::snippet_index(
&CONF.media_path,
@@ -60,17 +62,23 @@ pub async fn hls_variant_stream(
)
})
.await??;
+
let mut out = String::new();
writeln!(out, "#EXTM3U")?;
+ writeln!(out, "#EXT-X-PLAYLIST-TYPE:VOD")?;
+ writeln!(out, "#EXT-X-TARGETDURATIION:{}", media_info.duration)?;
writeln!(out, "#EXT-X-VERSION:4")?;
+ writeln!(out, "#EXT-X-MEDIA-SEQUENCE:0")?;
spec.format = StreamFormat::Snippet;
for (i, Range { start, end }) in snips.iter().enumerate() {
- writeln!(out, "#EXTINF:{},", end - start)?;
+ writeln!(out, "#EXTINF:{:},", end - start)?;
spec.index = Some(i);
writeln!(out, "stream?{}", spec.to_query())?;
}
+ writeln!(out, "#EXT-X-ENDLIST")?;
+
tokio::spawn(async move { b.write_all(out.as_bytes()).await });
Ok(())
}