From d3ed810656a563fc733771e760b2abbb05bd98cb Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 7 Mar 2026 02:58:52 +0100 Subject: several mp4 fixes --- stream/src/fragment.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'stream/src/fragment.rs') diff --git a/stream/src/fragment.rs b/stream/src/fragment.rs index ff50cf3..0ccf37d 100644 --- a/stream/src/fragment.rs +++ b/stream/src/fragment.rs @@ -62,6 +62,7 @@ pub fn fragment_init( track_num, file_track_num, 0, + 0, &iinfo.paths[file_index], format, )?; @@ -146,6 +147,7 @@ pub fn fragment_transcode_full( track_num: TrackNum, file_track_num: u64, index: IndexNum, + end_pts: u64, media_path: &Path, output_format: &StreamFormatInfo, ) -> Result { @@ -155,6 +157,7 @@ pub fn fragment_transcode_full( .enumerate() .find(|(_, t)| t.remux) .unwrap(); + transcode( &sinfo.cache, &sinfo.config.transcoder, @@ -162,12 +165,16 @@ pub fn fragment_transcode_full( &format!("{}-T{file_track_num}-I{index}", HashKey(&media_path)), input_format, output_format, + index, + end_pts, || { let init = fragment_init(&sinfo, track_num, input_format_num)?; let seg = fragment_remux(&sinfo, &media_path, file_track_num, index, true)?; Ok(Segment { + tracks: init.tracks, + info: init.info, clusters: seg.clusters, - ..init + ..Default::default() }) }, ) @@ -196,6 +203,9 @@ pub fn fragment_stream( .get(format_num) .ok_or(anyhow!("format not found"))?; + let cue_stat = generate_cues(&sinfo.cache, &media_path)?; + let end_pts = cue_stat.cues.get(index + 1).map(|e| e.time).unwrap_or(0); // TODO + let segment = if output_format.remux { fragment_remux(&sinfo, &media_path, file_track_num, index, false)? } else { @@ -205,13 +215,14 @@ pub fn fragment_stream( track_num, file_track_num, index, + end_pts, &media_path, output_format, )? }; let mut out = Vec::new(); - write_frag(map_container(container), &mut out, segment)?; + write_frag(map_container(container), &mut out, segment, index, end_pts)?; Ok(Box::new(Cursor::new(out))) } -- cgit v1.3