在 Gstreamer 中实现多流

Implement multi-stream in Gstreamer

我写了一个Gstreamer源码插件,它可以生成缓冲区并转换到下游元素并进行预览。最近我收到了一个实现多流的请求,一个流进行预览,另一个流进行录制(我想是使用 filesink)。之前调查过'tee'插件,发现它只支持相同formats/resolutions的多流。我应该使用什么插件 如果两个流有不同的 formats/resolutions,比如说,一个管道中有两个 capsfilters?如果有插件可以做到这一点,你能提供一些如何使用它们的例子吗?

我期望的管道是这样的:

gst-launch-1.0 mysrc ! (some plugins) name=t ! video/x-raw,format=NV12,width=320,height=240 ! xvimagesink t. ! video/x-raw,format=YUY2,width=640,height=480 ! filesink location=img_file

我想要么你在你的插件中实现这个,它会产生两个 src 垫,你只需正确连接文件接收器和视频接收器..

或者您将使用 tee 和 videoscale videoconvert videorate 元素来实现不同的分辨率。这种方法当然需要更多资源,第一种方法可能更好优化(只是猜测,我对你的插件一无所知)。

这是两个大小不同的视频接收器的示例。您必须意识到您有一个来自 mysrc 的输入。您必须复制它,然后必须调整其中一个分支的大小(或者可能两个,如果你需要的话)..没有其他办法。你想要的是tee和videoscale/videorate/videoconvert组合的元素..我不确定是否有这样的元素,我不确定它是否非常有用(但也许它有意义,我只是没有看到它)..

gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! tee name=t t. ! queue ! videoscale ! video/x-raw,width=320,height=240 ! videoconvert ! autovideosink t. ! queue ! videoscale ! video/x-raw,width=200,height=200 ! videoconvert ! autovideosink

也许我只是不明白你的问题。