У меня есть конвейер gstreamer с различными потоками, и мне нужно отложить один из них, чтобы они синхронизировались.gstreamer: поток задержки относительно других
Потоки захватываются в реальном времени, и перед фактическим захватом выполняется предварительная обработка, что добавляет разные задержки к потокам, поэтому они не могут синхронизироваться с компьютером, и внутренняя синхронизация gstreamer не помогает; Я пытаюсь пересинхронизировать их.
Я попытался использовать трюк с queue
«s 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
-video (мой YUY2
) и конверсия слишком дорого.
I думаю что мне нужен элемент, который добавляет (или вычитает) смещение к отметке времени любого получаемого буфера, но не нашел такой вещи.
Я так не думаю. потоки (один из которых мне нужно задержать) мультиплексируются перед отправкой в раковину. –
Итак, какова суть вашего конвейера? Сколько входов, сколько выходов? Вы можете проследить это? – mpr
addea скриншот моего конвейера на вопрос. Я хочу отложить то, что выходит из 'decklinksrc' –