This repository contains an implementation of the AMWA Networked Media Open Specifications in C++, licensed under the terms of the Apache License 2.0.
- AMWA IS-04 NMOS Discovery and Registration Specification
- AMWA IS-05 NMOS Connection Management Specification
- AMWA IS-07 NMOS Event & Tally Specification
- AMWA IS-09 NMOS System Specification (originally defined in JT-NM TR-1001-1:2018 Annex A)
- AMWA BCP-002-01 NMOS Grouping Recommendations - Natural Grouping
- AMWA BCP-003-01 NMOS API Security Recommendations - Securing Communications
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, and the NMOS Connection API.
- 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.
The codebase is intended to be portable, and the nmos-cpp CMake project can be built on at least Windows and Linux.
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.
The implementation is functional and has been used successfully in several Networked Media Incubator workshop "plug-fests", interoperating with other NMOS implementations, and is being used to build NMOS support for several products.
The following configurations are built and unit tested automatically via continuous integration.
Build Name | Status |
---|---|
Linux (Ubuntu 14.04/GCC 4.8.4) | |
Linux (Ubuntu 18.04/GCC 7.4.0) |
The AMWA NMOS API Testing Tool is automatically run against the APIs of the nmos-cpp-node and nmos-cpp-registry applications.
The implementation is incomplete in some areas. Development is ongoing, tracking the evolution of the NMOS specifications in the AMWA Networked Media Incubator.
Recent activity on the project (newest first):
- 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
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!