aboutsummaryrefslogtreecommitdiff
path: root/stream/src/fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stream/src/fragment.rs')
-rw-r--r--stream/src/fragment.rs15
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)))
}