After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 601262 - It appears gst-launch playbin2 fails to dynamically build the appropriate pipeline when I try to stream MPEG4 Part2 content from a webcam via Ethernet.
It appears gst-launch playbin2 fails to dynamically build the appropriate pip...
Status: RESOLVED DUPLICATE of bug 578926
Product: GStreamer
Classification: Platform
Component: gstreamer (core)
0.10.25
Other Linux
: Normal normal
: NONE
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2009-11-09 14:35 UTC by Robert Krakora
Modified: 2010-06-09 13:37 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Robert Krakora 2009-11-09 14:35:40 UTC
Hello,

It appears gst-launch playbin2 fails to dynamically build the appropriate pipeline when I try to stream MPEG4 Part2 content from a webcam via Ethernet.  I can build the pipeline by hand and I can see video perfectly.  It seems as though playbin2 is leaving out "mpeg4videoparse" from the pipeline.  I have the latest Fluendo Codec Bundle 9 installed, but I don't think it is a contributing factor.

gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp ! rtpmp2tdepay ! mpegtsdemux ! mpeg4videoparse ! flumpeg4vdec ! xvimagesink

Best Regards,

Rob Krakora
Comment 1 Wim Taymans 2009-11-10 11:29:07 UTC
does this work?

gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp !
rtpmp2tdepay ! mpegtsdemux ! ffdec_mpeg4 ! xvimagesink
Comment 2 Tobias Mueller 2010-06-03 11:46:08 UTC
Closing this bug report as no further information has been provided. Please feel free to reopen this bug if you can provide the information asked for.
Thanks!
Comment 3 Robert Krakora 2010-06-03 14:43:51 UTC
(In reply to comment #1)
> does this work?
> 
> gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp !
> rtpmp2tdepay ! mpegtsdemux ! ffdec_mpeg4 ! xvimagesink

This does not work...it does not blow up.  Just produces a gray image.
Comment 4 Robert Krakora 2010-06-03 14:45:15 UTC
(In reply to comment #3)
> (In reply to comment #1)
> > does this work?
> > 
> > gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp !
> > rtpmp2tdepay ! mpegtsdemux ! ffdec_mpeg4 ! xvimagesink
> 
> This does not work...it does not blow up.  Just produces a gray image.

[root@devkrakora gst-ffmpeg-0.10.10]# gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp ! rtpmp2tdepay ! mpegtsdemux ! ffdec_mpeg4 ! xvimagesink
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: latency = 2000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: buffer-mode = slave (1)
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc0: timeout = 5000000
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc0: timeout = 0
New clock: GstSystemClock
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:send_rtcp_src_0: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSink:udpsink1.GstPad:sink: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:send_rtcp_src_0.GstProxyPad:proxypad2: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRtpMP2TDepay:rtpmp2tdepay0.GstPad:src: caps = video/mpegts, packetsize=(int)188, systemstream=(boolean)true
/GstPipeline:pipeline0/GstRtpMP2TDepay:rtpmp2tdepay0.GstPad:sink: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_1575297834_33: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_1575297834_33.GstProxyPad:proxypad4: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:recv_rtp_src_0_1575297834_33.GstProxyPad:proxypad3: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:sink: caps = video/mpegts, packetsize=(int)188, systemstream=(boolean)true
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pat-info = ((GValueArray*) 0x38a8440)
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pmt-info = ((MpegTsPmtInfo*) 0x389f2f0)
/GstPipeline:pipeline0/ffdec_mpeg4:ffdec_mpeg40.GstPad:sink: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false
/GstPipeline:pipeline0/ffdec_mpeg4:ffdec_mpeg40.GstPad:src: caps = video/x-raw-yuv, width=(int)0, height=(int)0, framerate=(fraction)25/1, format=(fourcc)I420, interlaced=(boolean)false
/GstPipeline:pipeline0/ffdec_mpeg4:ffdec_mpeg40.GstPad:src: caps = video/x-raw-yuv, width=(int)640, height=(int)480, framerate=(fraction)30/1, format=(fourcc)I420, interlaced=(boolean)false, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = video/x-raw-yuv, width=(int)640, height=(int)480, framerate=(fraction)30/1, format=(fourcc)I420, interlaced=(boolean)false, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSession:rtpsession0.GstPad:sync_src: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSsrcDemux:rtpssrcdemux0.GstPad:rtcp_sink: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSsrcDemux:rtpssrcdemux0.GstPad:rtcp_src_1575297834: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpJitterBuffer:rtpjitterbuffer0.GstPad:sink_rtcp: caps = application/x-rtcp
Comment 5 Robert Krakora 2010-06-03 14:46:34 UTC
This does work:

[root@devkrakora gst-ffmpeg-0.10.10]# gst-launch-0.10 -v rtspsrc location=rtsp://192.168.1.170:16200/camera.sdp ! rtpmp2tdepay ! mpegtsdemux ! mpeg4videoparse ! ffdec_mpeg4 ! xvimagesink
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: latency = 2000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: buffer-mode = slave (1)
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 5000000
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 0
New clock: GstSystemClock
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:send_rtcp_src_0: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSink:udpsink1.GstPad:sink: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:send_rtcp_src_0.GstProxyPad:proxypad2: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRtpMP2TDepay:rtpmp2tdepay0.GstPad:src: caps = video/mpegts, packetsize=(int)188, systemstream=(boolean)true
/GstPipeline:pipeline0/GstRtpMP2TDepay:rtpmp2tdepay0.GstPad:sink: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_1575297834_33: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_1575297834_33.GstProxyPad:proxypad4: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:recv_rtp_src_0_1575297834_33.GstProxyPad:proxypad3: caps = application/x-rtp, media=(string)video, payload=(int)33, clock-rate=(int)90000, encoding-name=(string)MP2T, a-tool=(string)\"vlc\\ 0.9.9\", a-recvonly=(string)\"\", a-type=(string)broadcast, a-charset=(string)UTF-8, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:sink: caps = video/mpegts, packetsize=(int)188, systemstream=(boolean)true
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pat-info = ((GValueArray*) 0xe45ac20)
/GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pmt-info = ((MpegTsPmtInfo*) 0xe4504a0)
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, parsed=(boolean)true
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:sink: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false
/GstPipeline:pipeline0/GstMpeg4VParse:mpeg4vparse0.GstPad:src: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, parsed=(boolean)true, profile-level-id=(string)1, codec_data=(buffer)000001b001000001b58913000001000000012000c48d8800f514043c1463000001b24c61766335312e34302e34, pixel-aspect-ratio=(fraction)1/1, width=(int)640, height=(int)480
/GstPipeline:pipeline0/ffdec_mpeg4:ffdec_mpeg40.GstPad:sink: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, parsed=(boolean)true, profile-level-id=(string)1, codec_data=(buffer)000001b001000001b58913000001000000012000c48d8800f514043c1463000001b24c61766335312e34302e34, pixel-aspect-ratio=(fraction)1/1, width=(int)640, height=(int)480
/GstPipeline:pipeline0/ffdec_mpeg4:ffdec_mpeg40.GstPad:src: caps = video/x-raw-yuv, width=(int)640, height=(int)480, framerate=(fraction)30/1, format=(fourcc)I420, interlaced=(boolean)false, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = video/x-raw-yuv, width=(int)640, height=(int)480, framerate=(fraction)30/1, format=(fourcc)I420, interlaced=(boolean)false, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSession:rtpsession0.GstPad:sync_src: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSsrcDemux:rtpssrcdemux0.GstPad:rtcp_sink: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpSsrcDemux:rtpssrcdemux0.GstPad:rtcp_src_1575297834: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0/GstRtpJitterBuffer:rtpjitterbuffer0.GstPad:sink_rtcp: caps = application/x-rtcp
Comment 6 Robert Krakora 2010-06-03 14:47:27 UTC
Why does play2bin not recognize the need for the mpeg4parse element based on the stream properties?
Comment 7 Robert Krakora 2010-06-03 14:47:54 UTC
I meant mpeg4videoparse.
Comment 8 Robert Krakora 2010-06-03 14:50:02 UTC
I see that this topic has already been brought up internally:

http://gstreamer-devel.966125.n4.nabble.com/mpeg4videoparse-in-decodebin-2-td971771.html
Comment 9 Robert Krakora 2010-06-03 19:48:48 UTC
I took a look at this bug:

https://bugzilla.gnome.org/show_bug.cgi?id=578926

I increased the RANK of mpeg4videoparse and now I can play the MPEG4 stream from my camera!  However, what are the ramifications of this modification?  I noticed that the developer suggesting this modification had his suggestion for increasing the RANK shot down.  Maybe it was because this element would always be inserted even for data that has already been parsed or in front of a decoder that is capable of handling the parse on it's own therefore increasing the CPU overhead.
Comment 10 Arnout Vandecappelle 2010-06-09 10:07:36 UTC
I think that nobody has gotten around to do the rank change.  Or perhaps it's because mpeg4videoparse is in -bad, I'm not sure.

The reason you quote is not really valid.  A decoder that is capable of handling the parse should just get a rank that is even higher than mpeg4videoparse.
Comment 11 Robert Krakora 2010-06-09 12:23:22 UTC
Unfortunately the Fluendo MPEG4 Decoder is not capable of parsing the MPEG4 video content that it is being provided and it is necessary to add the mpeg4videoparse element into the pipeline.  However, the Fluendo MPEG4 Decoder appeared to have a higher rank than that of mpeg4videoparse so the playbin2 element did not place it in the pipeline until I increased the rank per an e-mail change of which you made the suggestion.  I have seen e-mail chains arguing for and against parsers.  I am so glad that I found the e-mail chain and especially your excellent comments.  Will this ranking be corrected in the next -bad release?  ;-)
Comment 12 Tim-Philipp Müller 2010-06-09 12:46:05 UTC
Making such changes (caps) requires a co-ordinated effort across multiple modules in terms of adjusting the caps and ranks and making sure everything is released in the right order so nothing breaks.

Fiddling with the ranks to accommodate a proprietary decoder sounds like a bad idea to me. Things should work if the caps are correct and complete irrespective of the exact ranks IMHO, so we should probably get the caps fixed..
Comment 13 Arnout Vandecappelle 2010-06-09 13:03:44 UTC
(In reply to comment #12)
> Making such changes (caps) requires a co-ordinated effort across multiple
> modules in terms of adjusting the caps and ranks and making sure everything is
> released in the right order so nothing breaks.

I believe we're only talking about a caps change, since the patches from #578926 have already been committed.  At least, Sebastian said he would commit them, I never checked.

That said, the rank change indeed has to wait for a good/bad release cycle since it depends on the caps.

> Fiddling with the ranks to accommodate a proprietary decoder sounds like a bad
> idea to me.

 I only know two mpeg4 decoders: ffmpeg and fluendo.  Neither does parsing (unless the ffmpeg decoder has changed recently).  Both of them have PRIMARY rank, so higher than mpeg4videoparse's SECONDARY rank.

 The rank change of the parser was suggested by Jan Schmidt and is also used by mp3parse.  See #578926.

> Things should work if the caps are correct and complete
> irrespective of the exact ranks IMHO, so we should probably get the caps
> fixed..

Again, see #578926.  I originally did it like that (changing the caps of typefind), but Jan Schmidt disagreed.


Can someone with sufficient power mark this one as a duplicate of #578926?
Comment 14 Tim-Philipp Müller 2010-06-09 13:24:07 UTC

*** This bug has been marked as a duplicate of bug 578926 ***
Comment 15 Robert Krakora 2010-06-09 13:37:21 UTC
So, will this be addressed in the next -bad release?  ;-)