gstreamer gst_child_proxy_set C 语法

gstreamer gst_child_proxy_set C syntax

我正在努力处理一些我无法编​​写的 C 中的 gstreamer 代码。我要求您提供两个视频测试文件的 C 语法代码的简单示例,它们将使用 gst_child_proxy_set -> xpos,ypos 在一个 window 中显示。由于缺乏示例,我无法弄清楚,我对 Gstreamer 很陌生,但确实需要这样做。我知道对于你们中的一些人来说,写下这些只是片刻,我现在正在尝试几天...... 此致!

gst-launch-1.0 -e \
videomixer name=mix \
        sink_0::xpos=0   sink_0::ypos=0  sink_0::alpha=0\
        sink_1::xpos=0   sink_1::ypos=0 \
        sink_2::xpos=640 sink_2::ypos=0 \
        sink_3::xpos=0   sink_3::ypos=360 \
        sink_4::xpos=640 sink_4::ypos=360 \
    ! autovideosink \
videotestsrc pattern="black" \
    ! video/x-raw,format=AYUV,width=1280,height=720 \
    ! mix.sink_0 \
uridecodebin uri=rtsp://10.0.0.121:554/video.h264 \
    ! videoconvert ! videoscale \
    ! video/x-raw,format=AYUV,width=640,height=360 \
    ! mix.sink_1 \
uridecodebin uri=rtsp://10.0.0.122:554/video.h264 \
    ! videoconvert ! videoscale \
    ! video/x-raw,format=AYUV,width=640,height=360 \
    ! mix.sink_2 \
uridecodebin uri=rtsp://10.0.0.123:554/video.h264 \
    ! videoconvert ! videoscale \
    ! video/x-raw,format=AYUV,width=640,height=360 \
    ! mix.sink_3 \
uridecodebin uri=rtsp://10.0.0.124:554/video.h264 \
    ! videoconvert ! videoscale \
    ! video/x-raw,format=AYUV,width=640,height=360 \
    ! mix.sink_4 \

好的,您已经成功地使用 gst-launch 创建了一个工作流水线。正如您现在可能看到的那样,您的 Gstreamer 管道描述了您的数据从其源(您的 RTSP 流)到接收器(一个自动视频接收器,然后是一个整洁的混合器,使您的流并排)所经历的处理过程。

从现在开始,要在一些有用的 C 代码中使用它,您有两个选择:

所以我的建议是使用类似的东西:

const char *pipeline_desc = "videomixer name=mix "
    "sink_0::xpos=0   sink_0::ypos=0  sink_0::alpha=0 "
    "sink_1::xpos=0   sink_1::ypos=0 "
    "sink_2::xpos=640 sink_2::ypos=0 "
    /* bla bla... */
    "! video/x-raw,format=AYUV,width=640,height=360 "
    "! mix.sink_4";


GstElement *pipeline = gst-parse-launch(pipeline_desc, NULL);

这加上一些事件处理,你应该得到你想要的。

您可以在这个非常好的教程中找到这方面的一些示例以及更多内容:http://docs.gstreamer.com/pages/viewpage.action?pageId=327735

这个文档让我摆脱了几次麻烦。 :) 祝你好运!


EDIT :刚刚看到您创作了 GStreamer multiple videos in one window - C syntax 并且您在那里尝试的是自己构建管道。虽然它应该工作,但它代表了疯狂的工作量,非常容易出错,我必须承认我自己从来没有从中得到太多。 :p

gst-parse-launch 是为你我这样的人创造的。 :)