aboutsummaryrefslogtreecommitdiff
path: root/stream/src/fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stream/src/fragment.rs')
-rw-r--r--stream/src/fragment.rs104
1 files changed, 51 insertions, 53 deletions
diff --git a/stream/src/fragment.rs b/stream/src/fragment.rs
index e276d29..a34bb8d 100644
--- a/stream/src/fragment.rs
+++ b/stream/src/fragment.rs
@@ -3,7 +3,7 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use anyhow::{anyhow, bail, Result};
+use anyhow::{anyhow, Result};
use jellybase::{
common::{
stream::StreamSpec,
@@ -25,64 +25,62 @@ pub async fn fragment_stream(
spec: StreamSpec,
mut b: DuplexStream,
perms: &PermissionSet,
+ webm: bool,
+ track: u64,
+ segment: u64,
+ index: usize,
) -> Result<()> {
- if spec.track.len() != 1 {
- bail!("unsupported number of tracks for segment, must be exactly one");
- }
- let track = spec.track[0];
- let n = spec.index.ok_or(anyhow!("segment index missing"))?;
-
let local_track = local_tracks
.first()
.ok_or(anyhow!("track missing"))?
.to_owned();
- if let Some(profile) = spec.profile {
- perms.assert(&UserPermission::Transcode)?;
- let location = transcode(
- &format!("{track} {n} {:?}", node), // 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_fragment_into(
- SyncIoBridge::new(b),
- &CONF.media_path,
- &node,
- &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_fragment_into(
- b,
- &CONF.media_path,
- &node,
- &local_track,
- track,
- spec.webm.unwrap_or(false),
- n,
- ) {
- warn!("segment stream error: {err}");
- }
- });
- }
+ // if let Some(profile) = None {
+ // perms.assert(&UserPermission::Transcode)?;
+ // let location = transcode(
+ // &format!("{track} {index} {:?}", node), // 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_fragment_into(
+ // SyncIoBridge::new(b),
+ // &CONF.media_path,
+ // &node,
+ // &local_track,
+ // track as usize,
+ // false,
+ // index,
+ // ) {
+ // 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_fragment_into(
+ b,
+ &CONF.media_path,
+ &node,
+ &local_track,
+ track as usize,
+ webm,
+ index,
+ ) {
+ warn!("segment stream error: {err}");
+ }
+ });
+ // }
Ok(())
}