将多个动态流合并为一个

时间:2020-05-14 14:57:35

标签: c gstreamer

我有以下管道:

 appsrc->h264parse->av264_dec->videoconvert->x264enc->appsink

我正在将h264流馈送到appsrc中(连同时间戳),并从appsink中获取h264流(也带有时间戳)。这对我有用。

但是,我想要一个带有两个输入(appsrc ...)和一个输出(appsink)的管道。这样的想法是,所有输入都会不断地被馈送数据并进行解码,但是只有其中一个被选择作为输出(其他的则被丢弃)。

为简单起见,我们可以假设一个流是后台流(例如由videotestsrc生成),并且始终可用。其他流可能会在不同的时间出现/消失,为简单起见,我们可以假设一个流仅出现一次(另一个出现是新流)。

现在的问题是如何组织这些流之间的切换?我应该取消链接GstElement并以其他方式链接它们吗?还是应该使用input-selector?那么input-selector对无效键盘的流有何作用?它会丢弃它们还是将其置于待机状态并在再次激活时消耗掉?

我似乎在理解时间戳上也有问题。送入每个appsrc的流具有单独的时间戳集。为简单起见,我们可以假设每个时间戳都从0开始。但是,由于这些流在墙上时间的不同点开始,因此一个流的0表示与另一个流的0表示相同的时间。因此,问题在于如何同步它们?将数据注入到每个appsrc中(计算偏移量)时,应该以某种方式手动完成此操作吗?或者GStreamer是否提供任何机制来解决此问题(可能在稍后的管道中解决)?

1 个答案:

答案 0 :(得分:1)

诸如compositor元素之类的声音可能对您有所帮助。您可以在此处排列/组成不同的流。我猜您可以将一个流放在另一个之上,然后使用输入板的zorder属性来切换它们的外观。