diff options
Diffstat (limited to 'stream/src/webvtt.rs')
-rw-r--r-- | stream/src/webvtt.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/stream/src/webvtt.rs b/stream/src/webvtt.rs index e9d03bf..b29c7c5 100644 --- a/stream/src/webvtt.rs +++ b/stream/src/webvtt.rs @@ -4,7 +4,7 @@ Copyright (C) 2024 metamuffin <metamuffin.org> */ use anyhow::{anyhow, Context, Result}; -use jellybase::CONF; +use jellybase::{cache::async_cache_memory, CONF}; use jellycommon::{stream::StreamSpec, LocalTrack, Node}; use jellyremuxer::extract::extract_track; use jellytranscoder::subtitles::{parse_subtitles, write_webvtt}; @@ -26,16 +26,34 @@ pub async fn vtt_stream( let track = &node.public.media.unwrap().tracks[tracki]; let cp = local_track.codec_private.clone(); - let blocks = - tokio::task::spawn_blocking(move || extract_track(CONF.media_path.clone(), local_track)) + let subtitles = async_cache_memory( + &[ + "vtt", + &format!( + "{} {}", + local_track.path.to_str().unwrap(), + local_track.track + ), + ], + move || async move { + let blocks = tokio::task::spawn_blocking(move || { + extract_track(CONF.media_path.clone(), local_track) + }) .await??; + let subtitles = parse_subtitles(&track.codec, cp, blocks)?; + Ok(subtitles) + }, + ) + .await?; - let subtitles = parse_subtitles(&track.codec, cp, blocks)?; let output = if json { - serde_json::to_string(&subtitles)? + serde_json::to_string(subtitles.as_ref())? } else { - write_webvtt(node.public.title.clone().unwrap_or_default(), subtitles) - .context("writing webvtt")? + write_webvtt( + node.public.title.clone().unwrap_or_default(), + subtitles.as_ref(), + ) + .context("writing webvtt")? }; tokio::task::spawn(async move { let _ = b.write_all(output.as_bytes()).await; |