Adaptive Bitrate Streaming using GStreamer

Gateworks’ SBCs are widely used for streaming audio and video over the network via Ethernet, 802.11 WiFi, or 4G LTE Cellular. Networks are dynamic, whether from network load, RF interference or signal strength thus throughput will vary requiring intelligent and flexible applications to adjust as necessary.

Adaptive Bitrate Streaming is the concept of adjusting the quality of video and/or audio depending on the quality of the network connection or server load. This type of technology is widely implemented throughout technology today, evident in streaming services like Netflix and YouTube.

​Gateworks created an example GStreamer application named gst-variable-rtsp-server. This application includes a mechanism for auto-adjusting the encoding bitrate depending on the number of clients connected to the server.

gst-variable-rtsp-server can change either the quant-param or the bitrate parameters of the imxvpuenc_h264 encoder. The quant-param will only be used if the pipeline is set to Variable Bitrate mode (VBR). This can be accomplished by passing in the -b 0 flag to the program. Otherwise, gst-variable-rtsp-server will change the bitrate of the stream.

The algorithm used to change both bitrate and quant-param are based on the --steps input (defaulted to 5). For example, if using the default steps value of 5, if the min bitrate was 500 and max bitrate was 2000, it would take 5 clients to adjust from the highest to the lowest quality.

In the below example, the rtsp server was configured to degrade from 10mbps to 400kbps bitrate within 5 steps. Please see below for our results.

gst-variable-rtsp-server --steps=5 --max-bitrate=10000 --min-bitrate=400 --src-element=imxv4l2videosrc --video-in=/dev/video0

quality_changes

For higher resolution images of the above, please view here (10Mbps), here (2.8Mbps), and here (400Kbps).

For more information and sample GStreamer pipelines, please visit our Software Wiki Pages: