In this blog we will see how to send stream from gstreamer to ant media using RMTP and SRT and we will also see how we can play stream from Ant Media Server in Gstreamer using DASH and HLS. These protocols are widely used in streaming technologies. We will see what is Gstreamer , How it works , How to install Gstreamer , what is a Gstreamer-pipeline we will be constructing simple gstreamer pipelines to send and receive streams to AMS.
Which protocols are supported for ingesting?
Ant Media Server supports RTMP, RTSP, WebRTC, and SRT for ingesting any video sources.
Which protocols are supported for egressing?
Ant Media Server supports WebRTC, DASH(CMAF), and HLS protocols to deliver the streaming sessions. In addition, RTMP output is also provided for streaming purposes to any endpoint including Social Media.
What is GStreamer?
Gstreamer is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. Gstreamer can be used to build a wide range of applications .It an be used for anything related to streaming and multimedia-related applications.
Gstreamer is not a media player, codec converter or file format converter, or file streaming service but it can be used to build all of it.
Gstreamer Features
Gstreamer works on all major operating systems such as Linux, Android, Windows, Max OS X, iOS, as well as most BSDs, commercial Unixes, Solaris, and Symbian. It has been ported to a wide range of operating systems, processors and compilers. It runs on all major hardware architectures including x86, ARM, MIPS, SPARC and PowerPC, on 32-bit as well as 64-bit, and little endian or big endian.
Pipelines can be visualized by dumping them to a .dot file and creating a PNG image from that
Resource friendly plugins don’t waste memory
Multi-threaded pipelines are trivial and transparent to construct
How Gstreamer Works
The framework is based on plugins that will provide the various codec and other functionality. The plugins can be linked and arranged in a pipeline.
Gstreamer provide wide range of plugins which are responsible for various task
protocols handling
sources: for audio and video (involves protocol plugins)
formats: parsers, formaters, muxers, demuxers, metadata, subtitles
codecs: coders and decoders
filters: converters, mixers, effects .
sinks: for audio and video (involves protocol plugins)
GStreamer pipelines
Gstreamer provides bindings for various programming languages such as C , Python , Rust etc. https://gstreamer.freedesktop.org/bindings which can be used to construct gstreamer pipelines . gstreamer also provides a command line tool (gst-launch-1.0) for creating simple pipelines for testing purpose without writing any code. We will use this tool for creating our pipeline.
Think of gstreamer pipeline as a normal water pipeline. water comes from the rivers through pipeline to water treatment plant and then goes through phases such as cleaning , disinfection , filtration , and then to our homes. In the same way the data flow though the pipeline and every element in the pipeline will perform various task on the data flowing thought the pipeline.
Gstreamer provides various kind of element such as udpsrc for listen to udp data , filesrc for reading file from disk , filesink for writing a file to disk.udp sink for sending udp data. The elements can have different properties for example filesrc element have a property of location udpsrc element have property of port and likewise. you can list all the properties of elements using ( gst-launch-1.0 elment_name ) . these elements can be linked together to construct a pipeline . The data starts to flow from left side of the pipeline to right side as soon as pipeline starts playing.
simple gstreamer pipelines :
we will construct simple gstreamer pipelines to understand the concept of pipelines in gstreamer . ! is used for connecting two elements.
gst-launch-1.0 videotestsrc pattern=1 ! autovideosink
videotestsrc generate the test video and pass the video buffer to autovideosink element which will then display the generated test video .
gst-launch-1.0 audiotestsrc ! volume volume=0.1 ! autoaudiosink
audiotestsrc generate the test video and pass the video buffer to autoaudiosink element which will then display the generated test video .
How to install Gstreamer :
Ubuntu :
Run the following command:
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
Windows :
download the windows installer from https://gstreamer.freedesktop.org/download/#windows
Mac :
download the Mac installer from https://gstreamer.freedesktop.org/download/#macos
pipelines for connecting Ant media with Gstreamer
Note :
For ingesting make sure you enter the correct stream id and application name in the command line. You can see the ingested stream on the Ant Media web interface.
For egressing make sure the stream is available to be consumed. And correct application name and stream id is entered. You can see whether the stream is available or not on the web interface.
RTMP (ingesting only)
RTMP streaming protocol, a TCP-based technology, was developed by Macromedia for streaming audio, video, and data over the Internet, between a Flash player and a server.
Sending RTMP stream from GStreamer to Ant Media:
Sending Test Video stream
gst-launch-1.0 -v videotestsrc ! x264enc tune=zerolatency ! flvmux ! rtmpsink location=”rtmp://AntMedia_IP/{APP_NAME}?streamid={APP_NAME}/{StreamId} live=1″
Sending stream with mp4 file
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! decodebin ! x264enc tune=zerolatency ! flvmux ! rtmpsink location=”rtmp://AntMedia_IP/{APP_Name}?streamid={APP_NAME}/{StreamId} live=1″
SRT (ingesting only)
SRT is an open-source technology designed for reliable and low-latency streaming over unpredictable public networks. It works on top of UDP.
Sending SRT stream from GStreamer to Ant Media:
Sending Test Video stream
gst-launch-1.0 videotestsrc ! x264enc tune=zerolatency ! mpegtsmux ! srtsink uri=”srt://AntMedia_IP:4200?streamid={APP_NAME}/{streamid}”
sending stream with mp4 file
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! decodebin ! x264enc tune=zerolatency ! mpegtsmux ! srtsink uri=srt://AntMedia_IP:4200?streamid={APP_NAME}/{StreamId}
HLS (egressing only)
HLS is an adaptive HTTP-based protocol used for transporting video and audio data/content from media servers to the end user’s device.
Receiving HLS stream in GStreamer from Ant Media:
gst-launch-1.0 souphttpsrc location=”http://AntMedia_IP:5080/{APP_NAME}/streams/{Streamid}.m3u8?token=undefined&subscriberId=undefined&subscriberCode=undefined” ! hlsdemux ! decodebin ! videoconvert ! videoscale ! autovideosink
DASH (egressing only)
DASH is a streaming method. DASH stands for “Dynamic Adaptive Streaming over HTTP” DASH breaks videos down into smaller chunks and encodes those chunks at different quality levels. This makes it possible to stream videos of different quality.
Receiving DASH stream in GStreamer from Ant Media :
gst-launch-1.0 souphttpsrc location=”http://AntMedia_IP:5080/{Appname}/streams/{streamid}/{streamid}.mpd?token=undefined&subscriberId=undefined&subscriberCode=undefined'” ! dashdemux ! decodebin ! videoconvert ! videoscale ! autovideosink
Start using Ant Media Server for free now
Ant Media Server is a real-time streaming engine that provides highly scalable, ultra-low latency (WebRTC), and low latency (CMAF & HLS) video streaming solutions, with a dashboard to manage all streaming needs.
It is used by users from different segments such as education, live auctions, radio and TV broadcasts, service providers, government agencies, and gaming companies to enhance their business by using Ant Media Server and benefiting from its capabilities.
Fundamental features
Ultra-low latency WebRTC streaming
Reliable and secure streaming
Highly scalable WebRTC streaming on clusters
Voice and video calls
Live video monitoring and surveillance
Social media distribution
MCU and SFU topologies are supported
Cost controlling and consumption monitoring
MP4 and HLS live stream recording RTMP, WebRTC and SRT ingest
Comments