diff options
author | metamuffin <metamuffin@disroot.org> | 2024-01-29 13:22:21 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-01-29 13:22:21 +0100 |
commit | 2676e755286d117b100d379fce84ec3da6d8ae98 (patch) | |
tree | 2a075db5468f0c8c2f653be5222c183f4362fcfa /stream/src/segment.rs | |
parent | a4526fd2eb670c8fac2c28eb1597f0c091f25a2a (diff) | |
download | jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.bz2 jellything-2676e755286d117b100d379fce84ec3da6d8ae98.tar.zst |
consistent name for {snippet,segment?,fragment}
Diffstat (limited to 'stream/src/segment.rs')
-rw-r--r-- | stream/src/segment.rs | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/stream/src/segment.rs b/stream/src/segment.rs deleted file mode 100644 index a5162cd..0000000 --- a/stream/src/segment.rs +++ /dev/null @@ -1,84 +0,0 @@ -/* - 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) 2024 metamuffin <metamuffin.org> -*/ -use anyhow::{anyhow, bail, Result}; -use jellybase::{permission::PermissionSetExt, CONF}; -use jellycommon::{ - stream::StreamSpec, - user::{PermissionSet, UserPermission}, - LocalTrack, Node, -}; -use jellytranscoder::snippet::transcode; -use log::warn; -use tokio::{fs::File, io::DuplexStream}; -use tokio_util::io::SyncIoBridge; - -pub async fn segment_stream( - node: Node, - local_tracks: Vec<LocalTrack>, - spec: StreamSpec, - mut b: DuplexStream, - perms: &PermissionSet, -) -> Result<()> { - 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"))?; - - let local_track = local_tracks - .get(0) - .ok_or(anyhow!("track missing"))? - .to_owned(); - - if let Some(profile) = spec.profile { - perms.assert(&UserPermission::Transcode)?; - let location = transcode( - &format!("{track} {n} {:?}", node.private.source), // TODO maybe not use the entire source - CONF.transcoding_profiles - .get(profile) - .ok_or(anyhow!("profile out of range"))?, - move |b| { - tokio::task::spawn_blocking(move || { - if let Err(err) = jellyremuxer::write_snippet_into( - SyncIoBridge::new(b), - &CONF.media_path, - &node.public, - &local_track, - track, - false, - n, - ) { - warn!("segment stream error: {err}"); - } - }); - }, - ) - .await?; - let mut output = File::open(location.abs()).await?; - tokio::task::spawn(async move { - if let Err(err) = tokio::io::copy(&mut output, &mut b).await { - warn!("cannot write stream: {err}") - } - }); - } else { - let b = SyncIoBridge::new(b); - tokio::task::spawn_blocking(move || { - if let Err(err) = jellyremuxer::write_snippet_into( - b, - &CONF.media_path, - &node.public, - &local_track, - track, - spec.webm.unwrap_or(false), - n, - ) { - warn!("segment stream error: {err}"); - } - }); - } - - Ok(()) -} |