我有一个带有各种流的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
)并且转换过于昂贵。
我认为我需要一个元素来为它收到的任何缓冲区的时间戳添加(或减去)一个偏移量,但是还没有找到这样的东西。
答案 0 :(得分:0)
某些接收器元素具有渲染延迟属性。你能用吗?
编辑:您还可以尝试使用sleep-time属性的标识元素:
identity sleep-time=25000
Edit2:还要确保你有一个"队列"两个管道的元素连接到" tee"元件。
tee name=t ! queue ! x264 ! ...
t. ! queue ! xvimagesink
如果没有看到它或者有更多的记录细节,很难知道造成口吃的原因是什么。