Avimux refuses caps when sending JPEGs over UDP

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Avimux refuses caps when sending JPEGs over UDP

Mikkel Antonsen
I'm trying to stream from my webcam over UDP with the following two commands:

gst-launch-1.0 -e -v v4l2src device=/dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_3AB1BE0F-video-index0 ! \
image/jpeg, width=1920, height=1080, framerate=30/1  ! \
rtpjpegpay ! \
udpsink host=127.0.0.1 port=1234

and

gst-launch-1.0 -e -v udpsrc port=1234 caps="application/x-rtp,payload=96,media=video,clock-rate=90000, encoding-name=JPEG, a-framerate=30/1, height=1920, width=1080" ! \
rtpjpegdepay ! \
jpegdec ! \
avimux ! \
filesink location=movie.avi

which yields error messages such as this:

0:00:00.117861054  6837      0x26e7540 DEBUG                 avimux gstavimux.c:415:gst_avi_mux_vidsink_set_caps:<avimux0> avimux0:video_0, caps=video/x-raw, format=(string)I420, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, framerate=(fraction)0/1
0:00:00.117925143  6837      0x26e7540 WARN                  avimux gstavimux.c:641:gst_avi_mux_vidsink_set_caps:<avimux0> refused caps video/x-raw, format=(string)I420, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, framerate=(fraction)0/1
ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2943): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
streaming task paused, reason not-negotiated (-4)

I'm not sure what exactly is wrong with the caps. From what I understand gst-inspect avimux says that 0/1 is a valid framerate. 

Replacing avimux with autovideosink works splendidly and allows me to stream perfectly. Skipping the UDP step allows avimux to capture the movie as expected. I need to save the video from a remote, how ever, so any help towards achieving this will be sincerely appreciated. 

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

Sebastian Dröge-3
On Mi, 2016-06-01 at 13:26 +0200, Mikkel Antonsen wrote:


> which yields error messages such as this:
>
> 0:00:00.117861054  6837      0x26e7540 DEBUG                 avimux
> gstavimux.c:415:gst_avi_mux_vidsink_set_caps:<avimux0>
> avimux0:video_0, caps=video/x-raw, format=(string)I420,
> width=(int)1920, height=(int)1080, interlace-
> mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, chroma-
> site=(string)mpeg2, framerate=(fraction)0/1
> 0:00:00.117925143  6837      0x26e7540 WARN                  avimux
> gstavimux.c:641:gst_avi_mux_vidsink_set_caps:<avimux0> refused caps
> video/x-raw, format=(string)I420, width=(int)1920, height=(int)1080,
> interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1,
> chroma-site=(string)mpeg2, framerate=(fraction)0/1
> ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
> Internal data flow error.
> Additional debug info:
> gstbasesrc.c(2943): gst_base_src_loop ():
> /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
> streaming task paused, reason not-negotiated (-4)
>
> I'm not sure what exactly is wrong with the caps. From what I
> understand gst-inspect avimux says that 0/1 is a valid framerate. 
avimux complains that it doesn't accept those caps in general, it's not
specific about the framerate. But when following the code in
gstavimux.c, your guess is correct. It doesn't support 0/1 as
framerate.

You will have to provide it with a valid framerate, e.g. by using a
videorate followed by a capsfilter with a specific framerate in front
of avimux.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

charlesu
I have run into a similar problem. Below is the pipeline that I use plus the error messages.

gst-launch-1.0 -vvv udpsrc port=8888 ! application/x-rtp,clock-rate=90000 ! rtpmp4vdepay
! mpeg4videoparse ! video/mpeg ! avimux ! filesink location=/tmp/test.avi
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = "application/x-rtp\,\ clock-rate\=\(int\)90000\,\ media\=\(string\)video\,\ encoding-name\=\(string\)MP4V-ES"
/GstPipeline:pipeline0/GstRtpMP4VDepay:rtpmp4vdepay0.GstPad:src: caps = "video/mpeg\,\ mpegversion\=\(int\)4\,\ systemstream\=\(boolean\)false"
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:sink: caps = "video/mpeg\,\ mpegversion\=\(int\)4\,\ systemstream\=\(boolean\)false"
/GstPipeline:pipeline0/GstRtpMP4VDepay:rtpmp4vdepay0.GstPad:sink: caps = "application/x-rtp\,\ clock-rate\=\(int\)90000\,\ media\=\(string\)video\,\ encoding-name\=\(string\)MP4V-ES"
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps = "video/mpeg\,\ mpegversion\=\(int\)4\,\ systemstream\=\(boolean\)false\,\ parsed\=\(boolean\)true"
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps = "video/mpeg\,\ mpegversion\=\(int\)4\,\ systemstream\=\(boolean\)false\,\ parsed\=\(boolean\)true\,\ profile\=\(string\)simple\,\ level\=\(string\)4a\,\ codec_data\=\(buffer\)000001b004000001b59113000001000000012000c8888007d28045a14103\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1"
ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error.
Additional debug info:
/home/poky/build/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.4.5-r0/gstreamer-1.4.5/libs/gst/base/gstbasesrc.c(2933): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.463042667

It fails the negotiation somehow but I am not exactly sure what is missing. It works fine if I replace avimux with other mux like matroskamux or mp4mux or if the stream is directly from the source not going through UDP.
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

Nicolas Dufresne-5
Le lundi 16 janvier 2017 à 11:00 -0800, charlesu a écrit :
> I have run into a similar problem. Below is the pipeline that I use
> plus the
> error messages.
>
> gst-launch-1.0 -vvv udpsrc port=8888 ! application/x-rtp,clock-
> rate=90000 !
> rtpmp4vdepay 
> ! mpeg4videoparse ! video/mpeg ! avimux ! filesink
> location=/tmp/test.avi


Please, file this issue on bugs.gnome.org. This is clearly a bug.
Here's a simpler pipeline that should work, but instead fails.

gst-launch-1.0 -v videotestsrc ! mpeg4videoparse ! avenc_mpeg4 ! avimux
! fakesink

> Setting pipeline to PAUSED ...
> Pipeline is live and does not need PREROLL ...
> Setting pipeline to PLAYING ...
> New clock: GstSystemClock
> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps =
> "application/x-rtp\,\ clock-rate\=\(int\)90000\,\
> media\=\(string\)video\,\
> encoding-name\=\(string\)MP4V-ES"
> /GstPipeline:pipeline0/GstRtpMP4VDepay:rtpmp4vdepay0.GstPad:src: caps
> =
> "video/mpeg\,\ mpegversion\=\(int\)4\,\
> systemstream\=\(boolean\)false"
> /GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:sink: caps
> =
> "video/mpeg\,\ mpegversion\=\(int\)4\,\
> systemstream\=\(boolean\)false"
> /GstPipeline:pipeline0/GstRtpMP4VDepay:rtpmp4vdepay0.GstPad:sink:
> caps =
> "application/x-rtp\,\ clock-rate\=\(int\)90000\,\
> media\=\(string\)video\,\
> encoding-name\=\(string\)MP4V-ES"
> /GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps =
> "video/mpeg\,\ mpegversion\=\(int\)4\,\
> systemstream\=\(boolean\)false\,\
> parsed\=\(boolean\)true"
> /GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps =
> "video/mpeg\,\ mpegversion\=\(int\)4\,\
> systemstream\=\(boolean\)false\,\
> parsed\=\(boolean\)true\,\ profile\=\(string\)simple\,\
> level\=\(string\)4a\,\
> codec_data\=\(buffer\)000001b004000001b59113000001000000012000c888800
> 7d28045a14103\,\
> width\=\(int\)1280\,\ height\=\(int\)720\,\
> pixel-aspect-ratio\=\(fraction\)1/1"
> ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
> Internal data
> flow error.
> Additional debug info:
> /home/poky/build/tmp/work/cortexa9hf-vfp-neon-poky-linux-
> gnueabi/gstreamer1.0/1.4.5-r0/gstreamer-
> 1.4.5/libs/gst/base/gstbasesrc.c(2933):
> gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
> streaming task paused, reason not-negotiated (-4)
> Execution ended after 0:00:00.463042667
>
> It fails the negotiation somehow but I am not exactly sure what is
> missing.
> It works fine if I replace avimux with other mux like matroskamux or
> mp4mux
> or if the stream is directly from the source not going through UDP.
>
>
>
>
> --
> View this message in context: http://gstreamer-devel.966125.n4.nabble
> .com/Avimux-refuses-caps-when-sending-JPEGs-over-UDP-
> tp4677838p4681478.html
> Sent from the GStreamer-devel mailing list archive at 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

signature.asc (188 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

charlesu
Is there any chance that this may have been fixed in one of the newer versions? I am using 1.4.5 since this is what I get with the yocto release that I am using. Any chance that there is a patch or something that I can use?
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

Nicolas Dufresne-5


Le 17 janv. 2017 6:08 PM, "charlesu" <[hidden email]> a écrit :
Is there any chance that this may have been fixed in one of the newer
versions? I am using 1.4.5 since this is what I get with the yocto release
that I am using. Any chance that there is a patch or something that I can
use?

I tested it on git master, so no. Please file a bug, it's most likely not a complicated one.

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

charlesu
Bug submitted. Bug# 777411.
Reply | Threaded
Open this post in threaded view
|

Re: Avimux refuses caps when sending JPEGs over UDP

charlesu
I have dug a little deeper on this and it seems to be stuck at the following:

0:00:00.351575666 GST_CAPS gstpad.c:3014:gst_pad_query_caps_default:<avimux0:video_0> result 0xb5404600 video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, codec_data=(buffer)000001b004000001b59113000001000000012000c8888007d28045a14103, parsed=(boolean)true, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)[ 0/1, 2147483647/1 ]
0:00:00.355332000 GST_PADS gstpad.c:3095:gst_pad_query_default:<avimux0:video_0> not forwarding 0xb5402120 (caps) query
0:00:00.355417333 GST_PADS gstpad.c:3589:gst_pad_query:<avimux0:video_0> sent query 0xb5402120 (caps), result 1
0:00:00.355486000 GST_CAPS gstutils.c:2776:gst_pad_query_caps:<avimux0:video_0> query returned video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, codec_data=(buffer)000001b004000001b59113000001000000012000c8888007d28045a14103, parsed=(boolean)true, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)[ 0/1, 2147483647/1 ]
0:00:00.355737333 GST_PADS gstpad.c:2941:gst_pad_query_accept_caps_default:<avimux0:video_0> allowed caps subset video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, codec_data=(buffer)000001b004000001b59113000001000000012000c8888007d28045a14103, parsed=(boolean)true, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)[ 0/1, 2147483647/1 ], caps video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, codec_data=(buffer)000001b004000001b59113000001000000012000c8888007d28045a14103, parsed=(boolean)true, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1
0:00:00.355991333 GST_PADS gstpad.c:3095:gst_pad_query_default:<avimux0:video_0> not forwarding 0xb54020f0 (accept-caps) query
0:00:00.356057333 GST_PADS gstpad.c:3589:gst_pad_query:<avimux0:video_0> sent query 0xb54020f0 (accept-caps), result 1
0:00:00.356137000 GST_PADS gstpad.c:3589:gst_pad_query:<capsfilter0:sink> sent query 0xb54020c0 (accept-caps), result 1
0:00:00.356207000 GST_CAPS gstpad.c:5030:pre_eventfunc_check:<capsfilter0:sink> caps video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, codec_data=(buffer)000001b004000001b59113000001000000012000c8888007d28045a14103, parsed=(boolean)true, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1 not accepted
0:00:00.356341666 GST_PADS gstpad.c:5235:gst_pad_send_event_unchecked:<capsfilter0:sink> pre event check failed


The allowed caps has framerate in it but the caps that it checks against does not. The debug log is obtained with the following pipeline.

GST_DEBUG=3,*CAPS*:6,*PAD*:6 gst-launch-1.0 udpsrc address=127.0.0.1 port=8888 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)4, config=(string)000001b004000001b59113000001000000012000c8888007d28045a14103, payload=(int)96, ssrc=(uint)48003208, timestamp-offset=(uint)4244557471, seqnum-offset=(uint)28562" ! rtpmp4vdepay ! mpeg4videoparse ! video/mpeg,framerate=15/1 ! avimux ! filesink location=/tmp/test.avi