Little help with M/Jpeg encoding and streaming

Ian Daley ian at nian.com.au
Mon Nov 28 08:54:49 PST 2011


Hi there,

I am working on developing an app with gstreamer (or hoping to!) that 
will pickup the image from a wireless IP cam and then relay this to a 
web server. I will have multiple cameras, but I guess we'll get to that 
later, because right now, I'm a little stuck (and perhaps a little tired 
being 2 AM) and need a little bit of guidance.

Essentially I have a video source from an IP Camera that is in mjpeg 
format. I currently access this through souphttpsrc via the following 
method:

gst-launch -v souphttpsrc 
location="http://192.168.1.195/videostream.cgi?user=admin&pwd=" 
do-timestamp=true is_live=true ! multipartdemux ! tcpserversink port=5000

and play it back via:

gst-launch tcpclientsrc port=5000 ! jpegdec ! autovideosink

Which is simple enough... I guess, somewhere to get started. This works, 
but of course, I don't want to stream in mjpeg, I would rather convert 
this to something more browser friendly... this is where the problems begin.

If I try to convert it to theora I get:

gst-launch -v souphttpsrc 
location="http://192.168.1.195/videostream.cgi?user=admin&pwd=" 
do-timestamp=true is_live=true ! multipartdemux ! jpegdec ! videoscale 
method=1 ! video/x-raw-yuv,width=320,height=240 ! theoraenc bitrate=150 
! tcpserversink port=5000

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/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(2574): gst_base_src_loop (): 
/GstPipeline:pipeline0/GstSoupHTTPSrc:souphttpsrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 50288828 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
/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
Setting pipeline to NULL ...
Freeing pipeline ...

In fact... I pretty much get this with most attempts to convert it to 
something browser friendly.

Anyone got any ideas on what would be the best way to encode this stream 
into something that can be picked up and handled easily in browsers? 
FWIW, even the mjpeg stream doesn't work natively in Firefox, but the 
source does.

Kind Regards

Ian



More information about the gstreamer-devel mailing list