Hi
I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? BR /Ingemar ============ gst-launch-1.0 -v -e uvch264src name=src auto-start=true initial-bitrate=2000000 src.vidsrc ! video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! udpsink host=88.129.244.8 port=5000 ============ videosrc = gst_element_factory_make ("uvch264src", "encoder"); capsfilter = gst_element_factory_make ("capsfilter", "capsfilter"); videopayload = gst_element_factory_make ("rtph264pay", "payload"); capsfiltercaps = gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, NULL); g_object_set(G_OBJECT(videosrc), "name", "src", NULL); g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
I would use v4l2src rather than uvch264src. I use it with rtp and c920/brio and it works very well.
-----Original Message----- From: gstreamer-devel <[hidden email]> On Behalf Of Ingemar Johansson Sent: 01 March 2019 11:55 To: [hidden email] Subject: Logitech C920 vidsrc syntax Hi I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? BR /Ingemar ============ gst-launch-1.0 -v -e uvch264src name=src auto-start=true initial-bitrate=2000000 src.vidsrc ! video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! udpsink host=88.129.244.8 port=5000 ============ videosrc = gst_element_factory_make ("uvch264src", "encoder"); capsfilter = gst_element_factory_make ("capsfilter", "capsfilter"); videopayload = gst_element_factory_make ("rtph264pay", "payload"); capsfiltercaps = gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, NULL); g_object_set(G_OBJECT(videosrc), "name", "src", NULL); g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Le vendredi 01 mars 2019 à 13:12 +0000, Andrew Silby a écrit :
> I would use v4l2src rather than uvch264src. I use it with rtp and c920/brio and it works very well. uvch264src is a wrapper on top of v4l2src that makes UVC specific calls to control the C920 encoder (e.g. bitrate). With v4l2src you won't be able to control the bitrate of the encoder. The Brio does not have an H264 encoder. > > -----Original Message----- > From: gstreamer-devel <[hidden email]> On Behalf Of Ingemar Johansson > Sent: 01 March 2019 11:55 > To: [hidden email] > Subject: Logitech C920 vidsrc syntax > > Hi > I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? > > BR > /Ingemar > ============ > gst-launch-1.0 -v -e uvch264src name=src auto-start=true > initial-bitrate=2000000 src.vidsrc ! > video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! udpsink > host=88.129.244.8 port=5000 > > ============ > videosrc = gst_element_factory_make ("uvch264src", "encoder"); > capsfilter = gst_element_factory_make ("capsfilter", > "capsfilter"); > videopayload = gst_element_factory_make ("rtph264pay", "payload"); > > capsfiltercaps = > gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); > g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, NULL); > > g_object_set(G_OBJECT(videosrc), "name", "src", NULL); > g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); > g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); > g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? When manually creating a pipeline, you need to add your GstElement to your GstPipepeline (gst_pipeine_new() -> gst_bin_add (GST_BIN (pipeline), element); You can use conveniances, like gst_bin_add_many() but be careful not to forget your sentinel (NULL as last parameter) or it will crash. When this is done, you then need to link your elements. See gst_element_link/gst_element_link_pads(). To help debug your work, make sure to check all return values, including insuring the gst_element_factory_make() calls worked, It's really easy to make a typo in a string like element name or pad name. > > > > -- > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
I did try using uvch264src to control bitrate but from memory I don't think it worked on the c920/h264. That's why I ended up using v4l2src.
-----Original Message----- From: gstreamer-devel <[hidden email]> On Behalf Of Nicolas Dufresne Sent: 01 March 2019 13:36 To: Discussion of the development of and with GStreamer <[hidden email]> Subject: Re: Logitech C920 vidsrc syntax Le vendredi 01 mars 2019 à 13:12 +0000, Andrew Silby a écrit : > I would use v4l2src rather than uvch264src. I use it with rtp and c920/brio and it works very well. uvch264src is a wrapper on top of v4l2src that makes UVC specific calls to control the C920 encoder (e.g. bitrate). With v4l2src you won't be able to control the bitrate of the encoder. The Brio does not have an H264 encoder. > > -----Original Message----- > From: gstreamer-devel <[hidden email]> > On Behalf Of Ingemar Johansson > Sent: 01 March 2019 11:55 > To: [hidden email] > Subject: Logitech C920 vidsrc syntax > > Hi > I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? > > BR > /Ingemar > ============ > gst-launch-1.0 -v -e uvch264src name=src auto-start=true > initial-bitrate=2000000 src.vidsrc ! > video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! > udpsink > host=88.129.244.8 port=5000 > > ============ > videosrc = gst_element_factory_make ("uvch264src", "encoder"); > capsfilter = gst_element_factory_make ("capsfilter", > "capsfilter"); > videopayload = gst_element_factory_make ("rtph264pay", "payload"); > > capsfiltercaps = > gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); > g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, NULL); > > g_object_set(G_OBJECT(videosrc), "name", "src", NULL); > g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); > g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); > g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? When manually creating a pipeline, you need to add your GstElement to your GstPipepeline (gst_pipeine_new() -> gst_bin_add (GST_BIN (pipeline), element); You can use conveniances, like gst_bin_add_many() but be careful not to forget your sentinel (NULL as last parameter) or it will crash. When this is done, you then need to link your elements. See gst_element_link/gst_element_link_pads(). To help debug your work, make sure to check all return values, including insuring the gst_element_factory_make() calls worked, It's really easy to make a typo in a string like element name or pad name. > > > > -- > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Le vendredi 01 mars 2019 à 13:39 +0000, Andrew Silby a écrit :
> I did try using uvch264src to control bitrate but from memory I don't > think it worked on the c920/h264. That's why I ended up using > v4l2src. It has been implemented specifically for that camera, but is known to work with the C930 too. You should have requested some help in the mailing list. > > -----Original Message----- > From: gstreamer-devel <[hidden email]> On Behalf Of Nicolas Dufresne > Sent: 01 March 2019 13:36 > To: Discussion of the development of and with GStreamer <[hidden email]> > Subject: Re: Logitech C920 vidsrc syntax > > Le vendredi 01 mars 2019 à 13:12 +0000, Andrew Silby a écrit : > > I would use v4l2src rather than uvch264src. I use it with rtp and c920/brio and it works very well. > > uvch264src is a wrapper on top of v4l2src that makes UVC specific calls to control the C920 encoder (e.g. bitrate). With v4l2src you won't be able to control the bitrate of the encoder. The Brio does not have an > H264 encoder. > > > -----Original Message----- > > From: gstreamer-devel <[hidden email]> > > On Behalf Of Ingemar Johansson > > Sent: 01 March 2019 11:55 > > To: [hidden email] > > Subject: Logitech C920 vidsrc syntax > > > > Hi > > I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? > > > > BR > > /Ingemar > > ============ > > gst-launch-1.0 -v -e uvch264src name=src auto-start=true > > initial-bitrate=2000000 src.vidsrc ! > > video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! > > udpsink > > host=88.129.244.8 port=5000 > > > > ============ > > videosrc = gst_element_factory_make ("uvch264src", "encoder"); > > capsfilter = gst_element_factory_make ("capsfilter", > > "capsfilter"); > > videopayload = gst_element_factory_make ("rtph264pay", "payload"); > > > > capsfiltercaps = > > gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); > > g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, NULL); > > > > g_object_set(G_OBJECT(videosrc), "name", "src", NULL); > > g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); > > g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); > > g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? > > When manually creating a pipeline, you need to add your GstElement to your GstPipepeline (gst_pipeine_new() -> gst_bin_add (GST_BIN (pipeline), element); You can use conveniances, like gst_bin_add_many() but be careful not to forget your sentinel (NULL as last parameter) or it will crash. > > When this is done, you then need to link your elements. See gst_element_link/gst_element_link_pads(). To help debug your work, make sure to check all return values, including insuring the > gst_element_factory_make() calls worked, It's really easy to make a typo in a string like element name or pad name. > > > > > > > -- > > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > > _______________________________________________ > > gstreamer-devel mailing list > > [hidden email] > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > > > _______________________________________________ > > gstreamer-devel mailing list > > [hidden email] > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hi Nicholas, I've just looked back at what I did. Using c920. Here is the log:
gst-launch-1.0 uvch264src do-timestamp=true initial-bitrate=2000000 average-bitrate=2000000 peak-bitrate=2000000 iframe-period=3000 device=/dev/video0 name=src auto-start=true src.vidsrc ! video/x-h264,width=1280,height=720,framerate=20/1,profile=main ! fakesink 0:00:00.133891567 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1889:xu_query:<uvch264src0> Can't query XU with fd = -1 0:00:00.133978494 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:930:set_bitrate:<uvch264src0> BITRATE_LAYERS GET_CUR error 0:00:00.134001775 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1889:xu_query:<uvch264src0> Can't query XU with fd = -1 0:00:00.134024952 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1052:update_bitrate:<uvch264src0> BITRATE_LAYERS GET_CUR error 0:00:00.134064743 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1889:xu_query:<uvch264src0> Can't query XU with fd = -1 0:00:00.134088337 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:930:set_bitrate:<uvch264src0> BITRATE_LAYERS GET_CUR error 0:00:00.134110524 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1889:xu_query:<uvch264src0> Can't query XU with fd = -1 0:00:00.134132399 1596 0x1b3fbc0 WARN uvch264src gstuvch264_src.c:1052:update_bitrate:<uvch264src0> BITRATE_LAYERS GET_CUR error That's why I used v4l2src instead. I assume - probably wrongly - that uvch264src wasn't be kept up to date. Thanks for all the work everyone does on the project - it's fantastic. -----Original Message----- From: gstreamer-devel <[hidden email]> On Behalf Of Nicolas Dufresne Sent: 01 March 2019 13:45 To: Discussion of the development of and with GStreamer <[hidden email]> Subject: Re: Logitech C920 vidsrc syntax Le vendredi 01 mars 2019 à 13:39 +0000, Andrew Silby a écrit : > I did try using uvch264src to control bitrate but from memory I don't > think it worked on the c920/h264. That's why I ended up using v4l2src. It has been implemented specifically for that camera, but is known to work with the C930 too. You should have requested some help in the mailing list. > > -----Original Message----- > From: gstreamer-devel <[hidden email]> > On Behalf Of Nicolas Dufresne > Sent: 01 March 2019 13:36 > To: Discussion of the development of and with GStreamer > <[hidden email]> > Subject: Re: Logitech C920 vidsrc syntax > > Le vendredi 01 mars 2019 à 13:12 +0000, Andrew Silby a écrit : > > I would use v4l2src rather than uvch264src. I use it with rtp and c920/brio and it works very well. > > uvch264src is a wrapper on top of v4l2src that makes UVC specific > calls to control the C920 encoder (e.g. bitrate). With v4l2src you > won't be able to control the bitrate of the encoder. The Brio does not > have an > H264 encoder. > > > -----Original Message----- > > From: gstreamer-devel > > <[hidden email]> > > On Behalf Of Ingemar Johansson > > Sent: 01 March 2019 11:55 > > To: [hidden email] > > Subject: Logitech C920 vidsrc syntax > > > > Hi > > I am trying to realize the pipeline below with the c-code snippet further below. The problem I have is with the src.vidsrc property or parameter. My effort is obviously wrong, so how do one fix this ? > > > > BR > > /Ingemar > > ============ > > gst-launch-1.0 -v -e uvch264src name=src auto-start=true > > initial-bitrate=2000000 src.vidsrc ! > > video/x-h264,width=640,height=480,framerate=30/1 ! rtph264pay ! > > udpsink > > host=88.129.244.8 port=5000 > > > > ============ > > videosrc = gst_element_factory_make ("uvch264src", "encoder"); > > capsfilter = gst_element_factory_make ("capsfilter", > > "capsfilter"); > > videopayload = gst_element_factory_make ("rtph264pay", "payload"); > > > > capsfiltercaps = > > gst_caps_from_string("video/x-h264,width=640,height=480,framerate=30/1"); > > g_object_set (G_OBJECT(capsfilter), "caps", capsfiltercaps, > > NULL); > > > > g_object_set(G_OBJECT(videosrc), "name", "src", NULL); > > g_object_set(G_OBJECT(videosrc), "auto-start", true, NULL); > > g_object_set(G_OBJECT(videosrc), "initial-bitrate", 2000000, NULL); > > g_object_set(G_OBJECT(videosrc), "*src.vidsrc*", NULL, NULL); // ????? > > When manually creating a pipeline, you need to add your GstElement to your GstPipepeline (gst_pipeine_new() -> gst_bin_add (GST_BIN (pipeline), element); You can use conveniances, like gst_bin_add_many() but be careful not to forget your sentinel (NULL as last parameter) or it will crash. > > When this is done, you then need to link your elements. See > gst_element_link/gst_element_link_pads(). To help debug your work, > make sure to check all return values, including insuring the > gst_element_factory_make() calls worked, It's really easy to make a typo in a string like element name or pad name. > > > > > > > -- > > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > > _______________________________________________ > > gstreamer-devel mailing list > > [hidden email] > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > > > _______________________________________________ > > gstreamer-devel mailing list > > [hidden email] > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
In reply to this post by Nicolas Dufresne-5
Hi
Thanks for all the help. I will try again and debug each step in the add_many and link_many. The main problem is that I need to somehow set "src.vidsrc" that is defined in the pipeline so that it is defined also in the code by means of g_object_set set or something else. Does anybody know how to set this property, it seems to me that it does not follow the normal property=value syntax ? As regards to setting the bitrate in run time in the C920, I hope that it will work. At least it seems like "average-bitrate" and "peak-bitrate" are both dynamic control. Logitech Brio: I see contradicting views. How much latency can be expected with the Brio ? Regards /Ingemar -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hi
As a followup... The rate control definitely works in dynamic (run time) mode on the C920 and it works quite well!. I hacked the gscreamtx element so that it sets the average-bitrate and peak-bitrate properties and then it works. One may add an adaptive setting to the min-iframe-qp to avoid that the bitrate spikes when I-frame are generated, something that can cause the video playout to freeze for a short while whe bandwidth is limited. Ideally one would like periodic intra refresh capability which is available in e.g x264enc but still I would say that the C920 can be very useful for live streaming with low latency over e.g LTE. The camera to eye latency is 160ms (over local WiFi) but then I have not done much work on the pipeline on the receiveing end and software decoding is used. PS1 : I realized that it was possible to run the whole thing on the command line, thus I don't need to mess with an application, the pipeline is shown below. PS2 : I am a beginner here and Gstreamer definitely has a learning slope but I must say that I like this platform more for every day. You have done a great job! gst-launch-1.0 rtpbin name=rtpbin ! uvch264src device=/dev/video1 name=c920 auto-start=true iframe-period=1000 min-iframe-qp=20 c920.vidsrc ! queue ! video/x-h264,width=1920,height=1080,framerate=30/1,profile=high ! rtph264pay ! gscreamtx ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! udpsink host=192.168.1.247 port=5000 rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.247 port=5001 udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
That's good to hear.....I'll have to re-visit the uvchh264 plugin. I'm sorry for the duff info.
-----Original Message----- From: gstreamer-devel <[hidden email]> On Behalf Of Ingemar Johansson Sent: 02 March 2019 12:29 To: [hidden email] Subject: Re: Logitech C920 vidsrc syntax Hi As a followup... The rate control definitely works in dynamic (run time) mode on the C920 and it works quite well!. I hacked the gscreamtx element so that it sets the average-bitrate and peak-bitrate properties and then it works. One may add an adaptive setting to the min-iframe-qp to avoid that the bitrate spikes when I-frame are generated, something that can cause the video playout to freeze for a short while whe bandwidth is limited. Ideally one would like periodic intra refresh capability which is available in e.g x264enc but still I would say that the C920 can be very useful for live streaming with low latency over e.g LTE. The camera to eye latency is 160ms (over local WiFi) but then I have not done much work on the pipeline on the receiveing end and software decoding is used. PS1 : I realized that it was possible to run the whole thing on the command line, thus I don't need to mess with an application, the pipeline is shown below. PS2 : I am a beginner here and Gstreamer definitely has a learning slope but I must say that I like this platform more for every day. You have done a great job! gst-launch-1.0 rtpbin name=rtpbin ! uvch264src device=/dev/video1 name=c920 auto-start=true iframe-period=1000 min-iframe-qp=20 c920.vidsrc ! queue ! video/x-h264,width=1920,height=1080,framerate=30/1,profile=high ! rtph264pay ! gscreamtx ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! udpsink host=192.168.1.247 port=5000 rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.247 port=5001 udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |