diff options
author | metamuffin <metamuffin@disroot.org> | 2023-09-30 18:15:04 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-09-30 18:15:04 +0200 |
commit | 09c7eb30a583ebec6c25b8aa539512e4ae26e5e5 (patch) | |
tree | 2bbf03c9f37212b8fce89367281cd4a3d5c2fa0c /stream/src/segment.rs | |
parent | 30e3d18c6ec50572365baaaaa3542769e82e763a (diff) | |
download | jellything-09c7eb30a583ebec6c25b8aa539512e4ae26e5e5.tar jellything-09c7eb30a583ebec6c25b8aa539512e4ae26e5e5.tar.bz2 jellything-09c7eb30a583ebec6c25b8aa539512e4ae26e5e5.tar.zst |
first snippet draft
Diffstat (limited to 'stream/src/segment.rs')
-rw-r--r-- | stream/src/segment.rs | 32 |
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(()) } |