diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-02 13:45:30 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-02 13:45:30 +0200 |
commit | a7513d5f0db18570cc7db405810ce66cab6475e4 (patch) | |
tree | 350581a2ef1b4ff0ba6b2b867fa918ed39d70647 /stream/src | |
parent | 3da60b245427a7409e17638bd78783a7ff7154f7 (diff) | |
download | jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.bz2 jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.zst |
broken transcode
Diffstat (limited to 'stream/src')
-rw-r--r-- | stream/src/segment.rs | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/stream/src/segment.rs b/stream/src/segment.rs index 78afc4f..02f3100 100644 --- a/stream/src/segment.rs +++ b/stream/src/segment.rs @@ -4,39 +4,69 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ use anyhow::{anyhow, bail, Result}; -use jellybase::CONF; +use jellybase::{AssetLocationExt, CONF}; use jellycommon::{stream::StreamSpec, LocalTrack, Node}; +use jellytranscoder::snippet::{transcode, Encoding}; use log::warn; -use tokio::io::DuplexStream; +use tokio::{fs::File, io::DuplexStream}; use tokio_util::io::SyncIoBridge; pub async fn segment_stream( node: Node, track_sources: Vec<LocalTrack>, spec: StreamSpec, - b: DuplexStream, + mut 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}"); - } - }); + if let Some(width) = spec.width { + let location = transcode( + "", + Encoding::Video { + codec: "libsvtav1", + preset: 8, + bitrate: spec.bitrate.unwrap_or(2_000_000), + width, + }, + move |b| { + tokio::task::spawn_blocking(move || { + if let Err(err) = jellyremuxer::write_snippet_into( + SyncIoBridge::new(b), + &CONF.library_path, + &node.public, + track_sources, + track, + false, + n, + ) { + warn!("segment stream error: {err}"); + } + }); + }, + ) + .await?; + let mut output = File::open(location.path()).await?; + tokio::io::copy(&mut output, &mut b).await?; + } else { + let b = SyncIoBridge::new(b); + 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(()) } |