gstreamer/ext/dash
Edward Hervey 245d73e516 dashdemux: Improve key-unit trick mode downloading
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).
2017-05-18 19:04:57 +02:00
..
gstdash_debug.h dash: use same debug category for dashdemux and the mpd parser 2013-07-01 14:22:02 -03:00
gstdashdemux.c dashdemux: Improve key-unit trick mode downloading 2017-05-18 19:04:57 +02:00
gstdashdemux.h dashdemux: Improve key-unit trick mode downloading 2017-05-18 19:04:57 +02:00
gstisoff.c dashdemux: When clearing the sidx parser, reset all state 2017-03-15 13:27:23 +02:00
gstisoff.h dash: Split gst_isoff_sidx_parser_add_buffer() function 2016-12-20 12:55:40 +02:00
gstmpdparser.c dashdemux: Rewrite ISOBMFF & SIDX handling 2017-04-18 13:49:08 +02:00
gstmpdparser.h mpdparser: Support multiple Period elements in external xml 2016-11-14 16:56:43 +02:00
gstplugin.c dashdemux: remove typefinder, move it to typefindfunctions in -base 2015-07-16 21:28:28 +01:00
Makefile.am Remove plugin specific static build option 2017-05-16 14:05:52 -04:00
meson.build Add support for Meson as alternative/parallel build system 2016-08-20 11:35:54 +01:00