Difference between revisions of "Using gstreamer"

From ElphelWiki
Jump to: navigation, search
(Live encoding)
Line 3: Line 3:
 
Gstreamer is a modular node based player as well as encoder in a single application. It is possible to create chains of so called elements with a wide range of different plugins.
 
Gstreamer is a modular node based player as well as encoder in a single application. It is possible to create chains of so called elements with a wide range of different plugins.
  
= Gstreamer and live video processing over the network =
+
= Gstreamer =
  
Gstreamer is very suited to live video and audio processing, notably for live decoding/encoding, audio muxing.
+
GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing.
  
= Requirements =
+
Applications can take advantage of advances in codec and filter technology transparently. Developers can add new codecs and filters by writing a simple plugin with a clean, generic interface.
  
* a fairly recent Gstreamer distribution ("gstreamer0.10" as Ubuntu package for example), with the rtpjpegdepay plugin.
+
= Installing GStreamer =
 +
[http://blog.nicolargo.com/ NicoLargo] made a script to automatically install all the required packages for GStreamer on Ubuntu 10.04. Very simple and useful, just download and execute the script: http://svn.nicolargo.com/ubuntupostinstall/trunk/gstreamerinstall.sh
  
 
= Tips =
 
= Tips =
 
+
== How to get 25 FPS ? ==
 
You won't get 25 fps if autoexposure is on and local brightness not high enough: the camera will automatically lower framerate for keeping clear picture. Either lighten up, or play with image settings (notably, gain).
 
You won't get 25 fps if autoexposure is on and local brightness not high enough: the camera will automatically lower framerate for keeping clear picture. Either lighten up, or play with image settings (notably, gain).
  

Revision as of 13:14, 20 June 2010

Gstreamer has made a lot of progress lately and some say it already outperforms Mplayer because of its focus on speed and hardware acceleration like using OpenGL, etc.

Gstreamer is a modular node based player as well as encoder in a single application. It is possible to create chains of so called elements with a wide range of different plugins.

Gstreamer

GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing.

Applications can take advantage of advances in codec and filter technology transparently. Developers can add new codecs and filters by writing a simple plugin with a clean, generic interface.

Installing GStreamer

NicoLargo made a script to automatically install all the required packages for GStreamer on Ubuntu 10.04. Very simple and useful, just download and execute the script: http://svn.nicolargo.com/ubuntupostinstall/trunk/gstreamerinstall.sh

Tips

How to get 25 FPS ?

You won't get 25 fps if autoexposure is on and local brightness not high enough: the camera will automatically lower framerate for keeping clear picture. Either lighten up, or play with image settings (notably, gain).

Commandline examples

(Note: replace width and height accordingly to your camera setup and your computer's horsepower :p).

Displaying

careful with streams at higher resolution than 1920x1088

Display the cameras live video stream at its native resolution:

gst-launch-0.10 rtspsrc location=rtsp://192.168.0.9:554 ! rtpjpegdepay ! jpegdec ! queue ! ffmpegcolorspace ! xvimagesink sync=false

Display the cameras live video stream, resize to fit window (the ! videoscale element takes care of that)

gst-launch-0.10 rtspsrc location=rtsp://192.168.0.9:554 ! rtpjpegdepay ! jpegdec ! queue ! ffmpegcolorspace ! videoscale ! xvimagesink sync=false

Dumping

mjpeg dumping

gst-launch -v rtspsrc location=rtsp://192.168.0.9:554 ! queue ! rtpjpegdepay ! videorate ! capsfilter caps = "image/jpeg, framerate=(fraction)25/1, width=1024, height=768" ! queue ! matroskamux ! filesink location=/tmp/test.mkv

YUV Dumping

gst-launch -v rtspsrc location=rtsp://192.168.0.9:554 ! queue ! rtpjpegdepay ! queue ! jpegdec ! queue ! videorate ! capsfilter caps="video/x-raw-yuv, format=(fourcc)I420, width=(int)1024, height=(int)768, framerate=(fraction)25/1" ! queue ! avimux ! filesink location=/tmp/test.avi

Dump transcoding example

gst-launch filesrc location=test.mkv ! matroskademux ! queue ! jpegdec ! queue ! theoraenc bitrate=4000 ! queue ! oggmux ! filesink location=test.ogg

Live encoding

gst-launch -v rtspsrc location=rtsp://192.168.0.9:554 ! queue ! rtpjpegdepay ! queue ! jpegdec ! queue ! videorate ! capsfilter caps="video/x-raw-yuv, format=(fourcc)I420, width=(int)1024, height=(int)768, framerate=(fraction)25/1" ! queue ! theoraenc bitrate=4000 ! queue ! oggmux ! filesink location=/tmp/test1024.ogg

I did some benchmarks; a Core 2 Quad Q6600 (2.4 Ghz) is not powerful enough for h264 encoding @fullHD resolution (using 4 treads).