3.5 KiB
GStreamer command-line cheat sheet
GStreamer is a powerful library for manipulating audio and video - including live streams. This repo provides:
- a cheat sheet for GStreamer on the command-line, and
- a few Python examples.
Whilst the command line is great, programmatic usage (in Python or another language) allows you to dynamically manipulate the A/V streams.
Contents
- Installing
- Basics
- Test streams
- RTMP
- Mixing video & audio
- Images
- Queues
- Writing to files
- Sending to multiple destinations (tee)
- Sharing and receiving pipelines (including sending/receiving video from shared memory)
- Network transfer (including how to send so that VLC can preview)
- RTP
- SRT
Sources and references
Other cheat-sheets
- https://github.com/xmementoit/gstreamerCheatsheet/blob/master/README.md
- https://gist.github.com/nebgnahz/26a60cd28f671a8b7f522e80e75a9aa5
Interacting with the GStreamer pipeline
If you want to interact with GStreamer after it's started (e.g. respond to an event, or dynamically change a pipeline), the command-line GStreamer doesn't really cut it. Instead, here are some options:
- GStreamer Daemon (gstd) - allows setting and updating via a TCP connection
- Snowmix - an open-source live video mixer
- Develop using the GStreamer library, in either C, Python, or C#/.NET
Python with GStreamer
Python is an easy language, so it's no surprise that it's good way to develop using GStreamer.
Some example scripts can be found in the python_examples/ directory.
Other good GStreamer Python resources that I've found:
- Getting started with GStreamer with Python
- Python GStreamer Tutorial
- Function reference
- Including a useful mapping from C
- Nice example script
C/C++ with GStreamer
My favourite reference is Valadoc
Problems or suggestions with this guide?
If you spot anything incorrect or incomplete, reports are welcome, either using issues or pull requests
My GStreamer project
Creating this guide gave me enough GStreamer understanding to make a prototype Brave, a live video editor for the cloud. (Regrettably this prototype has not been updated in a few years.)