Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gst_parse_launch()的限制?_C_Gstreamer - Fatal编程技术网

gst_parse_launch()的限制?

gst_parse_launch()的限制?,c,gstreamer,C,Gstreamer,据我所知,gst\u parse\u launch()基于描述管道的命令行语法创建了一个新管道。它自动处理请求焊盘(有时是焊盘等)的所有复杂细节,并构建管道 所以我的问题是,为什么不一直用这个?为什么还要添加pad附加处理程序、请求和链接pad等呢 是否存在使用gst\u parse\u launch()不起作用的情况?许多GStreamer元素将使用这些功能来探测应该加载哪个插件。想到的最佳示例是decodebin或playbin插件。对于第一个,您只需选择源代码(例如filesrc) 现在,

据我所知,gst\u parse\u launch()基于描述管道的命令行语法创建了一个新管道。它自动处理请求焊盘(有时是焊盘等)的所有复杂细节,并构建管道

所以我的问题是,为什么不一直用这个?为什么还要添加pad附加处理程序、请求和链接pad等呢


是否存在使用gst\u parse\u launch()不起作用的情况?

许多GStreamer元素将使用这些功能来探测应该加载哪个插件。想到的最佳示例是decodebinplaybin插件。对于第一个,您只需选择源代码(例如filesrc

现在,播放我们的媒体流时会发生什么

开始时,decodebin的“内部”仅为:

---水槽-->|[打字查找]|

因为元素仍然不知道流内容,所以此时没有出现源pad

如果您有avi视频文件,则decodebin将首先使用特定的GStreamer元素来探测流中使用的容器/编解码器。此元素()将根据流和编解码器/容器之间的相似性计算分数

在本例中,TypeFind将命中avi容器,因此它将分配一个avi解析器。decodebin的“内部”正在扩展。。。avi解析器分析流,以了解是否有音频/视频子流需要解析。如果是这样的话,typefind将再次出现,以查找使用的编解码器

然后分配适当的解码器。在这里,decodebin现在已经完全准备就绪,下游元素(如sink元素)必须与新创建的源pad链接以使流继续。这是通过添加的焊盘信号和焊盘链接程序来完成的

如果没有任何这些焊盘特征,这种行为将不可能发生,在获得流之前,所有的一切都必须在金属中静态设置。这意味着您必须提前知道您将要阅读的流的内容(这是一个非常严重的限制!)


最后一句话:当您通过命令行指定管道时(我想是使用
gst-launch
),您处于一个高级界面。在您指定的元素中,焊盘链接机制可能非常重要!问题是你不必麻烦,因为事情会解决的。但是“不必为某事烦恼”并不意味着这件事对你没用。

如果你使用gst-launch,你只能运行一个静态管道。也就是说,您不能搜索,不能(例如)随时间改变音量,不能(例如)播放第二个文件

gst launch实际上是作为一个开发者工具来尝试某个元素或某些属性。

+1“不必为某件事操心并不意味着这件事对你毫无用处。”