gstreamer:相对于其他人的延迟流

时间:2014-11-06 22:52:11

标签: synchronization delay gstreamer

我有一个带有各种流的gstreamer管道,我需要延迟其中一个,以便它们同步。

实时捕获流并在实际捕获之前进行一些预处理,这会给流添加不同的延迟,因此它们会使计算机不同步,而gstreamer的内部同步也无法帮助;我试图重新同步它们。

我尝试使用提及queue min-threshold-time属性here的技巧,但这没有用,因为管道仍会根据时间戳同步所有缓冲区 - 所以整个管道都会延迟,而不仅仅是一个流。

我目前的管道如下:

+-----------+
|decklinksrc|
+-----------+
     |
     V
  +------+
  |tee   |
  +------+
     |  |                     +-------------+
     |  +-------------------> | xvimagesink |
     V                        +-------------+
  +-----+
  |queue|
  +-----+
     |
     V                    +------------+
  +-------+               |jackaudiosrc|
  |x264env|               +------------+
  +-------+                     |
     |                          V
     V                       +-----+
  +---------+                |faac |
  |h264parse|                +-----+
  +---------+                   |
     |                          V
     V                      +--------+
  +-----+                   |aacparse|
  |queue|                   +--------+
  +-----+                       |
     |    +---------------------+
     V    V
  +----------+
  |flvmux    |
  +----------+
     |
     V
  +-----+
  |queue|
  +-----+
     |
     V
  +---------+
  |rtmpsink |
  +---------+

由于我目前只是尝试延迟视频流,我还尝试使用frei0r-filter-delay0r元素(包装 frei0r 视频延迟插件),但这只是适用于RGBA - 视频(我的是YUY2)并且转换过于昂贵。

认为我需要一个元素来为它收到的任何缓冲区的时间戳添加(或减去)一个偏移量,但是还没有找到这样的东西。

1 个答案:

答案 0 :(得分:0)

某些接收器元素具有渲染延迟属性。你能用吗?

编辑:您还可以尝试使用sleep-time属性的标识元素:

identity sleep-time=25000

Edit2:还要确保你有一个"队列"两个管道的元素连接到" tee"元件。

tee name=t ! queue ! x264 ! ...
t. ! queue ! xvimagesink

如果没有看到它或者有更多的记录细节,很难知道造成口吃的原因是什么。