aboutsummaryrefslogtreecommitdiff
path: root/stream/src/jhls.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-10-01 09:20:39 +0200
committermetamuffin <metamuffin@disroot.org>2023-10-01 09:20:39 +0200
commitd857684dd6358fb5ff979ca09ac78b5649b0f411 (patch)
treedcaea52cf90f0c38cdf7b1fe8f03e6147925412f /stream/src/jhls.rs
parentcfc6e1b0cf0ce90b2fc05120ebb41295987fa7ea (diff)
downloadjellything-d857684dd6358fb5ff979ca09ac78b5649b0f411.tar
jellything-d857684dd6358fb5ff979ca09ac78b5649b0f411.tar.bz2
jellything-d857684dd6358fb5ff979ca09ac78b5649b0f411.tar.zst
jhls server-side draft
Diffstat (limited to 'stream/src/jhls.rs')
-rw-r--r--stream/src/jhls.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/stream/src/jhls.rs b/stream/src/jhls.rs
new file mode 100644
index 0000000..5e15d6f
--- /dev/null
+++ b/stream/src/jhls.rs
@@ -0,0 +1,43 @@
+use anyhow::Result;
+use jellybase::CONF;
+use jellycommon::{
+ jhls::{JhlsMetadata, JhlsTrack},
+ stream::StreamSpec,
+ LocalTrack, Node,
+};
+use tokio::io::{AsyncWriteExt, DuplexStream};
+
+pub async fn jhls_stream(
+ node: Node,
+ track_sources: Vec<LocalTrack>,
+ _spec: StreamSpec,
+ mut b: DuplexStream,
+) -> Result<()> {
+ let tracks = tokio::task::spawn_blocking(move || {
+ node.public
+ .media
+ .as_ref()
+ .unwrap()
+ .tracks
+ .iter()
+ .enumerate()
+ .map(|(i, t)| {
+ let segments = jellyremuxer::snippet::snippet_index(
+ &CONF.library_path,
+ &node.public,
+ &track_sources,
+ i,
+ )?;
+ Ok::<_, anyhow::Error>(JhlsTrack {
+ info: t.to_owned(),
+ segments,
+ })
+ })
+ .try_collect::<Vec<_>>()
+ })
+ .await??;
+
+ let out = serde_json::to_string(&JhlsMetadata { tracks })?;
+ tokio::spawn(async move { b.write_all(out.as_bytes()).await });
+ Ok(())
+}