| Seeking |
| ------- |
| |
| Seeking in GStreamer means configuring the pipeline for playback of the |
| media between a certain start and stop time, called a segment. |
| |
| Different kinds of seeking exist: |
| |
| - immediate seeking with low latency (FLUSH seek) |
| - seeking without flush, playback will start from the new |
| position after all the queues are emptied with old data. |
| - segment seeking with and without FLUSH, this can be used to |
| implement seamless looping or NLE functionality. |
| |
| Seeking can be performed in different formats such as time, frames |
| or samples. |
| |
| Seeking can be performed to an absolute position or relative to the |
| currently configured segment. |
| |
| For seeking to work reliably, all plugins in the pipeline need to follow |
| the well-defined rules in this document. |
| |
| Non segment seeking will make the pipeline emit EOS when the configured |
| segment has been played. |
| |
| Segment seeking will not emit an EOS at the end of the range but will |
| post a SEGMENT_DONE message on the bus. This message is posted by the |
| earliest element 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. |
| |
| |
| Generating seeking events |
| ------------------------- |
| |
| |
| |
| |
| |
| 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 immediatly |
| played after the seek calls 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. |
| |