Error reading an IP camera MJPEG stream

Icarus Alive icarus.alive at gmail.com
Thu Sep 1 10:50:29 PDT 2011


On Thu, Sep 1, 2011 at 7:47 PM, Mailing List SVR
<lists at svrinformatica.it> wrote:
> Il 01/09/2011 13:32, Icarus Alive ha scritto:
>>
>> Hi,
>>
>> Got a rather tacky little east-asian IP camera (apparently a Foscam
>> knock-off), and trying to write a little DIY DVR (of sorts) for it on
>> Linux (Debian 'Sid'). Here's the command I use:
>>
>> icarus at crunchex:~$ gst-launch-0.10 -v souphttpsrc
>> location=http://icarus:icarus123@192.168.1.20:8012/videostream.cgi
>> do-timestamp=true ! multipartdemux ! jpegdec ! autovideosink
>
> try
>
> gst-launch souphttpsrc location=... ! jpegparse ! jpegdec ! xvimagesink
> sync=false
>

Hello Nicola,

Here's what I get with that...

icarus at crunchex:~$ gst-launch-0.10 -v souphttpsrc
location=http://icarus:icarus123@192.168.1.20:8012/videostream.cgi !
jpegparse ! jpegdec ! xvimagesink
WARNING: erroneous pipeline: no element "jpegparse"

and...

icarus at crunchex:~$ gst-inspect-0.10 jpegparse
No such element or plugin 'jpegparse'


and, I tried the following...

icarus at crunchex:~$ gst-launch-0.10 -v souphttpsrc
location=http://icarus:icarus123@192.168.1.20:8012/videostream.cgi !
jpegdec ! xvimagesink sync=false
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element
/GstPipeline:pipeline0/GstXvImageSink:xvimagesink0: Could not
initialise Xv output
Additional debug info:
xvimagesink.c(1433): gst_xvimagesink_get_xv_support ():
/GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
No port available
Setting pipeline to NULL ...
Freeing pipeline ...


So, no luck so far.

~Icarus

>>
>> and here's what I get.
>>
>> Setting pipeline to PAUSED ...
>> Pipeline is PREROLLING ...
>> /GstPipeline:pipeline0/GstJpegDec:jpegdec0.GstPad:sink: caps = image/jpeg
>> /GstPipeline:pipeline0/GstJpegDec:jpegdec0.GstPad:src: caps =
>> video/x-raw-yuv, format=(fourcc)I420, width=(int)640, height=(int)480,
>> framerate=(fraction)0/1
>> ERROR: from element
>> /GstPipeline:pipeline0/GstSoupHTTPSrc:souphttpsrc0: Internal data flow
>> error.
>> Additional debug info:
>> gstbasesrc.c(2582): gst_base_src_loop ():
>> /GstPipeline:pipeline0/GstSoupHTTPSrc:souphttpsrc0:
>> streaming task paused, reason not-negotiated (-4)
>> ERROR: pipeline doesn't want to preroll.
>> Setting pipeline to NULL ...
>> /GstPipeline:pipeline0/GstJpegDec:jpegdec0.GstPad:src: caps = NULL
>> /GstPipeline:pipeline0/GstJpegDec:jpegdec0.GstPad:sink: caps = NULL
>> /GstPipeline:pipeline0/GstMultipartDemux:multipartdemux0.GstPad:src_0:
>> caps = NULL
>> Freeing pipeline ...
>>
>> The username/password for the challenged domain is correct, as I can
>> test it with exact same URL in Firefox, and similarly in vlc. Could
>> someone suggest what I should be checking and what might be wrong ?
>>
>> On reading around, I found 2 different syntaxes on reading MJPEG
>> streams off IP cams, and not sure which one is to be used, and what's
>> the difference --
>>
>> Approach-1: (writes to file)
>> gst-launch -v souphttpsrc location=http://10.11.12.13/mjpeg
>> do-timestamp=true ! multipartdemux
>>    ! image/jpeg,width=640,height=480 ! matroskamux
>>    ! filesink location=mjpeg.mkv
>>
>> Approach-2: (displays on local display device)
>> gst-launch souphttpsrc
>> location=http://admin:1234@192.168.1.150/mjpg/video.mjpg timeout=5 !
>> jpegdec ! glimagesink force-aspect-ratio=true
>>
>> In first approach, there's a step of demuxing multipart encoded JPEGs,
>> and then possibly specifying image decode with certain attributes. In
>> second approach I don't see any multipart encode handling, and direct
>> invocation of jpeg-decoder.
>>
>> In my setup, I don't even seem to have a glimagesink though !


More information about the gstreamer-devel mailing list