diff options
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(()) +} |