aboutsummaryrefslogtreecommitdiff
path: root/stream/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-09 15:16:34 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-09 15:16:34 +0200
commitea06e23a7fd3160f41da9aadec2229dc4dc47e37 (patch)
treeb485f8baeab5b6bf90321fdf60140f4ac362ade9 /stream/src
parentd9aa1005b589ae5eae93f00b25852166226bb9fd (diff)
downloadjellything-ea06e23a7fd3160f41da9aadec2229dc4dc47e37.tar
jellything-ea06e23a7fd3160f41da9aadec2229dc4dc47e37.tar.bz2
jellything-ea06e23a7fd3160f41da9aadec2229dc4dc47e37.tar.zst
Fix bug seeking to clusters without seekhead
Diffstat (limited to 'stream/src')
-rw-r--r--stream/src/fragment.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/stream/src/fragment.rs b/stream/src/fragment.rs
index 4cdc55e..0039bc5 100644
--- a/stream/src/fragment.rs
+++ b/stream/src/fragment.rs
@@ -78,19 +78,30 @@ pub fn fragment_stream(
entries: vec![mk_track.to_owned()],
};
- let mut cluster = {
+ let (mut cluster, next_cluster) = {
let media_file = File::open(&media_path)?;
let mut media = create_demuxer_autodetect(Box::new(media_file))?
.ok_or(anyhow!("media container unknown"))?;
media.seek_cluster(Some(cluster_offset))?;
- media
- .read_cluster()?
- .ok_or(anyhow!("cluster unexpectedly missing"))?
- .1
+ (
+ media
+ .read_cluster()?
+ .ok_or(anyhow!("cluster unexpectedly missing"))?
+ .1,
+ media.read_cluster()?.map(|(_, x)| x),
+ )
};
cluster.simple_blocks.retain(|b| b.track == track_num);
cluster.block_groups.retain(|b| b.block.track == track_num);
+ let next_kf = next_cluster
+ .map(|x| {
+ x.simple_blocks
+ .iter()
+ .find(|b| b.track == track_num)
+ .cloned()
+ })
+ .flatten();
let jr_container = match container {
StreamContainer::WebM => ContainerFormat::Webm,
@@ -107,7 +118,7 @@ pub fn fragment_stream(
..Default::default()
};
segment.info.writing_app =
- concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")).to_string();
+ concat!(env!("CARGO_PKG_NAME"), "-", env!("CARGO_PKG_VERSION")).to_string();
if !format.remux {
segment = transcode(
@@ -115,6 +126,7 @@ pub fn fragment_stream(
&format!("{media_path:?} {track_num} {index}"),
format,
segment,
+ next_kf,
)?;
}