diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-01 09:20:39 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-01 09:20:39 +0200 |
commit | d857684dd6358fb5ff979ca09ac78b5649b0f411 (patch) | |
tree | dcaea52cf90f0c38cdf7b1fe8f03e6147925412f /stream/src/jhls.rs | |
parent | cfc6e1b0cf0ce90b2fc05120ebb41295987fa7ea (diff) | |
download | jellything-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.rs | 43 |
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(()) +} |