gst_parse_launch()的限制?
据我所知,gst\u parse\u launch()基于描述管道的命令行语法创建了一个新管道。它自动处理请求焊盘(有时是焊盘等)的所有复杂细节,并构建管道 所以我的问题是,为什么不一直用这个?为什么还要添加pad附加处理程序、请求和链接pad等呢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()不起作用的情况?许多GStreamer元素将使用这些功能来探测应该加载哪个插件。想到的最佳示例是decodebin或playbin插件。对于第一个,您只需选择源代码(例如filesrc) 现在,播放我们的媒体流时会发生什么 开始时,decodebin的“内部”仅为: ---水槽-->|[打字查找]| 因为元素仍然不知道流内容,所以此时没有出现源pad 如果您有avi视频文件,则decodebin将首先使用特定的GStreamer元素来探测流中使用的容器/编解码器。此元素()将根据流和编解码器/容器之间的相似性计算分数 在本例中,TypeFind将命中avi容器,因此它将分配一个avi解析器。decodebin的“内部”正在扩展。。。avi解析器分析流,以了解是否有音频/视频子流需要解析。如果是这样的话,typefind将再次出现,以查找使用的编解码器 然后分配适当的解码器。在这里,decodebin现在已经完全准备就绪,下游元素(如sink元素)必须与新创建的源pad链接以使流继续。这是通过添加的焊盘信号和焊盘链接程序来完成的 如果没有任何这些焊盘特征,这种行为将不可能发生,在获得流之前,所有的一切都必须在金属中静态设置。这意味着您必须提前知道您将要阅读的流的内容(这是一个非常严重的限制!)
最后一句话:当您通过命令行指定管道时(我想是使用
gst-launch
),您处于一个高级界面。在您指定的元素中,焊盘链接机制可能非常重要!问题是你不必麻烦,因为事情会解决的。但是“不必为某事烦恼”并不意味着这件事对你没用。如果你使用gst-launch,你只能运行一个静态管道。也就是说,您不能搜索,不能(例如)随时间改变音量,不能(例如)播放第二个文件
gst launch实际上是作为一个开发者工具来尝试某个元素或某些属性。+1“不必为某件事操心并不意味着这件事对你毫无用处。”