From ProventusNova DeveloperWiki
No edit summary
No edit summary
Line 1: Line 1:
= GStreamer Daemon =
= GStreamer Daemon (GstD) =
'''GStreamer Daemon (gst-daemon)''' is a service that allows remote control and management of GStreamer pipelines using a JSON-RPC API. This enables dynamic pipeline creation, modification, and execution without restarting applications.
'''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 of gstd-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.

GStreamer Daemon Key Features
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