Gstreamer Segments

来源:互联网 发布:直线裁剪算法代码 编辑:程序博客网 时间:2024/05/15 14:49
Segments 翻译自part-segments.txt

Segments
----------------------
    一个segment是指媒体流的一部分,一个segment有一个开始时间(start),一个停止时间(stop)和一个处理速率。
    一个媒体流有一个起始时间(start),一个停止时间(stop),起始时间总是0,停止时间是媒体的长度或者-1,如果不知道长度,例如:在线广播的媒体流。我们称这样为一个完整的媒体流。
    一个完整媒体流的一个segment的播放通过发送一个seek event,seek包含一个start,stop和一个播放速率。
                              complete stream
           +------------------------------------------------+
           0                                                              duration
                     segment
           |--------------------------|
          start                       stop
    一个segment的播放起始于source或者demuxer元素,通过发送一个newsegment event,包含start,stop和rate,目的是通知下游的元素段的属性。

Use case: FLUSHING seek
~~~~~~~~~~~~~~~~~~~~~~~
例如:
    filesrc ! avidemux ! videodecoder ! videosink
    在该管道中执行一个seek操作,segment:1 到5s,avidemux将执行该seek操作。流程如下:
    1)Avidemux将发送FLUSH_START event给下游和上游的元素,这将引起流处于PAUSED状态。首先_pad_pull_range() and _pad_push()将返回WRONG_STATE,然后开始等待STREAM_LOCK,直到流真的处于PAUSED状态,然后FLUSH_STOP event被发送给上游和下游的元素。
    2)当avidemux开始播放,它将发送newsegment event,start是1,stop是5,stream time是1s。
    3)video decoder内部保存了这些值,并转发给下游的元素,