Gstreamer流

Streams
----------------------
    这篇文档描述在流线程中从一个元素传递到另一个元素的对象。

Stream objects 
~~~~~~~~~~~~~~
    如下的对象可能会出现在流线程中。
    - events
        - NEW_SEGMENT (NS)
        - EOS  (EOS)                  *
        - TAG               (T)
     - buffers              (B)          *
    *号标记的对象表示这些对象需要被同步到时钟。

Typical stream 
~~~~~~~~~~~~~~
    一个典型的流以一个标记了buffer有效时间范围的newsegment event开始,发送了newsegment event后,数据buffer就一个接一个被发送 ,最后一个buffer后,EOS标记了流的结束。在EOS event后,不会再有buffer被处理。如下图:
    +--+ +-++-+     +-+ +---+ 
    |NS| |B||B| ... |B| |EOS|
    +--+ +-++-+     +-+ +---+
    1)NEW_SEGMENT, rate, start/stop, time
     - start,stop标记了buffer的有效时间。
     - time标记了stream time.
     - rate标记了待请求的播放速率.
     - applied_rate标记了已经采用的播放速率.
    2) N buffers
     - displayable buffers 的时间戳应于start和stop之间,范围之外的buffer应该被丢弃。
     - running_time: 
         if (NS.rate > 0.0) 
            running_time = (B.timestamp - NS.start) / NS.abs_rate + NS.accum 
         else 
             running_time = (NS.stop - B.timestamp) / NS.abs_rate + NS.accum
     - stream_time:
         stream_time = (B.timestamp - NS.start) * NS.abs_applied_rate + NS.time
         stream_time介于0和媒体长度之间.
  3) EOS
     - 标记数据的结束。

你可能感兴趣的:(segment,gstreamer)