2014-11-06 3 views
0

У меня есть конвейер 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 думаю что мне нужен элемент, который добавляет (или вычитает) смещение к отметке времени любого получаемого буфера, но не нашел такой вещи.

ответ

0

Некоторые элементы раковины обладают свойством отсрочки-задержки. Не могли бы вы использовать это?

Edit: Вы можете также попробовать единичный элемент со свойством сна времени:

identity sleep-time=25000 

edit2: Также убедитесь, что у вас есть элемент «очереди» для обоих трубопроводов, прикрепленных к элементу «тройник».

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

Трудно понять, что может быть причиной заикания, не видя его или не имея более подробных сведений о регистрации.

+0

Я так не думаю. потоки (один из которых мне нужно задержать) мультиплексируются перед отправкой в ​​раковину. –

+0

Итак, какова суть вашего конвейера? Сколько входов, сколько выходов? Вы можете проследить это? – mpr

+0

addea скриншот моего конвейера на вопрос. Я хочу отложить то, что выходит из 'decklinksrc' –

Смежные вопросы