Giter VIP home page Giter VIP logo

gst-plugin-ndi's Introduction

GStreamer NDI Plugin for Linux

Compiled and tested with NDI SDK 3.5, 3.8, 4.0 and 4.1

This is a plugin for the GStreamer multimedia framework that allows GStreamer to receive a stream from a NDI source. This plugin has been developed by Teltek and was funded by the University of the Arts London and The University of Manchester.

Currently the plugin has two source elements, ndivideosrc to get video from the stream and ndiaudiosrc for audio. By just providing the name or the ip of the stream, all the information required from the stream is picked up automatically, such as resolution, framerate, audio channels, ...

Some examples of how to use these elements from the command line:

#Information about the elements
gst-inspect-1.0 ndi
gst-inspect-1.0 ndivideosrc
gst-inspect-1.0 ndiaudiosrc

#Video pipeline
gst-launch-1.0 ndivideosrc ndi-name="GC-DEV2 (OBS)" ! autovideosink
#Audio pipeline
gst-launch-1.0 ndiaudiosrc ndi-name="GC-DEV2 (OBS)" ! autoaudiosink

#Video and audio pipeline
gst-launch-1.0 ndivideosrc ndi-name="GC-DEV2 (OBS)" ! autovideosink ndiaudiosrc ndi-name="GC-DEV2 (OBS)" ! autoaudiosink

Feel free to contribute to this project. Some ways you can contribute are:

  • Testing with more hardware and software and reporting bugs
  • Doing pull requests.

Compilation of the NDI element

To compile the NDI element it's necessary to install Rust, the NDI SDK and the following packages for gstreamer:

apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
      gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
      gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
      gstreamer1.0-libav libgstrtspserver-1.0-dev

To install the required NDI library there are two options:

  1. Download NDI SDK from NDI website and move the library to the correct location.
  2. Use a deb package made by the community. Thanks to NDI plugin for OBS.

To install Rust, you can follow their documentation: https://www.rust-lang.org/en-US/install.html

Once all requirements are met, you can build the plugin by executing the following command from the project root folder:

cargo build
export GST_PLUGIN_PATH=`pwd`/target/debug
gst-inspect-1.0 ndi

By defult GStreamer 1.16 is required, to use only GStreamer 1.12 instead of 1.16, pass --disable-default-features to cargo. Only a subset of video formats is supported with this GStreamer version.

If all went ok, you should see info related to the NDI element. To make the plugin available without using GST_PLUGIN_PATH it's necessary to copy the plugin to the gstreamer plugins folder.

cargo build --release
sudo install -o root -g root -m 644 target/release/libgstndi.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
sudo ldconfig
gst-inspect-1.0 ndi

More info about GStreamer plugins written in Rust:

https://gitlab.freedesktop.org/gstreamer/gstreamer-rs https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs

License

This plugin is licensed under the LGPL - see the LICENSE file for details

Acknowledgments

  • University of the Arts London and The University of Manchester.
  • Sebastian Dröge (@sdroege).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.