Skip to content
/ nmos-cpp Public

An NMOS (Networked Media Open Specifications) Registry and Node in C++ (IS-04, IS-05)

License

Notifications You must be signed in to change notification settings

sony/nmos-cpp

Repository files navigation

An NMOS C++ Implementation Build Status

Introduction

This repository contains an implementation of the AMWA Networked Media Open Specifications in C++, licensed under the terms of the Apache License 2.0.

For more information about AMWA, NMOS and the Networked Media Incubator, please refer to http://amwa.tv/.

  • The nmos module includes implementations of the NMOS Node, Registration and Query APIs, the NMOS Connection API, and so on.
  • The nmos-cpp-registry application provides a simple but functional instance of an NMOS Registration & Discovery System (RDS), utilising the nmos module.
  • The nmos-cpp-node application provides an example NMOS Node, also utilising the nmos module.

The repository structure, and the external dependencies, are outlined in the documentation. Some information about the overall design of nmos-cpp is also included in the architecture documentation.

Getting Started With NMOS

The Easy-NMOS starter kit allows the user to launch a simple NMOS setup with minimal installation steps. It relies on a containerized nmos-cpp build to provide an NMOS Registry and a virtual NMOS Node in a Docker Compose network, along with the AMWA NMOS Testing Tool and supporting services.

Alternatively, it is possible to install a pre-built package for many platforms. See the instructions for installing with Conan.

Getting Started For Developers

Easy-NMOS is also a great first way to explore the relationship between NMOS services before building nmos-cpp for yourself.

The codebase is intended to be portable, and the nmos-cpp CMake project can be built on at least Linux, Windows and macOS.

After setting up the dependencies, follow these instructions to build and install nmos-cpp on your platform, and run the test suite.

Next, try out the registry and node applications in the tutorial.

An nmos-cpp Conan package is occasionally published at Conan Center Index.

Agile Development

JT-NM Tested 03/20 NMOS & TR-1001-1

The nmos-cpp applications, like the NMOS Specifications, are intended to be always ready, but steadily developing. They have been successfully tested in many AMWA Networked Media Incubator workshops, and are used as reference NMOS implementations in the JT-NM Tested programme. Several vendors have deployed JT-NM Tested badged products, using nmos-cpp, to their customers.

Build Status

The following configurations, defined by the build-test jobs, are built and unit tested automatically via continuous integration.

Platform Version Build Options Test Options
Linux Ubuntu 22.04 (GCC 11.2.0) Avahi Secure Communications
Multicast DNS-SD
Linux Ubuntu 22.04 (GCC 11.2.0) Avahi Secure Communications
IS-10 Authorization
Multicast DNS-SD
Linux Ubuntu 20.04 (GCC 9.4.0) Avahi Secure Communications
IS-10 Authorization
Multicast DNS-SD
Linux Ubuntu 20.04 (GCC 9.4.0) Avahi Secure Communications
IS-10 Authorization
Unicast DNS-SD
Linux Ubuntu 20.04 (GCC 9.4.0) mDNSResponder Secure Communications
IS-10 Authorization
Multicast DNS-SD
Linux Ubuntu 14.04 (GCC 4.8.4) mDNSResponder, not using Conan Secure Communications
IS-10 Authorization
Multicast DNS-SD
Windows Server 2019 (VS 2019) Bonjour (mDNSResponder), WinHTTP Secure Communications
IS-10 Authorization
Multicast DNS-SD
Windows Server 2022 (VS 2022) Bonjour (mDNSResponder), ASIO Secure Communications
Multicast DNS-SD
Windows Server 2022 (VS 2022) Bonjour (mDNSResponder), ASIO Secure Communications
IS-10 Authorization
Multicast DNS-SD
macOS 11 (AppleClang 13.0) Bonjour (mDNSResponder) Secure Communications
IS-10 Authorization
Multicast DNS-SD

The AMWA NMOS API Testing Tool is automatically run against the APIs of the nmos-cpp-node and nmos-cpp-registry applications.

Test Suite/Status: BCP-003-01 IS-04-01 IS-04-02 IS-04-03 IS-05-01 IS-05-02 IS-07-01 IS-07-02 IS-08-01 IS-08-02 IS-09-01 IS-09-02

Recent Activity

The implementation is designed to be extended. Development is ongoing, following the evolution of the NMOS specifications in the AMWA Networked Media Incubator.

Recent activity on the project (newest first):

  • Added support for the IS-12 NMOS Control Protocol
  • Update to Conan 2; Conan 1.X is no longer supported
  • Added support for IS-10 Authorization
  • Added support for HSTS and OCSP stapling
  • Added support for BCP-006-01 v1.0-dev, which can be demonstrated with nmos-cpp-node by using "video_type": "video/jxsv"
  • Updates to the GitHub Actions build-test workflow for better coverage of platforms and to include unicast DNS-SD tests
  • Regular Conan Center Index releases (see nmos-cpp recipe)
  • Update to RQL implementation to support advanced queries for string values containing '.'
  • Improvements to the SDP parser/generator
  • Improvements to Conan/CMake build, including updates to preferred version of dependencies such as Boost and OpenSSL
  • Prepared a basic Conan recipe for building nmos-cpp, in Sandbox/conan-recipe
  • Refactored the CMake build to make it easier to use nmos-cpp from another project, demonstrated by Sandbox/my-nmos-node
  • Added support for BCP-004-01 Receiver Capabilities
  • Switched CI testing to run the nmos-cpp applications and the AMWA NMOS Testing Tool with secure communication (TLS) enabled, as per BCP-003-01
  • Added support for the IS-08 Channel Mapping API
  • JT-NM Tested 03/20 badge
  • Switched Continous Integration to GitHub Actions and added Windows and macOS to the tested platforms
  • Extended the nmos-cpp-node to include mock senders/receivers of audio and ancillary data and offer some additional configuration settings
  • Simplified the build process to use Conan by default to download most of the dependencies
  • Added support in the Node implementation for discovery of, and interaction with, a System API, as required for compliance with TR-1001-1
  • Changed the implementation of nmos::tai_clock with the effect that it may no longer be monotonic
  • Added a minimum viable LLDP implementation (enabled by a CMake configuration option) to support sending and receiving the IS-04 v1.3 additional network data for Nodes required by IS-06
  • Update the IS-05 schemas to correct an unfortunate bug in the IS-05 v1.1 spec (see AMWA-TV/nmos-device-connection-management#99)
  • Attempt to determine the DNS domain name automatically if not explicitly specified, for TR-1001-1
  • Travis CI integration
  • Updates for resolutions of specification issues in IS-04 v1.3 and IS-05 v1.1 final drafts
  • Experimental support for human-readable HTML rendering of NMOS responses
  • Experimental support for the rehomed (work in progress) IS-09 System API (originally defined in JT-NM TR-1001-1:2018 Annex A)
  • IS-07 Events API and Events WebSocket API implementation and updated nmos-cpp-node example
  • Experimental support for secure communications (HTTPS, WSS)
  • Bug fixes (with test cases added to the AMWA NMOS API Testing Tool)
  • Support for running nmos-cpp applications with forward/reverse proxies
  • Experimental support for JT-NM TR-1001-1 System API
  • Instructions for cross-compiling for the Raspberry Pi
  • Instructions for running the official AMWA NMOS API Testing Tool
  • Updates to build instructions and required dependencies
  • Simpler creation/processing of the types of SDP files required to support ST 2110 and ST 2022-7
  • Simpler run-time configuration of the nmos-cpp-node and nmos-cpp-registry settings
  • Some documentation about the overall design of nmos-cpp for developers
  • An implementation of the Connection API
  • A fix for a potential memory leak
  • An SDP parser/generator (to/from a JSON representation)
  • JSON Schema validation in the Registration API and the Query API
  • Cross-platform build support using CMake
  • An initial release of the nmos-cpp-node example application
  • Back-end enhancements as part of the NMOS Scalability Activity

Contributing

We welcome bug reports, feature requests and contributions to the implementation and documentation. Please have a look at the simple Contribution Guidelines.

Thank you for your interest!

This project was formerly known as sea-lion.

About

An NMOS (Networked Media Open Specifications) Registry and Node in C++ (IS-04, IS-05)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages