diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-07 02:58:52 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-07 02:58:52 +0100 |
| commit | d3ed810656a563fc733771e760b2abbb05bd98cb (patch) | |
| tree | 806040a97d38f5514990069de14f47f8ffff997a /stream/src/fragment.rs | |
| parent | b306e65ddf91c97f5bf6f751122c7b87db233443 (diff) | |
| download | jellything-d3ed810656a563fc733771e760b2abbb05bd98cb.tar jellything-d3ed810656a563fc733771e760b2abbb05bd98cb.tar.bz2 jellything-d3ed810656a563fc733771e760b2abbb05bd98cb.tar.zst | |
several mp4 fixes
Diffstat (limited to 'stream/src/fragment.rs')
| -rw-r--r-- | stream/src/fragment.rs | 15 |
1 files changed, 13 insertions, 2 deletions
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<Segment> { @@ -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))) } |