No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
= GStreamer Daemon = |
= GStreamer Daemon (GstD) = |
||
'''GStreamer Daemon ( |
'''GStreamer Daemon (GstD)''' is a service that enables '''remote control of GStreamer pipelines''' via <code>gst-client</code>. It allows: |
||
* '''Remote pipeline management''' – Start, stop, modify pipelines dynamically. |
|||
* '''Multi-client access''' – Multiple users can control pipelines simultaneously. |
|||
* '''Embedded & network control''' – Use <code>gst-client</code> to manage pipelines over TCP or UNIX sockets. |
|||
* '''Low-latency communication''' – Ideal for '''real-time media applications'''. |
|||
== ⚙️ GStreamer Daemon (`gstd`) Dependencies == |
|||
== 📌 Features == |
|||
Before installing GStreamer Daemon, ensure you have the required dependencies. |
|||
* Remote control over pipelines via TCP/IP. |
|||
* Supports multiple pipelines simultaneously. |
|||
* JSON-RPC based API for pipeline manipulation. |
|||
=== 🛠️ Build System & Development Tools === |
|||
== 🔗 How It Works == |
|||
<pre> |
|||
GStreamer Daemon acts as a server that listens for commands over a network interface. It provides an easy way to create, modify, and control media pipelines remotely. |
|||
sudo apt install -y meson ninja-build git |
|||
</pre> |
|||
=== 🎞️ GStreamer Core & Plugins === |
|||
== 💡 Use Cases == |
|||
<pre> |
|||
*Embedded Systems – Remote video processing without local UI. |
|||
sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-base |
|||
*AI & Computer Vision – Dynamically changing streams based on AI inference. |
|||
</pre> |
|||
*Cloud Streaming – Managing video pipelines in real-time on cloud-based servers. |
|||
=== 📦 Additional GStreamer Plugins === |
|||
== 🚀 Example Commands == |
|||
<pre> |
|||
Create and run a pipeline: |
|||
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \ |
|||
<syntaxhighlight lang="bash"> |
|||
gstreamer1.0-plugins-ugly gstreamer1.0-libav |
|||
gst-client pipeline_create test_pipeline "videotestsrc ! autovideosink" |
|||
</pre> |
|||
gst-client play test_pipeline |
|||
</syntaxhighlight> |
|||
=== 🏗️ GStreamer Development Libraries === |
|||
Stop the pipeline: |
|||
<pre> |
|||
<syntaxhighlight lang="bash"> |
|||
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev |
|||
gst-client stop test_pipeline |
|||
</pre> |
|||
</syntaxhighlight> |
|||
=== 🔗 GLib & D-Bus Dependencies === |
|||
== 📖 References == |
|||
<pre> |
|||
* [https://gstreamer.freedesktop.org/documentation/gst-daemon/ GStreamer Daemon Documentation] |
|||
sudo apt install -y libglib2.0-dev libdbus-1-dev libgirepository1.0-dev python3-gi |
|||
</pre> |
|||
=== 🌐 Daemon & Networking Libraries === |
|||
<pre> |
|||
sudo apt install -y libdaemon-dev libsoup2.4-dev |
|||
</pre> |
|||
=== 📄 JSON & Editing Support === |
|||
<pre> |
|||
sudo apt install -y libjansson-dev libedit-dev |
|||
</pre> |
|||
=== 🐛 Debugging Tools === |
|||
<pre> |
|||
sudo apt install -y valgrind |
|||
</pre> |
|||
== 🏗️ Installing and Running GStreamer Daemon == |
|||
To install GStreamer Daemon: |
|||
<pre> |
|||
git clone https://gitlab.freedesktop.org/gstreamer/gstd.git |
|||
cd gstd |
|||
meson build |
|||
ninja -C build |
|||
sudo ninja -C build install |
|||
</pre> |
|||
Verify installation: |
|||
<pre> |
|||
gstd --version |
|||
</pre> |
|||
To start the daemon: |
|||
<pre> |
|||
gstd -e --tcp-base-port=5000 |
|||
</pre> |
|||
'''Note:''' The <code>-e</code> flag enables '''execution mode''', and <code>--tcp-base-port</code> sets the '''TCP control port'''. |
|||
== 🎛️ <code>gst-client</code> Options == |
|||
<code>gst-client</code> is used to interact with <code>gstd</code>. It provides multiple options: |
|||
=== 💻 Basic Commands === |
|||
* '''<code>gst-client -h, --help</code>''' → Show help options. |
|||
* '''<code>gst-client -v, --version</code>''' → Print the current version of <code>gstd-client</code>. |
|||
* '''<code>gst-client -i, --interactive</code>''' → Enter interactive mode after executing commands. |
|||
* '''<code>gst-client -f script</code>''' → Execute commands from a file. |
|||
=== 🔗 Connection Options === |
|||
* '''<code>gst-client -p, --tcp-port=PORT</code>''' → Connect via TCP (default: <code>5000</code>). |
|||
* '''<code>gst-client -a, --tcp-address=ADDRESS</code>''' → Specify the IP address (default: <code>localhost</code>). |
|||
* '''<code>gst-client -u, --unix</code>''' → Use UNIX socket instead of TCP. |
|||
* '''<code>gst-client -b, --unix-base-path=PATH</code>''' → Set UNIX socket path (default: <code>gstd_unix_socket</code>). |
|||
== 📡 Controlling GStreamer Daemon with <code>gst-client</code> == |
|||
Each command follows this format: |
|||
<pre> |
|||
gst-client COMMAND pipeline_name "PIPELINE_DESCRIPTION" |
|||
</pre> |
|||
=== 🎞️ Creating a Pipeline === |
|||
<pre> |
|||
gst-client pipeline_create test_pipeline "videotestsrc ! videoconvert ! autovideosink" |
|||
</pre> |
|||
'''Parameters:''' |
|||
* '''pipeline_create''' → Creates a new pipeline. |
|||
* '''test_pipeline''' → Pipeline name (identifier). |
|||
* '''Pipeline elements:''' |
|||
- '''videotestsrc''' → Generates test video. |
|||
- '''videoconvert''' → Ensures format compatibility. |
|||
- '''autovideosink''' → Displays video output. |
|||
'''Use case:''' Used for '''testing video playback'''. |
|||
=== ▶️ Starting a Pipeline === |
|||
<pre> |
|||
gst-client pipeline_play test_pipeline |
|||
</pre> |
|||
'''Use case:''' Runs an existing '''paused''' pipeline. |
|||
=== ⏹️ Stopping a Pipeline === |
|||
<pre> |
|||
gst-client pipeline_stop test_pipeline |
|||
</pre> |
|||
'''Use case:''' Pauses '''pipeline execution''' without deleting it. |
|||
=== ❌ Deleting a Pipeline === |
|||
<pre> |
|||
gst-client pipeline_delete test_pipeline |
|||
</pre> |
|||
'''Use case:''' Frees up '''resources''' when a pipeline is no longer needed. |
|||
=== 📡 Example: Receiving an RTP Stream === |
|||
<pre> |
|||
gst-client pipeline_create udp_receiver "udpsrc port=5004 ! application/x-rtp, encoding-name=H264 ! rtpjitterbuffer latency=100 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false" |
|||
</pre> |
|||
'''Use case:''' Receives '''real-time RTP video''' via '''UDP port 5004'''. |
|||
== 📊 Summary == |
|||
GStreamer Daemon enables '''remote control of pipelines''' via <code>gst-client</code>. |
|||
{| class="wikitable" |
|||
|+ '''GStreamer Daemon Key Features''' |
|||
|- |
|||
! Feature !! Description |
|||
|- |
|||
| '''Remote Pipeline Control''' || Manage GStreamer pipelines via <code>gst-client</code> |
|||
|- |
|||
| '''Dynamic Modification''' || Add/remove elements in real-time |
|||
|- |
|||
| '''Multi-Client Access''' || Multiple users can control pipelines |
|||
|- |
|||
| '''Embedded System Friendly''' || Works efficiently with TCP and UNIX socket connections |
|||
|} |
Revision as of 12:51, 24 February 2025
GStreamer Daemon (GstD)
GStreamer Daemon (GstD) is a service that enables remote control of GStreamer pipelines via gst-client
. It allows:
- Remote pipeline management – Start, stop, modify pipelines dynamically.
- Multi-client access – Multiple users can control pipelines simultaneously.
- Embedded & network control – Use
gst-client
to manage pipelines over TCP or UNIX sockets. - Low-latency communication – Ideal for real-time media applications.
⚙️ GStreamer Daemon (`gstd`) Dependencies
Before installing GStreamer Daemon, ensure you have the required dependencies.
🛠️ Build System & Development Tools
sudo apt install -y meson ninja-build git
🎞️ GStreamer Core & Plugins
sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-base
📦 Additional GStreamer Plugins
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \ gstreamer1.0-plugins-ugly gstreamer1.0-libav
🏗️ GStreamer Development Libraries
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
🔗 GLib & D-Bus Dependencies
sudo apt install -y libglib2.0-dev libdbus-1-dev libgirepository1.0-dev python3-gi
🌐 Daemon & Networking Libraries
sudo apt install -y libdaemon-dev libsoup2.4-dev
📄 JSON & Editing Support
sudo apt install -y libjansson-dev libedit-dev
🐛 Debugging Tools
sudo apt install -y valgrind
🏗️ Installing and Running GStreamer Daemon
To install GStreamer Daemon:
git clone https://gitlab.freedesktop.org/gstreamer/gstd.git cd gstd meson build ninja -C build sudo ninja -C build install
Verify installation:
gstd --version
To start the daemon:
gstd -e --tcp-base-port=5000
Note: The -e
flag enables execution mode, and --tcp-base-port
sets the TCP control port.
🎛️ gst-client
Options
gst-client
is used to interact with gstd
. It provides multiple options:
💻 Basic Commands
gst-client -h, --help
→ Show help options.gst-client -v, --version
→ Print the current version ofgstd-client
.gst-client -i, --interactive
→ Enter interactive mode after executing commands.gst-client -f script
→ Execute commands from a file.
🔗 Connection Options
gst-client -p, --tcp-port=PORT
→ Connect via TCP (default:5000
).gst-client -a, --tcp-address=ADDRESS
→ Specify the IP address (default:localhost
).gst-client -u, --unix
→ Use UNIX socket instead of TCP.gst-client -b, --unix-base-path=PATH
→ Set UNIX socket path (default:gstd_unix_socket
).
📡 Controlling GStreamer Daemon with gst-client
Each command follows this format:
gst-client COMMAND pipeline_name "PIPELINE_DESCRIPTION"
🎞️ Creating a Pipeline
gst-client pipeline_create test_pipeline "videotestsrc ! videoconvert ! autovideosink"
Parameters:
- pipeline_create → Creates a new pipeline.
- test_pipeline → Pipeline name (identifier).
- Pipeline elements:
- videotestsrc → Generates test video. - videoconvert → Ensures format compatibility. - autovideosink → Displays video output.
Use case: Used for testing video playback.
▶️ Starting a Pipeline
gst-client pipeline_play test_pipeline
Use case: Runs an existing paused pipeline.
⏹️ Stopping a Pipeline
gst-client pipeline_stop test_pipeline
Use case: Pauses pipeline execution without deleting it.
❌ Deleting a Pipeline
gst-client pipeline_delete test_pipeline
Use case: Frees up resources when a pipeline is no longer needed.
📡 Example: Receiving an RTP Stream
gst-client pipeline_create udp_receiver "udpsrc port=5004 ! application/x-rtp, encoding-name=H264 ! rtpjitterbuffer latency=100 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false"
Use case: Receives real-time RTP video via UDP port 5004.
📊 Summary
GStreamer Daemon enables remote control of pipelines via gst-client
.
Feature | Description |
---|---|
Remote Pipeline Control | Manage GStreamer pipelines via gst-client
|
Dynamic Modification | Add/remove elements in real-time |
Multi-Client Access | Multiple users can control pipelines |
Embedded System Friendly | Works efficiently with TCP and UNIX socket connections |