如何向现有管道添加过滤器。
目前我正在使用现有的视频文件,然后使用gst_parse_launch
gst_parse_launch("-v -m -t filesrc location=./videos/example.webm ! decodebin ! cutter threshold-dB=-39 run-length=400000000 !tee name=t ! queue ! fakesink t. ! queue ! valve name=valve ! audioconvert! audioresample ! audio/x-raw, rate=16000, channels=1 ! multifilesink location=./output/output%02d.pcm next-file=2", NULL);
现在这个工作正常。
我想知道如何一次向现有pipeline
我知道我可以做audioconvert = gst_element_factory_make ("audioconvert", "audioconvert");
但有没有任何方法会直接采用像gst_parse_launch
方法那样的多个过滤器?
编辑:目前我得到一个带音频视频源的现有管道,我想要做的就是应用我在此管道上开发的过滤器,
我知道我可以使用st_bin_add_many to add
,但这需要我gst_element_factory_make
,但我想知道有什么方法可以使用gst_parse_launch
处理所有过滤器{{} 1}}然后将此新管道添加到现有音频视频管道
答案 0 :(得分:1)
您可以使用gst_bin_add_many
语法为:(GST_BIN (existing_pipeline), filter1, filter2, filter3, filter4)
答案 1 :(得分:1)
您可以使用gst_parse_bin_from_description()生成包含管道描述中元素的bin:https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-bin-from-description
这为您提供了一个包含您指定的所有元素的bin,然后您可以将它们作为单个元素进行处理,并将它们添加到现有管道中,并链接它们。请注意ghost_unlinked_pads参数,你可能希望这个为TRUE,除非你自己手动重写它。
另外请记住,向正在运行的管道添加元素需要一些特殊情况,我在不久前写了一篇关于它的文章,以防它对您很重要:https://coaxion.net/blog/2014/01/gstreamer-dynamic-pipelines/
另请注意,您无法将“-m -v -t”传递给gst_parse_launch()。这些是命令行gst-launch-1.0工具的参数,gst_parse_launch()会在最好的情况下忽略它们,或者可能只是失败。
另请注意,通过管道描述创建的管道不一定是可重复使用的(如果涉及SOMETIMES或REQUEST打击垫),那么您就不能进入NULL状态,然后回到PAUSED / PLAYING并假设事情仍然相同。如果你需要这个,你必须自己手动创建元素,然后用gst_bin_add()/ gst_bin_add_many()将它们添加到bin中并自己链接它们。