aboutsummaryrefslogtreecommitdiff
path: root/stream/src/segment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stream/src/segment.rs')
-rw-r--r--stream/src/segment.rs32
1 files changed, 28 insertions, 4 deletions
diff --git a/stream/src/segment.rs b/stream/src/segment.rs
index ed4f5ef..d09d357 100644
--- a/stream/src/segment.rs
+++ b/stream/src/segment.rs
@@ -3,16 +3,40 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
+use anyhow::{anyhow, bail, Result};
+use jellybase::CONF;
use jellycommon::{stream::StreamSpec, LocalTrack, Node};
-use std::ops::Range;
+use log::warn;
use tokio::io::DuplexStream;
+use tokio_util::io::SyncIoBridge;
pub async fn stream_segment(
node: Node,
track_sources: Vec<LocalTrack>,
spec: StreamSpec,
- range: Range<usize>,
b: DuplexStream,
-) {
-
+) -> Result<()> {
+ let b = SyncIoBridge::new(b);
+
+ if spec.tracks.len() != 1 {
+ bail!("unsupported number of tracks for segment, must be exactly one");
+ }
+ let track = spec.tracks[0];
+ let n = spec.index.ok_or(anyhow!("segment index missing"))?;
+
+ tokio::task::spawn_blocking(move || {
+ if let Err(err) = jellyremuxer::write_snippet_into(
+ b,
+ CONF.library_path.clone(),
+ node.public.clone(),
+ track_sources,
+ track,
+ spec.webm.unwrap_or(false),
+ n,
+ ) {
+ warn!("segment stream error: {err}");
+ }
+ });
+
+ Ok(())
}