Gstreamer 如何使用挂起输入启动管道

Gstreamer 如何使用挂起输入启动管道,gstreamer,python-gstreamer,Gstreamer,Python Gstreamer,我现在正在使用以下配置的管道上工作几天: -2个实时输入流(RTMP) -进入一个排字器 -输出到另一个RTMP流 中间有一些转换器、队列等,它工作得很好 但我的问题是,其中一个RTMP输入在启动时可能不可用,因此管道无法启动,导致以下错误: -错误:无法从流中读取任何数据 -错误:内部数据流错误 让这项工作正常进行的正确方法是什么,即使用第一个输入启动流,即使第二个输入尚未准备好 我尝试了几种方法:动态更改管道、使用pad探测器、倾听错误消息。。但到目前为止,我还不能让它工作 谢谢, PL由于

我现在正在使用以下配置的管道上工作几天: -2个实时输入流(RTMP) -进入一个排字器 -输出到另一个RTMP流

中间有一些转换器、队列等,它工作得很好

但我的问题是,其中一个RTMP输入在启动时可能不可用,因此管道无法启动,导致以下错误: -错误:无法从流中读取任何数据 -错误:内部数据流错误

让这项工作正常进行的正确方法是什么,即使用第一个输入启动流,即使第二个输入尚未准备好

我尝试了几种方法:动态更改管道、使用pad探测器、倾听错误消息。。但到目前为止,我还不能让它工作

谢谢,
PL

由于您没有发布任何代码,我想您对概念性答案没有意见

rtspsrc有几个选项,您可以用它们来控制何时失败-超过超时或超过最大试验次数。这些是(不确定是否全部):

实际概念(我不是专家,将其视为问题的另一种观点):

您可以创建两个容器-每个流一个。我将使用rtspsrc和decodebin并阻塞decodebin的输出焊盘,直到我拥有所有焊盘,然后我将连接到合成器

当您收到任何错误(应该是在等待所有PAD的阶段)时,您会将bin置于NULL状态(我的意思是称为NULL的GStreamer状态)并再次播放/暂停。。 嗯,你必须正确地使用pad探针(不知道那是什么:D)。。你能发布你的代码吗? 可能会尝试丢弃错误消息,以避免分解管道

另外,您是否只有视频输入?
我想没有,你可以用音频混音器来播放音频。。此外,合成器有很好的OpenGL版本,比它的
glvideomixer
快得多。。但它可能会引入另一个与OpenGL相关的问题。。如果您有intel GPU,那么您可能是安全的。

因为您没有发布任何代码,我想您可以接受概念性的答案

rtspsrc有几个选项,您可以用它们来控制何时失败-超过超时或超过最大试验次数。这些是(不确定是否全部):

实际概念(我不是专家,将其视为问题的另一种观点):

您可以创建两个容器-每个流一个。我将使用rtspsrc和decodebin并阻塞decodebin的输出焊盘,直到我拥有所有焊盘,然后我将连接到合成器

当您收到任何错误(应该是在等待所有PAD的阶段)时,您会将bin置于NULL状态(我的意思是称为NULL的GStreamer状态)并再次播放/暂停。。 嗯,你必须正确地使用pad探针(不知道那是什么:D)。。你能发布你的代码吗? 可能会尝试丢弃错误消息,以避免分解管道

另外,您是否只有视频输入? 我想没有,你可以用音频混音器来播放音频。。此外,合成器有很好的OpenGL版本,比它的
glvideomixer
快得多。。但它可能会引入另一个与OpenGL相关的问题。。如果你有英特尔GPU,那么你可能是安全的

retry - this may be not very useful if it deals only with ports ..
timeout - if you want to try with UDP some longer time you can enlarge this one
tcp-timeout - this is important, try to play with it - make it much larger
connection-speed - maybe it will help to make smaller this one
protocols - I have experience that for bad streams TCP was much better for me