From ProventusNova DeveloperWiki
No edit summary
Line 1: Line 1:
= GStreamer Interpipes =
= GStreamer Interpipes =
'''GStreamer Interpipes''' is a plugin that enables efficient communication between multiple GStreamer pipelines. It allows sharing buffers, reducing latency, and optimizing resource usage.
'''GStreamer Interpipes''' is a feature from the RidgeRun ''gst-interpipe'' plugin that enables '''dynamic pipeline communication'''. It allows:
* '''Multi-pipeline sharing''' – Pass data between multiple GStreamer pipelines.
* '''Dynamic linking''' – Connect or disconnect pipelines '''without restarting'''.
* '''Low-latency media routing''' – Efficiently stream audio/video between pipelines.


== βš™οΈ Installing ''gst-interpipe'' ==
== πŸ“Œ Features ==
Before using Interpipes, ensure you have the required dependencies.
* Low-latency pipeline communication.
* Supports inter-source and inter-sink elements.
* Dynamically link/unlink pipelines without restarting.


=== πŸ› οΈ Build System & Development Tools ===
== πŸ”— Key Concepts ==
<pre>
Interpipes introduce:
sudo apt install -y meson ninja-build git
* '''interpipesink''' – Acts as a producer of media buffers.
</pre>
* '''interpipesrc''' – Acts as a consumer, receiving data from interpipesink.


=== 🎞️ GStreamer Core & Plugins ===
== πŸ’‘ Use Cases ==
<pre>
* '''Multi-camera setups''' – Combine multiple camera feeds efficiently.
sudo apt install -y gstreamer1.0-plugins-base
* '''Live video processing''' – Apply real-time filters across multiple streams.
</pre>
* '''Edge AI & Computer Vision''' – Process data from multiple sources dynamically.


=== πŸ“¦ Additional GStreamer Plugins ===
== πŸš€ Example Pipeline ==
<pre>
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly gstreamer1.0-libav
</pre>


=== Start a Producer Pipeline ===
=== πŸ—οΈ GStreamer Development Libraries ===
<pre>
<pre>
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
gst-launch-1.0 -e interpipesrc name=src1 is-live=true ! interpipesink name=sink1
</pre>
</pre>


=== Connect a Consumer Pipeline ===
=== πŸ“– Documentation Tools (Optional) ===
<pre>
<pre>
sudo apt install -y gtk-doc-tools
gst-launch-1.0 -e interpipesrc listen-to=sink1 ! autovideosink
</pre>
</pre>
*(You can disable GTK-Doc with ''-Dgtk_doc=disabled'' in Meson if not needed.)*

=== πŸ”— Installing ''gst-interpipe'' Plugin ===
To install the RidgeRun ''gst-interpipe'' plugin:
<pre>
git clone https://github.com/RidgeRun/gst-interpipe.git
cd gst-interpipe
meson build
ninja -C build
sudo ninja -C build install
</pre>

Verify installation:
<pre>
gst-inspect-1.0 interpipesrc
</pre>

'''Expected Output:'''
<code>
Factory Details:
Rank none (0)
Long-name Inter pipeline source
Klass Generic/Source
Description Source for internal pipeline buffers communication
Author Michael GrΓΌner <michael.gruner@ridgerun.com>Plugin Details:
Name interpipe
Description Elements to communicate buffers across pipelines
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstinterpipe.so
Version 1.1.8
License LGPL
Source module gst-interpipe
Binary package GstInterpipe
Origin URL http://www.ridgerun.com</code>

== πŸ”— Core Concepts ==
Interpipes introduce two main elements:

{| class="wikitable"
|+ '''Interpipe Elements'''
|-
! Element !! Description
|-
| '''interpipesink''' || Sends data to other pipelines.
|-
| '''interpipesrc''' || Receives data from ''interpipesink''.
|}

== πŸ“‘ Controlling GStreamer Interpipes with ''gst-client'' ==

Each command follows this format:

<pre>
gst-client COMMAND pipeline_name "PIPELINE_DESCRIPTION"
</pre>

=== 🎞️ Creating an Interpipes Source Pipeline ===
<pre>
gst-client pipeline_create producer_pipeline "videotestsrc is-live=true ! interpipesink name=sink1"
</pre>

'''Parameters:'''
* '''pipeline_create producer_pipeline''' – Creates a new pipeline named ''producer_pipeline''.
* '''videotestsrc is-live=true''' – Generates a '''live''' video test source.
* '''interpipesink name=sink1''' – Creates an Interpipe sink named '''sink1'''.

'''Use case:''' This pipeline '''produces video''' for other pipelines to consume.

=== 🎞️ Creating an Interpipes Consumer Pipeline ===
<pre>
gst-client pipeline_create consumer_pipeline "interpipesrc listen-to=sink1 ! videoconvert ! autovideosink"
</pre>

'''Parameters:'''
* '''pipeline_create consumer_pipeline''' – Creates a new pipeline named ''consumer_pipeline''.
* '''interpipesrc listen-to=sink1''' – Reads data from '''sink1'''.
* '''videoconvert''' – Ensures format compatibility.
* '''autovideosink''' – Displays the received video.

'''Use case:''' This pipeline '''consumes''' data from ''sink1''.

=== ▢️ Playing the Producer Pipeline ===
<pre>
gst-client pipeline_play producer_pipeline
</pre>

'''Use case:''' Starts the producer pipeline.

=== ▢️ Playing the Consumer Pipeline ===
<pre>
gst-client pipeline_play consumer_pipeline
</pre>

'''Use case:''' Starts the consumer pipeline.

=== ⏹️ Stopping the Producer Pipeline ===
<pre>
gst-client pipeline_stop producer_pipeline
</pre>

'''Use case:''' Stops the producer without deleting it.

=== ⏹️ Stopping the Consumer Pipeline ===
<pre>
gst-client pipeline_stop consumer_pipeline
</pre>

'''Use case:''' Stops the consumer without deleting it.

=== ❌ Deleting the Producer Pipeline ===
<pre>
gst-client pipeline_delete producer_pipeline
</pre>

'''Use case:''' Removes the producer pipeline.

=== ❌ Deleting the Consumer Pipeline ===
<pre>
gst-client pipeline_delete consumer_pipeline
</pre>

'''Use case:''' Removes the consumer pipeline.

== πŸ”€ Switching Between Interpipes ==
Interpipes allow you to dynamically switch sources.

=== 🎞️ Changing the Consumer Pipeline's Source ===
<pre>
gst-client pipeline_create new_source "videotestsrc pattern=ball ! interpipesink name=sink2"
gst-client pipeline_set consumer_pipeline "interpipesrc listen-to=sink2 ! videoconvert ! autovideosink"
</pre>

'''Use case:''' The consumer pipeline now '''receives data from ''sink2''''' instead of ''sink1''.

== πŸ›‘ Stopping GStreamer Daemon ==
To stop the GStreamer Daemon:
<pre>
gstd -k
</pre>

'''Use case:''' Terminates the running ''gstd''.

== βœ… Checking if ''gstd'' is Running ==
To verify if GStreamer Daemon is running:
<pre>
ps aux | grep gstd
</pre>

'''Use case:''' Displays ''gstd'' processes if running.

== πŸ“Š Summary ==
GStreamer Interpipes enable '''seamless pipeline communication''' via '''dynamic linking'''.


{| class="wikitable"
== πŸ“– References ==
|+ '''GStreamer Interpipes Key Features'''
* [https://gstreamer.freedesktop.org/documentation/?gi-language=c GStreamer Documentation]
|-
! Feature !! Description
|-
| '''Pipeline Communication''' || Share data across multiple pipelines.
|-
| '''Dynamic Source Switching''' || Change data sources on the fly.
|-
| '''Low Latency''' || Efficient buffer sharing for real-time applications.
|-
| '''Optimized for Embedded Systems''' || Reduces memory overhead.
|}

Revision as of 13:16, 24 February 2025

GStreamer Interpipes

GStreamer Interpipes is a feature from the RidgeRun gst-interpipe plugin that enables dynamic pipeline communication. It allows:

  • Multi-pipeline sharing – Pass data between multiple GStreamer pipelines.
  • Dynamic linking – Connect or disconnect pipelines without restarting.
  • Low-latency media routing – Efficiently stream audio/video between pipelines.

βš™οΈ Installing gst-interpipe

Before using Interpipes, 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-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

πŸ“– Documentation Tools (Optional)

sudo apt install -y gtk-doc-tools
  • (You can disable GTK-Doc with -Dgtk_doc=disabled in Meson if not needed.)*

πŸ”— Installing gst-interpipe Plugin

To install the RidgeRun gst-interpipe plugin:

git clone https://github.com/RidgeRun/gst-interpipe.git
cd gst-interpipe
meson build
ninja -C build
sudo ninja -C build install

Verify installation:

gst-inspect-1.0 interpipesrc

Expected Output:

 Factory Details:
 Rank                     none (0)
 Long-name                Inter pipeline source
 Klass                    Generic/Source
 Description              Source for internal pipeline buffers communication
 Author                   Michael GrΓΌner <michael.gruner@ridgerun.com>Plugin Details:
 Name                     interpipe
 Description              Elements to communicate buffers across pipelines
 Filename                 /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstinterpipe.so
 Version                  1.1.8
 License                  LGPL
 Source module            gst-interpipe
 Binary package           GstInterpipe
 Origin URL               http://www.ridgerun.com

πŸ”— Core Concepts

Interpipes introduce two main elements:

Interpipe Elements
Element Description
interpipesink Sends data to other pipelines.
interpipesrc Receives data from interpipesink.

πŸ“‘ Controlling GStreamer Interpipes with gst-client

Each command follows this format:

gst-client COMMAND pipeline_name "PIPELINE_DESCRIPTION"

🎞️ Creating an Interpipes Source Pipeline

gst-client pipeline_create producer_pipeline "videotestsrc is-live=true ! interpipesink name=sink1"

Parameters:

  • pipeline_create producer_pipeline – Creates a new pipeline named producer_pipeline.
  • videotestsrc is-live=true – Generates a live video test source.
  • interpipesink name=sink1 – Creates an Interpipe sink named sink1.

Use case: This pipeline produces video for other pipelines to consume.

🎞️ Creating an Interpipes Consumer Pipeline

gst-client pipeline_create consumer_pipeline "interpipesrc listen-to=sink1 ! videoconvert ! autovideosink"

Parameters:

  • pipeline_create consumer_pipeline – Creates a new pipeline named consumer_pipeline.
  • interpipesrc listen-to=sink1 – Reads data from sink1.
  • videoconvert – Ensures format compatibility.
  • autovideosink – Displays the received video.

Use case: This pipeline consumes data from sink1.

▢️ Playing the Producer Pipeline

gst-client pipeline_play producer_pipeline

Use case: Starts the producer pipeline.

▢️ Playing the Consumer Pipeline

gst-client pipeline_play consumer_pipeline

Use case: Starts the consumer pipeline.

⏹️ Stopping the Producer Pipeline

gst-client pipeline_stop producer_pipeline

Use case: Stops the producer without deleting it.

⏹️ Stopping the Consumer Pipeline

gst-client pipeline_stop consumer_pipeline

Use case: Stops the consumer without deleting it.

❌ Deleting the Producer Pipeline

gst-client pipeline_delete producer_pipeline

Use case: Removes the producer pipeline.

❌ Deleting the Consumer Pipeline

gst-client pipeline_delete consumer_pipeline

Use case: Removes the consumer pipeline.

πŸ”€ Switching Between Interpipes

Interpipes allow you to dynamically switch sources.

🎞️ Changing the Consumer Pipeline's Source

gst-client pipeline_create new_source "videotestsrc pattern=ball ! interpipesink name=sink2"
gst-client pipeline_set consumer_pipeline "interpipesrc listen-to=sink2 ! videoconvert ! autovideosink"

Use case: The consumer pipeline now receives data from sink2 instead of sink1.

πŸ›‘ Stopping GStreamer Daemon

To stop the GStreamer Daemon:

gstd -k

Use case: Terminates the running gstd.

βœ… Checking if gstd is Running

To verify if GStreamer Daemon is running:

ps aux | grep gstd

Use case: Displays gstd processes if running.

πŸ“Š Summary

GStreamer Interpipes enable seamless pipeline communication via dynamic linking.

GStreamer Interpipes Key Features
Feature Description
Pipeline Communication Share data across multiple pipelines.
Dynamic Source Switching Change data sources on the fly.
Low Latency Efficient buffer sharing for real-time applications.
Optimized for Embedded Systems Reduces memory overhead.