Streams
This document describes the objects that are passed from element to element in the streaming thread.
Stream objects
The following objects are to be expected in the streaming thread:
- events, including:
-
STREAM_START(START) -
SEGMENT(SEGMENT) -
EOS* (EOS) -
TAG(T)
-
- buffers * (B)
Objects marked with * need to be synchronised to the clock in sinks and live sources.
Typical stream
A typical stream starts with a STREAM_START event that marks the start of the
stream, followed by a SEGMENT event that marks the buffer timestamp
range. After that buffers are sent one after the other. After the last buffer an
EOS event marks the end of the stream. No more buffers are to be processed
after the EOS event.
+-----+-------+ +-++-+ +-+ +---+
|START|SEGMENT| |B||B| ... |B| |EOS|
+-----+-------+ +-++-+ +-+ +---+
-
STREAM_START- marks the start of a stream; unlike the
SEGMENTevent, there will be noSTREAM_STARTevent after flushing seeks.
- marks the start of a stream; unlike the
-
SEGMENT, rate, start/stop, time. (See also Segments)- marks valid buffer timestamp range (start, stop)
- marks
stream_timeof buffers (time). This is the stream time of buffers with a timestamp ofS.start. - marks playback rate (rate). This is the required playback rate.
- marks applied rate (
applied_rate). This is the already applied playback rate. (See also trickmodes) - marks
running_timeof buffers. This is the time used to synchronize against the clock.
-
N buffers
-
displayable buffers are between start/stop of the
SEGMENT(S). Buffers outside the segment range should be dropped or clipped. -
running_time: For each buffer, a monotonically increasing value that can be used to synchronize against the clock (See also synchronisation).if (S.rate > 0.0) running_time = (B.timestamp - S.start) / ABS (S.rate) + S.base; else running_time = (S.stop - B.timestamp) / ABS (S.rate) + S.base; -
stream_time: The current position in the stream, between 0 and duration.stream_time = (B.timestamp - S.start) * ABS (S.applied_rate) + S.time;
-
-
EOS- marks the end of data, nothing is to be expected after
EOS, elements should refuse more data and returnGST_FLOW_EOS. AFLUSH_STOPevent clears theEOSstate of an element.
- marks the end of data, nothing is to be expected after
Elements
These events are generated typically either by the GstBaseSrc class for
sources operating in push mode, or by a parser/demuxer operating in
pull-mode and pushing parsed/demuxed data downstream.
The results of the search are