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

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 nmos-cpp on your platform, and run the test suite.

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

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 continually 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 Configuration Options
Linux Ubuntu 18.04 (GCC 7.5.0) Avahi
Linux Ubuntu 18.04 (GCC 7.5.0) mDNSResponder
Linux Ubuntu 14.04 (GCC 4.8.4) mDNSResponder, not using Conan
Windows Server 2019 (VS 2019) Bonjour (mDNSResponder)
macOS 10.15 (AppleClang 11.0) (Experimental)

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: IS-04-01 IS-04-02 IS-04-03 IS-05-01 IS-05-02 IS-07-01 IS-07-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):

  • 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