From ProventusNova DeveloperWiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
* '''Low-latency media routing''' – Efficiently stream audio/video between pipelines.
* '''Low-latency media routing''' – Efficiently stream audio/video between pipelines.


== ⚙️ Installing ''gst-interpipe'' ==
== Installing ''gst-interpipe'' ==
Before using Interpipes, ensure you have the required dependencies.
Before using Interpipes, ensure you have the required dependencies.


=== 🛠️ Build System & Development Tools ===
=== Build System & Development Tools ===
<pre>
<pre>
sudo apt install -y meson ninja-build git
sudo apt install -y meson ninja-build git
</pre>
</pre>


=== 🎞️ GStreamer Core & Plugins ===
=== GStreamer Core & Plugins ===
<pre>
<pre>
sudo apt install -y gstreamer1.0-plugins-base
sudo apt install -y gstreamer1.0-plugins-base
</pre>
</pre>


=== 📦 Additional GStreamer Plugins ===
=== Additional GStreamer Plugins ===
<pre>
<pre>
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
Line 24: Line 24:
</pre>
</pre>


=== 🏗️ GStreamer Development Libraries ===
=== GStreamer Development Libraries ===
<pre>
<pre>
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
</pre>
</pre>


=== 📖 Documentation Tools (Optional) ===
=== Documentation Tools (Optional) ===
<pre>
<pre>
sudo apt install -y gtk-doc-tools
sudo apt install -y gtk-doc-tools
Line 35: Line 35:
*(You can disable GTK-Doc with ''-Dgtk_doc=disabled'' in Meson if not needed.)*
*(You can disable GTK-Doc with ''-Dgtk_doc=disabled'' in Meson if not needed.)*


=== 🔗 Installing ''gst-interpipe'' Plugin ===
=== Installing ''gst-interpipe'' Plugin ===
To install the RidgeRun ''gst-interpipe'' plugin:
To install the RidgeRun ''gst-interpipe'' plugin, follow these steps:

==== Clone and Build ====
<pre>
<pre>
git clone https://github.com/RidgeRun/gst-interpipe.git
git clone https://github.com/RidgeRun/gst-interpipe.git
Line 45: Line 47:
</pre>
</pre>


Verify installation:
==== Verify Installation ====
Check if the `interpipesrc` plugin is installed:
<pre>
<pre>
gst-inspect-1.0 interpipesrc
gst-inspect-1.0 interpipesrc
</pre>
</pre>


'''Expected Output:'''
==== Expected Output ====
<code>
<pre>
Factory Details:
Factory Details:
Rank none (0)
Rank none (0)
Long-name Inter pipeline source
Long-name Inter pipeline source
Klass Generic/Source
Klass Generic/Source
Description Source for internal pipeline buffers communication
Description Source for internal pipeline buffers communication
Author Michael Grüner <michael.gruner@ridgerun.com>Plugin Details:
Author Michael Grüner <michael.gruner@ridgerun.com>

Plugin Details:
Name interpipe
Name interpipe
Description Elements to communicate buffers across pipelines
Description Elements to communicate buffers across pipelines
Line 65: Line 70:
Source module gst-interpipe
Source module gst-interpipe
Binary package GstInterpipe
Binary package GstInterpipe
Origin URL http://www.ridgerun.com</code>
Origin URL http://www.ridgerun.com
</pre>


== 🔗 Core Concepts ==
== Core Concepts ==
Interpipes introduce two main elements:
Interpipes introduce two main elements:


Line 80: Line 86:
|}
|}


== 📡 Controlling GStreamer Interpipes with ''gst-client'' ==
== Controlling GStreamer Interpipes with ''gst-client'' ==


Each command follows this format:
Each command follows this format:
Line 88: Line 94:
</pre>
</pre>


=== 🎞️ Creating an Interpipes Source Pipeline ===
=== Creating an Interpipes Source Pipeline ===
<pre>
<pre>
gst-client pipeline_create producer_pipeline "videotestsrc is-live=true ! interpipesink name=sink1"
gst-client pipeline_create producer_pipeline "videotestsrc is-live=true ! interpipesink name=sink1"
Line 100: Line 106:
'''Use case:''' This pipeline '''produces video''' for other pipelines to consume.
'''Use case:''' This pipeline '''produces video''' for other pipelines to consume.


=== 🎞️ Creating an Interpipes Consumer Pipeline ===
=== Creating an Interpipes Consumer Pipeline ===
<pre>
<pre>
gst-client pipeline_create consumer_pipeline "interpipesrc listen-to=sink1 ! videoconvert ! autovideosink"
gst-client pipeline_create consumer_pipeline "interpipesrc listen-to=sink1 ! videoconvert ! autovideosink"
Line 113: Line 119:
'''Use case:''' This pipeline '''consumes''' data from ''sink1''.
'''Use case:''' This pipeline '''consumes''' data from ''sink1''.


=== ▶️ Playing the Producer Pipeline ===
=== Playing the Producer Pipeline ===
<pre>
<pre>
gst-client pipeline_play producer_pipeline
gst-client pipeline_play producer_pipeline
Line 120: Line 126:
'''Use case:''' Starts the producer pipeline.
'''Use case:''' Starts the producer pipeline.


=== ▶️ Playing the Consumer Pipeline ===
=== Playing the Consumer Pipeline ===
<pre>
<pre>
gst-client pipeline_play consumer_pipeline
gst-client pipeline_play consumer_pipeline
Line 127: Line 133:
'''Use case:''' Starts the consumer pipeline.
'''Use case:''' Starts the consumer pipeline.


=== ⏹️ Stopping the Producer Pipeline ===
=== Stopping the Producer Pipeline ===
<pre>
<pre>
gst-client pipeline_stop producer_pipeline
gst-client pipeline_stop producer_pipeline
Line 134: Line 140:
'''Use case:''' Stops the producer without deleting it.
'''Use case:''' Stops the producer without deleting it.


=== ⏹️ Stopping the Consumer Pipeline ===
=== Stopping the Consumer Pipeline ===
<pre>
<pre>
gst-client pipeline_stop consumer_pipeline
gst-client pipeline_stop consumer_pipeline
Line 141: Line 147:
'''Use case:''' Stops the consumer without deleting it.
'''Use case:''' Stops the consumer without deleting it.


=== Deleting the Producer Pipeline ===
=== Deleting the Producer Pipeline ===
<pre>
<pre>
gst-client pipeline_delete producer_pipeline
gst-client pipeline_delete producer_pipeline
Line 148: Line 154:
'''Use case:''' Removes the producer pipeline.
'''Use case:''' Removes the producer pipeline.


=== Deleting the Consumer Pipeline ===
=== Deleting the Consumer Pipeline ===
<pre>
<pre>
gst-client pipeline_delete consumer_pipeline
gst-client pipeline_delete consumer_pipeline
Line 155: Line 161:
'''Use case:''' Removes the consumer pipeline.
'''Use case:''' Removes the consumer pipeline.


== 🔀 Switching Between Interpipes ==
== Switching Between Interpipes ==
Interpipes allow you to dynamically switch sources.
Interpipes allow you to dynamically switch sources.


=== 🎞️ Changing the Consumer Pipeline's Source ===
=== Changing the Consumer Pipeline's Source ===
<pre>
<pre>
gst-client pipeline_create new_source "videotestsrc pattern=ball ! interpipesink name=sink2"
gst-client pipeline_create new_source "videotestsrc pattern=ball ! interpipesink name=sink2"
Line 166: Line 172:
'''Use case:''' The consumer pipeline now '''receives data from ''sink2''''' instead of ''sink1''.
'''Use case:''' The consumer pipeline now '''receives data from ''sink2''''' instead of ''sink1''.


== 🛑 Stopping GStreamer Daemon ==
== Stopping GStreamer Daemon ==
To stop the GStreamer Daemon:
To stop the GStreamer Daemon:
<pre>
<pre>
Line 174: Line 180:
'''Use case:''' Terminates the running ''gstd''.
'''Use case:''' Terminates the running ''gstd''.


== Checking if ''gstd'' is Running ==
== Checking if ''gstd'' is Running ==
To verify if GStreamer Daemon is running:
To verify if GStreamer Daemon is running:
<pre>
<pre>
Line 182: Line 188:
'''Use case:''' Displays ''gstd'' processes if running.
'''Use case:''' Displays ''gstd'' processes if running.


== 📊 Summary ==
== Summary ==
GStreamer Interpipes enable '''seamless pipeline communication''' via '''dynamic linking'''.
GStreamer Interpipes enable '''seamless pipeline communication''' via '''dynamic linking'''.


Line 198: Line 204:
| '''Optimized for Embedded Systems''' || Reduces memory overhead.
| '''Optimized for Embedded Systems''' || Reduces memory overhead.
|}
|}

= 🏗 Need a Solution for Your Project? =
Are you looking for ways to:

✅ Optimize your '''embedded system''' for better performance?

✅ Integrate '''AI and computer vision''' into your products?

✅ Improve '''multimedia processing''' for real-time applications?

✅ Develop a '''robust and scalable''' web platform?

Our team has helped businesses across multiple industries solve these challenges.

📩 '''Let’s collaborate!''' Contact us at '''[support@proventusnova.com](mailto:support@proventusnova.com)''' or visit '''[ProventusNova.com](https://proventusnova.com)''' to discuss your project. -->

Latest revision as of 03:50, 2 March 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, follow these steps:

Clone and Build

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

Verify Installation

Check if the `interpipesrc` plugin is installed:

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.

🏗 Need a Solution for Your Project?

Are you looking for ways to:

✅ Optimize your embedded system for better performance?

✅ Integrate AI and computer vision into your products?

✅ Improve multimedia processing for real-time applications?

✅ Develop a robust and scalable web platform?

Our team has helped businesses across multiple industries solve these challenges.

📩 Let’s collaborate! Contact us at [support@proventusnova.com](mailto:support@proventusnova.com) or visit [ProventusNova.com](https://proventusnova.com) to discuss your project. -->