generated from AMWA-TV/info-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f5a372e
commit 50b18f1
Showing
2 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# NMOS GStreamer Plugins | ||
|
||
This repository contains GStreamer plugins that integrate AMWA NMOS functionality into your pipelines. | ||
Specifically, it provides an **NMOS Audio Receiver** (`nmosaudioreceiver`), **NMOS Video Receiver** (`nmosvideoreceiver`), and **NMOS Sender** (`nmossender`) that can dynamically receive and send audio/video streams configured by the NMOS control panel. | ||
|
||
## Table of Contents | ||
|
||
1. [Overview](#overview) | ||
2. [Building from Source](#building-from-source) | ||
3. [Using the Plugin](#using-the-plugin) | ||
- [Environment Variables](#environment-variables) | ||
- [Inspecting the Plugin](#inspecting-the-plugin) | ||
- [Example Pipelines](#example-pipelines) | ||
- [NMOS Interface](#nmos-interface) | ||
4. [Notes and Troubleshooting](#notes-and-troubleshooting) | ||
5. [License](#license) | ||
|
||
--- | ||
|
||
## Overview | ||
|
||
The **NMOS plugins** communicate with an NMOS registry (using the AMWA [IS-04](https://specs.amwa.tv/is-04/) and [IS-05](https://specs.amwa.tv/is-05/) APIs) to automatically configure raw video/audio streams. | ||
|
||
## Building from Source | ||
|
||
To build the plugin, follow the build steps in the [**README**](/) inside the root directory of this project. The binary files for the plugin will then be created in `/build/Release/plugins/`. | ||
|
||
## Using the Plugin | ||
|
||
### Environment Variables | ||
|
||
Once you've compiled the plugins, you can add them to your local GStreamer plugin folder or set the environment variable `GST_PLUGIN_PATH` to the directory where the binary files are saved. | ||
|
||
i.e. | ||
|
||
```bash | ||
export GST_PLUGIN_PATH=/home/gst-plugins/ | ||
``` | ||
|
||
### Inspecting the Plugin | ||
|
||
When using these plugins, you can inspect them along with all the properties you can change, capabilities, and info with the following command: | ||
|
||
```bash | ||
gst-inspect-1.0 nmos(sender/videoreceiver/audioreceiver) | ||
``` | ||
|
||
Some of the more important properties to change are as follows: | ||
|
||
| Property | Description | | ||
|------------------------------|-----------------------------------------------------------| | ||
| `node-id` | NMOS Node ID (UUID) | | ||
| `node-config-file-location` | Path to the node configuration JSON file (String) | | ||
| `device-id` | NMOS Device ID (UUID) | | ||
| `device-label` | A label for the NMOS Device (String) | | ||
| `device-description` | A description of the NMOS Device (String) | | ||
| `receiver-id` | NMOS Receiver ID (UUID) | | ||
| `receiver-label` | A label for the NMOS Receiver (String) | | ||
| `receiver-description` | A description of the NMOS Receiver (String) | | ||
| `destination-address` | IP address for the outgoing/incoming RTP stream (String) | | ||
|
||
**Important Note:** Currently, the node fields aren't configurable by properties but instead by a JSON file. An example can be found at `/cpp/demos/config/`. | ||
|
||
### Example Pipelines | ||
----- | ||
#### Sender (Audio): | ||
```bash | ||
gst-launch-1.0 audiotestsrc is-live=true wave=square ! audio/x-raw, format=S24BE, rate=48000, channels=2, layout=interleaved ! nmossender destination-address="192.168.1.1" destination-port=5004 | ||
``` | ||
|
||
#### Audio Receiver: | ||
```bash | ||
gst-launch-1.0 -v nmosaudioreceiver destination-address="192.168.1.1" receiver-id="9dd4cb3e-7d28-411d-9939-b8e439bd8c2a" ! queue ! audioconvert ! wavescope ! ximagesink sync=false | ||
``` | ||
----- | ||
|
||
#### Sender (Video): | ||
```bash | ||
gst-launch-1.0 videotestsrc is-live=true timestamp-offset=1 pattern=ball ! videoconvert ! "video/x-raw, format=UYVP, sampling=YCbCr-4:2:2, width=460, height=240, clock-rate=9000, framerate=50/1" ! nmossender destination-address="192.168.1.1" source-address="192.168.1.1" destination-port=9999 | ||
``` | ||
#### Video Receiver: | ||
```bash | ||
gst-launch-1.0 -v nmosvideoreceiver destination-address="192.168.1.1" receiver-id="9dd4cb3e-7d28-411d-9939-b8e439bd8c2a" ! queue ! videoconvert ! autovideosink sync=false | ||
``` | ||
----- | ||
### NMOS Interface | ||
|
||
The NMOS Interface allows users to manage senders and receivers through a graphical user interface. It provides an overview of active streams, transport methods, and detailed configurations. | ||
|
||
The NMOS page can be accessed through the following link ```http://localhost:8010/admin/``` | ||
|
||
- **Senders Management**: Displays active senders, transport type (e.g., RTP Multicast), and allows toggling activation. | ||
- **Receivers Management**: Lists available receivers, their bindings, supported media formats, and current connections. | ||
- **Detailed View**: Clicking on a node, device, sender or receiver provides detailed configuration options, including transport settings and associated flows. | ||
- **Connection Setup**: Users can establish connections between senders and receivers through a simple UI inside the receiver page, where they can freely connect and disconnect them. | ||
|
||
Note: When changing the parameters inside the connect tab, be sure to activate the activation mode ```activate_immediate``` if you want to change the connection dynamically. | ||
|
||
## Notes and Troubleshooting | ||
|
||
- **State Management:** The plugin automatically transitions to PLAYING when valid SDP data is received. If the receiver is disabled from the NMOS registry side, the pipeline tears down its internal elements. | ||
- **Flush and Dynamic Reconfiguration:** If you dynamically change streams at runtime (e.g., the NMOS registry activates a new source), the plugin will remove old elements and construct new ones on the fly without restarting the entire pipeline. | ||
- **Verbose Debug:** If you need to see more logs, you can enable GStreamer debug categories: | ||
|
||
```bash | ||
GST_DEBUG=nmosaudioreceiver:5 gst-launch-1.0 nmosaudioreceiver ... | ||
``` | ||
|
||
- **Current Issues:** When turning off the sender and then reconnecting it to the same receiver without resetting it, there might be a slight delay in video streams before the image unfreezes. | ||
|
||
### Dependencies | ||
|
||
- GStreamer (1.18+ recommended) | ||
|
||
## License | ||
|
||
This project is licensed under the Apache 2.0 License. | ||
Please see the LICENSE file on the root directory for more details. |