mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-04-27 15:34:54 +00:00
fmp4mux: Send force-keyunit events for now if the ideal position has already passed
This commit is contained in:
parent
a56435801d
commit
627bf756b1
1 changed files with 54 additions and 14 deletions
|
@ -1388,15 +1388,35 @@ impl FMP4Mux {
|
||||||
);
|
);
|
||||||
state.fragment_start_pts = Some(fragment_end_pts);
|
state.fragment_start_pts = Some(fragment_end_pts);
|
||||||
|
|
||||||
gst::debug!(
|
let fku_time = fragment_end_pts + settings.fragment_duration;
|
||||||
CAT,
|
let max_position = state
|
||||||
imp: self,
|
.streams
|
||||||
"Sending force-keyunit events for running time {}",
|
.iter()
|
||||||
fragment_end_pts + settings.fragment_duration,
|
.map(|s| s.current_position)
|
||||||
);
|
.max()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let fku_time = if max_position > fku_time {
|
||||||
|
gst::warning!(
|
||||||
|
CAT,
|
||||||
|
imp: self,
|
||||||
|
"Sending force-keyunit event late for running time {} at {}",
|
||||||
|
fku_time,
|
||||||
|
max_position,
|
||||||
|
);
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
gst::debug!(
|
||||||
|
CAT,
|
||||||
|
imp: self,
|
||||||
|
"Sending force-keyunit event for running time {}",
|
||||||
|
fku_time,
|
||||||
|
);
|
||||||
|
Some(fku_time)
|
||||||
|
};
|
||||||
|
|
||||||
let fku = gst_video::UpstreamForceKeyUnitEvent::builder()
|
let fku = gst_video::UpstreamForceKeyUnitEvent::builder()
|
||||||
.running_time(fragment_end_pts + settings.fragment_duration)
|
.running_time(fku_time)
|
||||||
.all_headers(true)
|
.all_headers(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -2063,15 +2083,35 @@ impl AggregatorImpl for FMP4Mux {
|
||||||
state.earliest_pts = Some(earliest_pts);
|
state.earliest_pts = Some(earliest_pts);
|
||||||
state.fragment_start_pts = Some(earliest_pts);
|
state.fragment_start_pts = Some(earliest_pts);
|
||||||
|
|
||||||
gst::debug!(
|
let fku_time = earliest_pts + settings.fragment_duration;
|
||||||
CAT,
|
let max_position = state
|
||||||
imp: self,
|
.streams
|
||||||
"Sending first force-keyunit event for running time {}",
|
.iter()
|
||||||
earliest_pts + settings.fragment_duration,
|
.map(|s| s.current_position)
|
||||||
);
|
.max()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let fku_time = if max_position > fku_time {
|
||||||
|
gst::warning!(
|
||||||
|
CAT,
|
||||||
|
imp: self,
|
||||||
|
"Sending first force-keyunit event late for running time {} at {}",
|
||||||
|
fku_time,
|
||||||
|
max_position,
|
||||||
|
);
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
gst::debug!(
|
||||||
|
CAT,
|
||||||
|
imp: self,
|
||||||
|
"Sending first force-keyunit event for running time {}",
|
||||||
|
fku_time,
|
||||||
|
);
|
||||||
|
Some(fku_time)
|
||||||
|
};
|
||||||
|
|
||||||
let fku = gst_video::UpstreamForceKeyUnitEvent::builder()
|
let fku = gst_video::UpstreamForceKeyUnitEvent::builder()
|
||||||
.running_time(earliest_pts + settings.fragment_duration)
|
.running_time(fku_time)
|
||||||
.all_headers(true)
|
.all_headers(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue