From 09c7eb30a583ebec6c25b8aa539512e4ae26e5e5 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 30 Sep 2023 18:15:04 +0200 Subject: first snippet draft --- stream/src/segment.rs | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'stream/src/segment.rs') 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 */ +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, spec: StreamSpec, - range: Range, 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(()) } -- cgit v1.2.3-70-g09d2