GStreamer is a streaming media framework, based on graphs of filters which operate on media data.
Gstreamer is constructed using a pipes and filter architecture.
The basic structure of a stream pipeline is that you start with a stream source (camera, screengrab, file etc) and end with a stream sink (screen window, file, network etc). The ! are called pads and they connect the filters.
Data that flows through pads is described by caps (short for capabilities). Caps can be though of as mime-type (e.g. audio/x-raw, video/x-raw) along with mime-type (e.g. width, height, depth).
Source Code
Download the latest archives from https://gstreamer.freedesktop.org/src/
Source code on git : https://github.com/GStreamer
Primarily 3 files are required
- gstreamer-1.8.1.tar.xz
- gst-plugins-base-1.8.1.tar.xz
- gst-rtsp-server-1.8.1.tar.xz
If the destination machine is a ec2 instance one can also scp the tar.xz file there
To extract the tar.xz files use tar -xf <filename> it will create a folder for each package.
Prerequisites
build-essentials
sudo apt-get install build-essentials
bison
flex
GLib >= 2.40.0
GLib package contains low-level libraries useful for providing data structure handling for C, portability wrappers and interfaces for such runtime functionality as an event loop, threads, dynamic loading and an object system.
sudo apt-get install libglib2.0-dev
gstreamer
Installing gstreamer 1.8.1 . Gstreamer create a media stream with elements and properties as will be shown on later sections of this tutorial .
cd gstreamer-1.8.1 ./configure make sudo make install
after installation export the path
export LD_LIBRARY_PATH=/usr/local/lib
then verify the installation of the gstreamer by
gst-inspect-1.0
provides information on installed gstreamer modules ie print out a long list ( about 123 in my case ) plugin that are installed such as coreelements:
capsfilter: CapsFilter ximagesink: ximagesink: Video sink videorate: videorate: Video rate adjuster typefindfunctions: image/x-quicktime: qif, qtif, qti typefindfunctions: video/quicktime: mov, mp4 typefindfunctions: application/x-3gp: 3gp typefindfunctions: audio/x-m4a: m4a typefindfunctions: video/x-nuv: nuv typefindfunctions: video/x-h265: h265, x265, 265 typefindfunctions: video/x-h264: h264, x264, 264 typefindfunctions: video/x-h263: h263, 263 typefindfunctions: video/mpeg4: m4v typefindfunctions: video/mpeg-elementary: mpv, mpeg, mpg typefindfunctions: application/ogg: ogg, oga, ogv, ogm, ogx, spx, anx, axa, axv typefindfunctions: video/mpegts: ts, mts typefindfunctions: video/mpeg-sys: mpe, mpeg, mpg typefindfunctions: audio/x-gsm: gsm
gst plugins
Now build the plugins
cd gst-plugins-base-1.8.1 ./configure make sudo make install
gst plugins good
cd gst-plugins-good-1.8.1.tar ./configure make sudo make install
RTSP Server
Now make and install the rtsp server
cd gst-rtsp-server-1.8.1 ./configure
last few lines from console traces
Configuration
Version : 1.8.1
Source code location : .
Prefix : /usr/local
Compiler : gcc -std=gnu99
CGroups example : no
make
It will compile the examples .
sudo make install
stream video test src
~/mediaServer/gst-rtsp-server-1.8.1/examples]$./test-launch --gst-debug=0 "( videotestsrc ! video/x-raw,format=(yuv),width=352,height=288,framerate=15/1 ! x264enc ! rtph264pay name=pay0 pt=96 )" stream ready at rtsp://127.0.0.1:8554/test
Ref:
Manual for developers : https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-rtsp-server/html/index.html
Simplest pipeline
gst-launch-1.0 fakesrc ! fakesink
➜ ~ gst-launch-1.0 fakesrc ! fakesink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock
To stop press ctrl +c ^
Chandling interrupt. Interrupt: Stopping pipeline ... Execution ended after 0:00:48.004547887 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ... [/sourcecode ] or to display to a audiovideosink gst-launch-1.0 videotestsrc ! autovideosink
To capture webcam
gst-launch v4l2src ! xvimagesink
Question:
How would i pass a network path video to server (http://10.2.2.2/aerostate) for gstreamer as input and stream it to clients? please i need help
Little typo. Package’s name is build-essential
Is unfortunately not working with 1.14.2
And the requirement of gst-plugins-good is not mentioned
but in the end I made it work. Thanks for sharing
Will be updating the article soon for all missing dependencies