[gst-devel] Error whiling playing video

Arnout Vandecappelle arnout at mind.be
Mon Nov 10 12:46:56 CET 2008


On Monday 10 November 2008 03:58:18 Eric Zhang wrote:
>     So could you explain a little bit why we should add this extra
> capsfilter to make decodebin works? Thanks a lot.

 If you think a bit about it, it's easy enough to understand.  gst-launch is 
completely agnostic about what all the pipeline elements do, but it somehow 
has to choose which sink pad to connect to which source pad of the rtspsrc.  
Look at the gst-launch command:

gst-launch rtspsrc location="rtsp://xxxxxx" name=d 
  d. ! decodebin ! ffmpegcolorspace ! xvimagesink 
  d. ! decodebin ! audioconvert ! alsasink

When rtspsrc creates a video source pad, gst-launch has to choose which of the 
two decodebins to connect to it.  Since they look identical (gst-launch can't 
look into the rest of the pipeline, who knows what decodebin will do 
anyway?), gst-launch randomly connect the video source to one of the 
decodebins.  After prerolling, the decodebin creates a source pad for the 
video and gst-launch has to connect it to the next element.  Now, if you're 
lucky, gst-launch had select the first decodebin and all goes well.  If 
you're unlucky, however, it has chosen the second decodebin, and gst-launch 
connects the audioconvert to the decodebin's video source pad...  That 
doesn't work, so the linking fails.

 That doesn't crash your application yet.  It's only when the pipeline goes 
into PLAYING and the source starts pushing data in the decodebin, that it 
turns out that the decodebin doesn't have anywhere to send the data to.  
That's what triggers the 'Not linked' error.


 When you use the depayloader and decoder explicitly instead of decodebin, the 
linking works correctly:

gst-launch rtspsrc location="rtsp://xxxxxx" name=d 
  d. ! rtph263pdepay ! ffdec_h263 ! ffmpegcolorspace ! xvimagesink 
  d. ! rtpamrdepay ! amrnbdec ! audioconvert ! alsasink

Now, the two branches of the pipeline are no longer identical.  gst-launch 
looks at the caps of rtph263pdepay and rtpamrdepay to see which one matches 
the video source.  It will therefore always select the right one.  You get 
the same behaviour with a decodebin by providing caps explicitly.


 Regards,
 Arnout

-- 
Arnout Vandecappelle                               arnout at mind be
Senior Embedded Software Architect                 +32-16-286540
Essensium/Mind                                     http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium                BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  D206 D44B 5155 DF98 550D  3F2A 2213 88AA A1C7 C933




More information about the gstreamer-devel mailing list