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 代码中使用它,您有两个选择:
- 将
gst-parse-launch
(http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch) 与您刚刚使用的管道描述一起使用。它将像 gst-launch
那样构建整个管道。
- 或者您可以自己构建管道,使用 GstElement 工厂并将这些元素绑定在一起。这非常繁琐,只有在您从一开始就需要动态管道时才有用。
所以我的建议是使用类似的东西:
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
是为你我这样的人创造的。 :)
我正在努力处理一些我无法编写的 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 代码中使用它,您有两个选择:
- 将
gst-parse-launch
(http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch) 与您刚刚使用的管道描述一起使用。它将像gst-launch
那样构建整个管道。 - 或者您可以自己构建管道,使用 GstElement 工厂并将这些元素绑定在一起。这非常繁琐,只有在您从一开始就需要动态管道时才有用。
所以我的建议是使用类似的东西:
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
是为你我这样的人创造的。 :)