aboutsummaryrefslogtreecommitdiff
path: root/stream/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-10-02 13:45:30 +0200
committermetamuffin <metamuffin@disroot.org>2023-10-02 13:45:30 +0200
commita7513d5f0db18570cc7db405810ce66cab6475e4 (patch)
tree350581a2ef1b4ff0ba6b2b867fa918ed39d70647 /stream/src
parent3da60b245427a7409e17638bd78783a7ff7154f7 (diff)
downloadjellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar
jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.bz2
jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.zst
broken transcode
Diffstat (limited to 'stream/src')
-rw-r--r--stream/src/segment.rs66
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(())
}