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