/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) 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 log::warn; use tokio::io::DuplexStream; use tokio_util::io::SyncIoBridge; pub async fn segment_stream( node: Node, track_sources: Vec, spec: StreamSpec, 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, &node.public, track_sources, track, spec.webm.unwrap_or(false), n, ) { warn!("segment stream error: {err}"); } }); Ok(()) }