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.rs84
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(())
-}