This is an example NMOS client implementing IS-12.
It serves as an implementation sample for Controller vendors, showcasing how to interact with device models expressed by MS-05-02 through the IS-12 protocol.
Install dependencies
npm installUpdate initial variables with your target device so it can find the IS-12 control endpoint
var deviceIs04Address = "127.0.0.1";
var deviceIs04Port = 3000;
var is04DeviceId = "67c25159-ce25-4000-a66c-f31fff890265";
var is04Version = "v1.3";Build
npm run build
Run
npm start
The following features are working:
- Finding the IS-12 control endpoint (
urn:x-nmos:control:ncp/v1.0) inside an IS-04 device resource - Establishing a WebSocket connection to the IS-12 control endpoint for bidirectional communication
- Sending Command messages and receiving Command Response messages by pairing their handles (IS-12 messages)
- Sending Subscription messages and consuming Notification messages devices send whenever object properties change (IS-12 schemas)
- Invoking the generic Get method of any object to retrieve the value of any property (NcObject)
- Invoking the generic Set method of any object to set the value of any property (NcObject)
- Finding all members implementing a specific classId by using the FindMembersByClassId method in blocks (NcBlock)
- Discovering all objects of a device model by using the GetMemberDescriptors method (NcBLock)
- Finding all receiver monitor objects inside a device model (BCP-008-01 and NcReceiverMonitor)
The following features are planned:
- Showing how to find a particular object by its role path so we can retrieve its oid (using FindMembersByPath in NcBlock)
- Showing how to find all sender monitor objects in a device model (using FindMembersByClassId in NcBlock to find NcSenderMonitor members)
- Showing how to retrieve the descriptor of any class so we can consume it generically (using GetControlClass in NcClassManager)
- Showing how to retrieve the descriptor of any datatype so we can consume it generically (using GetDatatype in NcClassManager)
Here are other resources available around NMOS Control & Monitoring:
-
A Rust IS-12 example device implementation
https://github.com/cristian-recoseanu/nmos-control-rusty-device -
A Python IS-12 example device implementation
https://github.com/cristian-recoseanu/nmos-control-rusty-device -
A comprehensive Implementers guide (INFO-006)
https://specs.amwa.tv/info-006/ -
The nmos-device-control-mock showcasing a fully compliant and tested implementation of IS-12 and BCP-008 in TypeScript/NodeJS
https://github.com/AMWA-TV/nmos-device-control-mock -
nmos-cpp open source library with a fully compliant and tested implementation of IS-12 and BCP-008 in C++
https://github.com/sony/nmos-cpp -
nmos-testing framework
https://specs.amwa.tv/nmos-testing/