mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-05-10 18:34:57 +00:00
When dealing with key-unit trick mode downloads, the goal is to provide the best "Quality of Experience". This is achieved by: 1) maximizing the number of frames displayed per second 2) avoiding "stalling" as much as possible (i.e. not downloading and decoding frames fast enough) This implementation achives this by: 1) Knowing very precisely the current keyframe being download (i.e more accurate than at the fragment level which might contain more than one keyfram). This is the new "actual_position" variable introduced by this commit 2) Knowing the position of downstream (provided by QoS and stored in the adaptivedemuxstream qos_earliest_time variable) 3) Knowing how long it takes to request and fully download a keyframe (the average_download_time variable) Taking those 3 variables into account, whenever a keyframe has been pushed downstream we calculate a "target time" (target_time variable) which is the ideal next keyframe time to request so that: 1) It will be requested/downloaded/demuxed/decoded in time to be displayed without being too late 2) It will not be too far ahead that it would cause too few frames per second to be displayed. How far ahead we will request is inversily proportional to how close the actual position (actual_position) is from the downstream position (qos_earliest_time). The more is buffered between the source and the sink, the "closer" the target time will be, and therefore the more frames per seconds will be displayed (up to the limit of keyframes_per_second * absolute_rate). |
||
---|---|---|
.. | ||
gstdash_debug.h | ||
gstdashdemux.c | ||
gstdashdemux.h | ||
gstisoff.c | ||
gstisoff.h | ||
gstmpdparser.c | ||
gstmpdparser.h | ||
gstplugin.c | ||
Makefile.am | ||
meson.build |