How many rs can you find in:
Q: Подключение tee в gstreamer при нажатии кнопки Поток с вэб камеры транслирую на виджет. При нажатии на кнопку хочу копировать этот же поток через tee в muxer и далее в файл. Можно ли эту ветку подключать онлайн и как правильно её останавливать?
Есть план Б: сделать отдельный пайп и подключить его через appsink-appsrc.

A: Как простой вариант, использовать элемент valve, tee-valve --> по требованию создаем и подключаем к нему --> muxer-filesink, во время создания pipe у элемента valve выставить флаг valve.set_property(drop, True)
когда нужно начать запись в файл, создать и подключить muxer->filesink и переключить флаг в False
если нужно писать в разные файлы, можно подменять filesink (через unlink/link) предварительно включив drop
чтобы файл корректно завершался нужно отправить в muxer сигнал eos
src_pad = muxer.get_static_pad(src)
src_pad.add_probe(Gst.PadProbeType.BLOCK | Gst.PadProbeType.EVENT_DOWNSTREAM, probe_event_cb, None)
muxer_sink.send_event(Gst.Event.new_eos())

callback будет примерно таким
    def probe_event_cb(pad, info, data):
        if info.get_event().type is not Gst.EventType.EOS:
            return Gst.PadProbeReturn.PASS
        
        src_pad.remove_probe(info.id)
        filesink.set_state(Gst.State.NULL)
        muxer.set_state(Gst.State.NULL)
        pipe.remove(muxer)
        pipe.remove(filesink)


user
The given text has thirty-five "r"s.
assistant