Конвейер gstreamer с элементом VADER останавливается на PAUSE при использовании с тройником

У меня есть этот конвейер, который использует элемент VAD pocketsphinx:

            Gst.parse_launch(
              "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " +
              "! vader name=vad auto-threshold=true " +
              "! level name=wavelevel interval=100000000 " + // level interval is in nanoseconds 
              "! wavenc " +
              "! filesink location=audioz.wav"
            );

Он работает нормально, за исключением того, что потоковая передача останавливается, когда в источнике нет голоса.

Я хочу, чтобы запись продолжалась независимо от VAD, поэтому я попробовал этот конвейер с тройником:

            Gst.parse_launch(
              "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " +
              "! tee name=t " +
              "! queue " +
              "! vader name=vad auto-threshold=true " +
              "! fakesink t. sync=false" +
              "! queue " +
              "! level name=wavelevel interval=100000000 " + // level interval is in nanoseconds 
              "! wavenc " +
              "! filesink location=audioz.wav"
            );

И этот всегда останавливается, состояние переходит из NULL -> READY -> PAUSE и навсегда останавливается на PAUSE.

Целью «независимого VAD» является простая запись времени начала и окончания голосовых сегментов (обнаруженных VAD).

Обновлять :

комментирование строки: "! fakesink t. sync=false" решает проблему, поэтому следующий конвейер делает то, что мне нужно:

            this.pipeline = Gst.parse_launch(
              "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " +
              " ! tee name=t" +
              " t. ! queue " +
              " ! vader name=vad auto-threshold=true " +              
              " t. ! queue " +
              " ! level name=wavelevel interval=1000000000 " + // level interval is in nanoseconds 
              " ! wavenc " +
              " ! filesink location=audioz.wav"
            );

Остается вопрос, можно ли иметь очередь без раковины...


person Max L.    schedule 21.10.2013    source источник
comment
Вероятно, проще модифицировать сам вейдер (добавить в него свойства), чтобы он обходил звук, даже если это тишина.   -  person Nikolay Shmyrev    schedule 22.10.2013


Ответы (1)


Самое простое решение — установить async=0 на обоих приемниках. (fakesink и filesink)

person Havard Graff    schedule 22.10.2013