diff options
author | metamuffin <metamuffin@disroot.org> | 2023-12-18 17:35:58 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-12-18 17:35:58 +0100 |
commit | af16c274aa28886f9f8a839e756ba932f9369187 (patch) | |
tree | e2f520943a5b7b6f21ef6a12d6f9bf06c826eca1 /stream/src/webvtt.rs | |
parent | 19fb2e9d0996fc72dc370709111829fcf11811f3 (diff) | |
download | jellything-af16c274aa28886f9f8a839e756ba932f9369187.tar jellything-af16c274aa28886f9f8a839e756ba932f9369187.tar.bz2 jellything-af16c274aa28886f9f8a839e756ba932f9369187.tar.zst |
about to refactor sub transcode
Diffstat (limited to 'stream/src/webvtt.rs')
-rw-r--r-- | stream/src/webvtt.rs | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/stream/src/webvtt.rs b/stream/src/webvtt.rs index 74a12a5..246b1ed 100644 --- a/stream/src/webvtt.rs +++ b/stream/src/webvtt.rs @@ -1,4 +1,4 @@ -use anyhow::{anyhow, Context, Result}; +use anyhow::{anyhow, bail, Context, Result}; use jellybase::CONF; use jellycommon::{stream::StreamSpec, LocalTrack, Node}; use jellyremuxer::extract::extract_track; @@ -13,25 +13,38 @@ pub async fn webvtt_stream( ) -> Result<()> { // TODO cache + // TODO should use snippets too? big films take too long... + + let tracki = *spec.tracks.get(0).ok_or(anyhow!("no track selected"))?; let local_track = track_sources - .get(*spec.tracks.get(0).ok_or(anyhow!("no track selected"))?) + .get(tracki) .ok_or(anyhow!("track does not exist"))? .clone(); + let track = &node.public.media.unwrap().tracks[tracki]; - let codec_private = local_track - .codec_private - .clone() - .ok_or(anyhow!("ASS is missing required codec private data"))?; + match track.codec.as_str() { + "S_TEXT/UTF8" => bail!("no subrip yet"), + "S_VOBSUB" => bail!("no vobsub yet"), + "S_TEXT/ASS" => { + let codec_private = local_track + .codec_private + .clone() + .ok_or(anyhow!("ASS is missing required codec private data"))?; - let ass_blocks = - tokio::task::spawn_blocking(move || extract_track(CONF.library_path.clone(), local_track)) + let ass_blocks = tokio::task::spawn_blocking(move || { + extract_track(CONF.library_path.clone(), local_track) + }) .await??; - let webvtt = webvtt_from_ass_blocks(node.public.title, codec_private, ass_blocks) - .context("transcoding subtitles")?; + let webvtt = webvtt_from_ass_blocks(node.public.title, codec_private, ass_blocks) + .context("transcoding subtitles")?; + + tokio::task::spawn(async move { + let _ = b.write_all(webvtt.as_bytes()).await; + }); + } - tokio::task::spawn(async move { - let _ = b.write_all(webvtt.as_bytes()).await; - }); + _ => bail!("unknown sub codec"), + }; Ok(()) } |