Seeking
-------

Seeking in GStreamer means configuring the pipeline for playback of the
media between a certain start and stop time, called the playback segment.
By default a pipeline will play from position 0 to the total duration of the
media at a rate of 1.0.

A seek is performed by sending a seek event to the sink elements of a
pipeline. Sending the seek event to a bin will by default forward
the event to all sinks in the bin.

When performing a seek, the start and stop values of the segment can be
specified as absolute positions or relative to the currently configured
playback segment. Note that it is not possible to seek relative to the current
playback position. To seek relative to the current playback position, one must
query the position first and then perform an absolute seek to the desired
position.

Feedback of the seek operation can be immediately using the GST_SEEK_FLAG_FLUSH
flag. With this flag, all pending data in the pipeline is discarded and playback
starts from the new position immediately.

When the FLUSH flag is not set, the seek will be queued and executed as
soon as possible, which might be after all queues are emptied.

Seeking can be performed in different formats such as time, frames
or samples.

The seeking can be performed to a nearby key unit or to the exact
(estimated) unit in the media (GST_SEEK_FLAG_KEY_UNIT). See below for more
details on this.

The seeking can be performed by using an estimated target position or in an
accurate way (GST_SEEK_FLAG_ACCURATE). For some formats this can result in
having to scan the complete file in order to accurately find the target unit.
See below for more details on this.

Non segment seeking will make the pipeline emit EOS when the configured 
segment has been played.

Segment seeking (using the GST_SEEK_FLAG_SEGMENT) will not emit an EOS at
the end of the playback segment but will post a SEGMENT_DONE message on the
bus. This message is posted by the element driving the playback in the
pipeline, typically a demuxer.  After receiving the message, the application
can reconnect the pipeline or issue other seek events in the pipeline.
Since the message is posted as early as possible in the pipeline, the
application has some time to issue a new seek to make the transition seamless.
Typically the allowed delay is defined by the buffer sizes of the sinks as well
as the size of any queues in the pipeline.

The seek can also change the playback speed of the configured segment.
A speed of 1.0 is normal speed, 2.0 is double speed. Negative values
mean backward playback.

When performing a seek with a playback rate different from 1.0, the
GST_SEEK_FLAG_SKIP flag can be used to instruct decoders and demuxers that they
are allowed to skip decoding. This can be useful when resource consumption is
more important than accurately producing all frames.


Seeking in push based elements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~






Generating seeking events
~~~~~~~~~~~~~~~~~~~~~~~~~

A seek event is created with gst_event_new_seek ().



Seeking variants
~~~~~~~~~~~~~~~~

The different kinds of seeking methods and their internal workings are
described below.


FLUSH seeking
^^^^^^^^^^^^^

This is the most common way of performing a seek in a playback application.
The application issues a seek on the pipeline and the new media is immediately
played after the seek call returns.


seeking without FLUSH
^^^^^^^^^^^^^^^^^^^^^

This seek type is typically performed after issuing segment seeks to finish
the playback of the pipeline.

Performing a non-flushing seek in a PAUSED pipeline blocks until the pipeline
is set to playing again since all data passing is blocked in the prerolled
sinks.


segment seeking with FLUSH
^^^^^^^^^^^^^^^^^^^^^^^^^^

This seek is typically performed when starting seamless looping.


segment seeking without FLUSH
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This seek is typically performed when continuing seamless looping.



========================================================================
 Demuxer/parser behaviour and SEEK_FLAG_KEY_UNIT and SEEK_FLAG_ACCURATE
========================================================================

This section aims to explain the behaviour expected by an element with regard
to the KEY_UNIT and ACCURATE seek flags using the example of a parser or
demuxer.

1. DEFAULT BEHAVIOUR:

When a seek to a certain position is requested, the demuxer/parser will
do two things (ignoring flushing and segment seeks, and simplified for
illustration purposes):

 - send a segment event with a new start position

 - start pushing data/buffers again

To ensure that the data corresponding to the requested seek position
can actually be decoded, a demuxer or parser needs to start pushing data
from a keyframe/keyunit at or before the requested seek position.

Unless requested differently (via the KEY_UNIT flag), the start of the
segment event should be the requested seek position.

So by default a demuxer/parser will then start pushing data from
position DATA and send a segment event with start position SEG_START,
and DATA <= SEG_START.

If DATA < SEG_START, a well-behaved video decoder will start decoding frames
from DATA, but take into account the segment configured by the demuxer via
the segment event, and only actually output decoded video frames from
SEG_START onwards, dropping all decoded frames that are before the
segment start and adjusting the timestamp/duration of the buffer that
overlaps the segment start ("clipping"). A not-so-well-behaved video decoder
will start decoding frames from DATA and push decoded video frames out
starting from position DATA, in which case the frames that are before
the configured segment start will usually be dropped/clipped downstream
(e.g. by the video sink).


2. GST_SEEK_FLAG_KEY_UNIT:

If the KEY_UNIT flag is specified, the demuxer/parser should adjust the
segment start to the position of the key frame closest to the requested
seek position and then start pushing out data from there. The nearest
key frame may be before or after the requested seek position, but many
implementations will only look for the closest keyframe before the
requested position.

Most media players and thumbnailers do (and should be doing) KEY_UNIT seeks
by default, for performance reasons, to ensure almost-instant responsiveness
when scrubbing (dragging the seek slider in PAUSED or PLAYING mode). This
works well for most media, but results in suboptimal behaviour for a small
number of 'odd' files (e.g. files that only have one keyframe at the very
beginning, or only a few keyframes throughout the entire stream). At the
time of writing, a solution for this still needs to be found, but could be
implemented demuxer/parser-side, e.g. make demuxers/parsers ignore the
KEY_UNIT flag if the position adjustment would be larger than 1/10th of
the duration or somesuch.

Summary:

 - if the KEY_UNIT flag is *not* specified, the demuxer/parser should
   start pushing data from a key unit preceding the seek position
   (or from the seek position if that falls on a key unit), and
   the start of the new segment should be the requested seek position.

 - if the KEY_UNIT flag is specified, the demuxer/parser should start
   pushing data from the key unit nearest the seek position (or from
   the seek position if that falls on a key unit), and
   the start of the new segment should be adjusted to the position of
   that key unit which was nearest the requested seek position (ie.
   the new segment start should be the position from which data is
   pushed).


3. GST_SEEK_FLAG_ACCURATE:

If the ACCURATE flag is specified in a seek request, the demuxer/parser
is asked to do whatever it takes (!) to make sure that the position seeked
to is accurate in relation to the beginning of the stream. This means that
it is not acceptable to just approximate the position (e.g. using an average
bitrate). The achieved position must be exact. In the worst case, the demuxer
or parser needs to push data from the beginning of the file and let downstream
clip everything before the requested segment start.

The ACCURATE flag does not affect what the segment start should be in
relation to the requested seek position. Only the KEY_UNIT flag (or its
absence) has any effect on that.

Video editors and frame-stepping applications usually use the ACCURATE flag.

Summary:

 - if the ACCURATE flag is *not* specified, it is up to the demuxer/parser
   to decide how exact the seek should be. If the flag is not specified,
   the expectation is that the demuxer/parser does a resonable best effort
   attempt, trading speed for accuracy. In the absence of an index, the
   seek position may be approximated.

 - if the ACCURATE flag is specified, absolute accuracy is required, and
   speed is of no concern. It is not acceptable to just approximate the
   seek position in that case.

 - the ACCURATE flag does not imply that the segment starts at the
   requested seek position or should be adjusted to the nearest keyframe,
   only the KEY_UNIT flag determines that.


4. ACCURATE and KEY_UNIT combinations:

All combinations of these two flags are valid:

 - neither flag specified: segment starts at seek position, send data
   from preceding key frame (or earlier), feel free to approximate the
   seek position

 - only KEY_UNIT specified: segment starts from position of nearest
   keyframe, send data from nearest keyframe, feel free to approximate the
   seek position

 - only ACCURATE specified: segment starts at seek position, send data
   from preceding key frame (or earlier), do not approximate the seek
   position under any circumstances

 - ACCURATE | KEY_UNIT specified: segment starts from position of nearest
   keyframe, send data from nearest key frame, do not approximate the seek
   position under any circumstances

