Need to understand MJPEG streams

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

Need to understand MJPEG streams

Wes Miller
Administrator
Hi All,

I am looking to do some work with an Axis camera that supplies me an MJPEG stream. I am new to gstreamer so I need some startup help understanding what's going on.

I am using souphttpsrc as my source element.  The detected mime type from the camera after souphttpsrc is multipart/x-mixed-replace as expected.

   gst-launch-0.10.exe -e souphttpsrc location="...?camera=2,  \
       width=320,height=240,framerate=(fraction)1/25" \
       do-timestamp=true is_live=true


If I now send this stream to a file, is it stored as MJPEG?

   gst-launch-0.10.exe -e souphttpsrc location=... ! filesink location=soup.mjpg



FWIW, I tried a tool called JPLAYER from the net, a supposed mjpeg player.  It will play the "live" stream from http://10.xx.yy.zz but it won't play file:///.../soup.mjpg.

Is MJPG a correct file type? (just in case jplayer is dumb enough to check the file extension and not the mime-type.)  The divx player can't play the file either.



However, the stored file will "play" using the same stream I use to see the live video feed.

   gst-launch-0.10.exe -e souphttpsrc location=... ! multipartdemux \
      ! jpegdec ! ffmpegcolorspace ! autovideosink

   // (swap filesrc for souphttpsrc)

   gst-launch-0.10.exe -e filesrc location=A.mjpg ! multipartdemux \
      ! jpegdec ! ffmpegcolorspace ! autovideosink



Piping from souphttpsrc into multipartdemux yields a mime-type of image/jpeg.  This is the type of each demuxed frame, right?

If I choose to store the output of the demuxer, does it remain a motion stream?  What type of file and/or stream is it?  Is there a preferred file extension for it?



If I attempt to play back the post-demuxer file, time elapses and the pipe terminates ok, but there is no output video shown.

   gst-launch-0.10.exe -e filesrc location=post-demux.jpg \
      ! jpegdec ! ffmpegcolorspace ! autovideosink



Thanks for the any help.

Wes

Reply | Threaded
Open this post in threaded view
|

Re: Need to understand MJPEG streams

Ron McOuat


On 10-03-31 3:04 PM, Wes Miller wrote:

> Hi All,
>
> I am looking to do some work with an Axis camera that supplies me an MJPEG
> stream. I am new to gstreamer so I need some startup help understanding
> what's going on.
>
> I am using souphttpsrc as my source element.  The detected mime type from
> the camera after souphttpsrc is multipart/x-mixed-replace as expected.
>
>     gst-launch-0.10.exe -e souphttpsrc location="...?camera=2,  \
>         width=320,height=240,framerate=(fraction)1/25" \
>         do-timestamp=true is_live=true
>
>
> If I now send this stream to a file, is it stored as MJPEG?
>
>     gst-launch-0.10.exe -e souphttpsrc location=... ! filesink
> location=soup.mjpg
>
>
>
> FWIW, I tried a tool called JPLAYER from the net, a supposed mjpeg player.
> It will play the "live" stream from http://10.xx.yy.zz but it won't play
> file:///.../soup.mjpg.
>
> Is MJPG a correct file type? (just in case jplayer is dumb enough to check
> the file extension and not the mime-type.)  The divx player can't play the
> file either.
>
>
>
> However, the stored file will "play" using the same stream I use to see the
> live video feed.
>
>     gst-launch-0.10.exe -e souphttpsrc location=... ! multipartdemux \
>        ! jpegdec ! ffmpegcolorspace ! autovideosink
>
>     // (swap filesrc for souphttpsrc)
>
>     gst-launch-0.10.exe -e filesrc location=A.mjpg ! multipartdemux \
>        ! jpegdec ! ffmpegcolorspace ! autovideosink
>
>
>
> Piping from souphttpsrc into multipartdemux yields a mime-type of
> image/jpeg.  This is the type of each demuxed frame, right?
>
> If I choose to store the output of the demuxer, does it remain a motion
> stream?  What type of file and/or stream is it?  Is there a preferred file
> extension for it?
>
>
>
> If I attempt to play back the post-demuxer file, time elapses and the pipe
> terminates ok, but there is no output video shown.
>
>     gst-launch-0.10.exe -e filesrc location=post-demux.jpg \
>        ! jpegdec ! ffmpegcolorspace ! autovideosink
>    
Add multipartdemux to your pipeline just before jpegdec or put it in the
pipeline saving the file plus see more below.

>
>
> Thanks for the any help.
>
> Wes
>
>
>    
Some useful plugins are
multipartdemux which will pull out the boundaries between the individual
jpeg images that are part of the Axis stream
check out
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-multipartdemux.html

jpegdec which will convert jpeg buffers to raw frame image buffers
(mentioned on the above page as part of a display pipeline.

matroskamux is a container format that will accept mjpeg which will
preserve time information before placing into a file.
e.g.
gst-launch souphttpsrc location=... do-timestamp=true is_live=true !
multipartdemux ! matroskamux ! filesink location=.....mkv

is playable in totem on Linux directly or you can use

gst-launch filesrc location=...mkv ! matroskademux ! jpegdec !
ffmpegcolorspace ! autovideosink

Ron

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel