diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-10-09 15:16:34 +0200 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-10-09 15:16:34 +0200 |
| commit | ea06e23a7fd3160f41da9aadec2229dc4dc47e37 (patch) | |
| tree | b485f8baeab5b6bf90321fdf60140f4ac362ade9 /stream/src | |
| parent | d9aa1005b589ae5eae93f00b25852166226bb9fd (diff) | |
| download | jellything-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.rs | 24 |
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, )?; } |