在管道中添加clockoverlay&;正确使用capsfilter

在管道中添加clockoverlay&;正确使用capsfilter,c,gstreamer,C,Gstreamer,我正在基于上面显示的gstreamer-0.10命令,使用gstreamer-0.10编写程序 有几件事我完全不知道 1) 如何使用clockoverlay并将其添加到管道中?我知道它的过滤帽,但找不到它的例子 2) 在何处为videorate正确添加上限。我的意思是,我在ffmpegcolourspace元素之后添加了一个元素,效果很好。出于好奇,我在ffenc_mpeg4元素之后添加了它,它同样可以正常工作。在这两种情况下我都能看到现场视频。有没有可能我根本没有把它加入管道。谁能给我提个建议

我正在基于上面显示的gstreamer-0.10命令,使用gstreamer-0.10编写程序

有几件事我完全不知道

1) 如何使用clockoverlay并将其添加到管道中?我知道它的过滤帽,但找不到它的例子

2) 在何处为videorate正确添加上限。我的意思是,我在ffmpegcolourspace元素之后添加了一个元素,效果很好。出于好奇,我在ffenc_mpeg4元素之后添加了它,它同样可以正常工作。在这两种情况下我都能看到现场视频。有没有可能我根本没有把它加入管道。谁能给我提个建议吗。下面是我的代码片段

gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,format=\(fourcc\)YUY2,width=320,height=240,frame=25/1 ! ffmpegcolorspace ! videorate ! video/x-raw-yuv,framerate=10/1 ! clockoverlay ! ffenc_mpeg4 ! udpsink host=127.0.0.1 port=5000

1,要添加时钟覆盖,只需将其放在v4l2src之后的某个位置(可能在您已经拥有它的位置是正确的)。。clockoverlay只是v4l2src或videorate的另一个元素

这也可以使用(我没有安装0.10,但应该可以使用):

2、对代码来说——它相当混乱,你把大写字母和元素混在一起了。您必须理解capsfilter是一个元素,它在前面的元素的输出上施加某种格式。。实际CAP设置为capsfilter as属性(在v4l2src上,您正在设置设备等属性。在capsfilter上,您正在使用表示这些功能的字符串设置名为
caps
的属性)

你不能用那种方式把videorate放在大写字母里。。。videorate是元素,caps是属性

您必须创建videorate并在其之后添加capsfilter。。因此,videorate将视频流转换为它在src板上看到的期望速率(videorate的输出)

因此,代码如下所示。 抱歉,我无法重新整理一下,也将capsfilterColor重命名为capsfilterRate,因为这更合适。 另外,我还没有测试过——只是写在我的头上,我希望它能编译:D

gst-launch-1.0 videotestsrc ! clockoverlay ! autovideosink
来源=gst元素工厂制造(“v4l2src”,“来源”); GstElement*capsfilter=gst\u元件\u工厂制造商(“capsfilter”、“摄像头\u caps”); conv=gst元素工厂制造(“ffmpegcolorspace”、“COLORCONVERTOR”); videorate=商品及服务税要素工厂制造(“videorate”、“videorate要素”); GstElement*capsfilterRate=gst元素工厂制造(“capsfilter”、“视频速率”); videoenc=gst元素工厂制造(“ffenc”mpeg4、“videoenc”); udpsink=商品及服务税、要素、工厂制造(“udpsink”、“udpsink”); //盖过滤器#1 GstCaps*caps=gst_caps_from_string(“视频/x-raw-yuv,格式=(fourcc)YUY2,宽度=320,高度=240,帧速率=25/1”); g_对象_集(capsfilter,“caps”,caps,NULL); gst_caps_unref(caps)//别忘了取消记忆! //电容滤波器#2 GstCaps*capsRate=gst_caps_from_string(“视频/x-raw-yuv,帧速率=10/1”); g_对象_集(capsfilterRate,“caps”,capsRate,NULL); gst_caps_unref(capsRate)//又来了! //创建空管道 管道=gst_管道_新(“测试管道”); g_对象集(g_对象(udpsink), “主机”、“127.0.0.1”, “港口”,5000, 无效); g_对象集(g_对象(源), “设备”、“/dev/video0”, 无效); //适当添加到管道中 gst_-bin_-add_-many(gst_-bin(管道)、源、capsfilter、conv、videorate、capsfilterRate、videoenc、udpsink、NULL); //正确链接: gst元素链接(源、capsfilter、conv、videorate、capsfilterRate、videoenc、udpsink、NULL);
谢谢你,伙计。我是gstreamer的新手,从未了解caps属性。但是你的详细解释帮助我理解了它。再次非常感谢
gst-launch-1.0 videotestsrc ! clockoverlay ! autovideosink
source = gst_element_factory_make ("v4l2src", "source"); GstElement *capsfilter = gst_element_factory_make("capsfilter", "camera_caps"); conv = gst_element_factory_make("ffmpegcolorspace", "Colorconverter"); videorate = gst_element_factory_make("videorate", "videorate-element"); GstElement *capsfilterRate = gst_element_factory_make("capsfilter", "video-rate"); videoenc = gst_element_factory_make("ffenc_mpeg4", "videoenc"); udpsink = gst_element_factory_make("udpsink", "udpsink"); // cap filter #1 GstCaps *caps = gst_caps_from_string ("video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=25/1"); g_object_set (capsfilter, "caps", caps, NULL); gst_caps_unref(caps);//do not forget to unref - memoryleak! // capfilter #2 GstCaps *capsRate = gst_caps_from_string ("video/x-raw-yuv,framerate=10/1"); g_object_set ( capsfilterRate, "caps", capsRate, NULL); gst_caps_unref(capsRate);//again unref! // Create the empty pipeline pipeline = gst_pipeline_new ("test-pipeline"); g_object_set(G_OBJECT(udpsink), "host", "127.0.0.1", "port", 5000, NULL); g_object_set (G_OBJECT ( source ), "device", "/dev/video0", NULL); //proper adding to pipe gst_bin_add_many (GST_BIN (pipeline), source, capsfilter, conv, videorate, capsfilterRate, videoenc, udpsink, NULL); //proper linking: gst_element_link_many (source, capsfilter, conv, videorate, capsfilterRate, videoenc, udpsink, NULL);