Implementers Guide and Device Mock: NMOS Control and Monitoring (video)
- AMWA

- Oct 7
- 6 min read
Updated: Oct 26
In this implementers guide video Cristian walks us through the Implementers guide for NMOS Control & Monitoring (INFO-006) and how some of its recommended checklists have been implemented in the open source NMOS control mock device example implementation.
The video starts with a quick NMOS Specs overview of the NMOS categories or themes and then goes over the NMOS Control & Monitoring ecosystem including a diagram covering how interoperability and conformance was achieved and maintained whilst preserving vendor freedom.
The next section introduces the NMOS control mock device open source project on GitHub and how to use it. This is a fully compliant and tested example implementation of IS-12 and BCP-008 written in TypeScript/NodeJS.
Following on from this, the video dives more deeply into the INFO-006 guidance including its checklists for both device and controller implementations. Then the majority of the checklists are matched between the INFO-006 guidance and how they have been implemented in the mock device code base.
Finally, the end of the video brings everything together by running the mock device application and utilizing a compatible IS-12 / BCP-008 controller showcases an operational demo of the device being monitored.
-----------------
4:07 AMWA NMOS specs overview and Control & Monitoring ecosystem diagram
6:15 NMOS device control mock introduction
11:25 INFO-006 introduction and device implementation tutorial
13:56 INFO-006 controller implementation tutorial
14:25 INFO-006 how to practical examples and how to get started
15:45 Device implementation checklist
21:40 Device implementation Blocks
28:42 Device implementation Managers
33:10 Device implementation IS-12 Protocol, IS-04 & IS-05 interactions, Commands, Subscriptions, Events & Notifications.
45:40 Status monitoring (BCP-008)
47:40 Other more advanced topics: NMOS control features sets, Nested blocks, Non-standard classes
58:20 Operational demo with compatible Controller ____
(auto-generated partial transcript)
Hello everyone. This is Cristian here from Pebble. I'm here to talk to you about NMOS device control and monitoring. I'm one of the main contributors in the activity group and just wanted today to talk to you a bit about some of the resources available to implementers. This is a very important area for the NMOS community and it's progressed very quickly in the last few months. We want to let you know about the resources we have in place. Today, we're going to look at some actual code and the implementers guide. Before we go into that, I just wanted to give you a brief little overview of the ecosystem. Most of you will know about NMOS IS-04 Discovery & Registration and IS-05 Connection Management. Today, however, we're going to focus on Device Control and Monitoring. I'm going to briefly show you a diagram that I enjoy, which is this squid diagram depicting the ecosystem of control and monitoring.
[00:01:21.02]
It relies on different parts, different logical parts, playing really nicely together and splitting the problem space into different layers that we can then solve with the best tools available. We've got MS-O5-02 on the left-hand side, which is the modeling language. This is how we define what data types and what object entities, what classes you can create. There are core classes that are really needed for everything. But then vendors can also define their own classes. They can create their own vendor-specific objects with their own vendor-specific data types, and all need to be discoverable by the same means. Anyone can use those as well, but they are not part of the standard set. MS-O5-02 establishes these rules. Then you need a way to interact with those models in a device structure. You have IS-12, which is our communication protocol. That relies on the WebSocket transport, and we send JSON payloads over that. It's bi-directional. It allows for both control and notifications to flow backwards and forwards. That is how you interact with those models. It's really efficient, really compact, and also straightforward to debug and to view.
[00:02:42.24]
Also, you can create a web app entirely in a browser that can control one of those endpoints. You can use a WebSocket extension for a browser to interact with devices. We thought about some of these nonfunctional requirements. The other element of this is BCP-008. That establishes monitoring behaviors of some of these media devices at a feature-specific level. For example, we have BCP-08-01 receiver monitoring which defines how to describe receiver statuses via this framework. Then we have BCP-08-02, which is the counterpart for senders. Those all establish requirements and behavior on top of having the transport conformance, the message payload conformance, and data types and classes. And all of these fit really nicely together in one big set allowing conforming devices which are still very distinctive. They have their own features they can do, but they are all advertised and interactable using the same protocol and offer the same discovery means to a controller. That's where we are. I'll show you briefly where everything is again. If you go to specs.amwa.tv, that forwards you to this nice portal.
[00:04:14.20]
You can also go directly to specs.amwa.tv/nmos, or you can just click here on the NMOS tab, and that directs you to the NMOS portal. Here, you have a rendition of the diagram I just showed with the columns in a table format with all the links and the versions. You've got resource management, connection management, device control and monitoring. The one that we're going to focus today is actually here: device control and monitoring. Specifically, we're going to focus on the implementer's guide. So INFO-006 which you can view as the point of entry into this. So you've got references and guidance for all of the other subparts in there. We're going to look at that as one of the main resources for today's video. We're also going to use a controller to show you some of the operational feel of the ecosystem and we're going to use what we call the NMOS device control mock.
[00:05:29.10]
This is another open-source application. It's a TypeScript NodeJs application that you can use. It's rendered here as documentation, but the codebase is available on GitHub. If you navigate to this link, there are links throughout the specs as well. Once you have NodeJs installed, you can install all its dependencies using "npm install", and then you can build it or you can build and start it. Or if you want to make changes to the code base, you run "npm run serve", which effectively recompiles the application if you make any changes. We're going to see that today. There's the specs.amwa.tv link. If you search for this, you will find the GitHub repo as well. All of that documentation is here as well. The way you grab this is by doing a clone of it. It's all in the public domain, or you can just grab a zip file if you want, or whichever way you want to do it. Once you pull that in, you're going to have something that looks a bit like this. I'm going to grab this across the screen so you can see. I'll go to the main folder.
[00:06:43.15]
You get something like this. It's got some of the documentation, but what we're interested in is the code there. If you go to the code directory, and for this session, I'm just going to open it in Visual Studio Code. I've opened it here. Okay, so we've opened that in Visual Studio Code, and I'm in the code subfolder. I'm just going to wait for the Terminal to load here just to show you how you can run this in those two ways. So if I run through the first one "npm run build-and-start". This will compile the application and run it up. It'll take a couple of seconds, but it will show you what it's doing in there. We'll wait for that to finish and that should run up. I should have said for this, I've also got an NMOS registry running in the background. You can configure this. If you look at the documentation, you can run this without a registry. You just have to change one of the configuration items in there.
[00:08:15.13]
For this demo, I've got the nmos-cpp-registry running here. Now, it's just going to copy those compiled files to the distribution folder and then hopefully run it. Then we can look at our controller just to establish the environment we're in and give you a brief look at what we have for the mock device. Then we're going to go back to the implementer's guide. That's all up and running. It's on port 49999, and it's registered in the registry, and it's already starting to communicate with the controller. Let's have a look at that. We got our controller up and running here, and that shows up as this NC-O1 node. This is our IS-04 node. It's got a device, and it's got a receiver and a sender. You'll see that device has a control endpoint. We're going to look at this through the lens of implementation guide checklist in a second. This is the IS-12 control endpoint in here. This is how the controller interacts with our device. If I briefly do a little exploration of that, you'll see this is our device model structure.
NMOS Control and Monitoring: Implementers Guide and Device Mock









There is now a wealth of resources available around NMOS Control & Monitoring.
Here are some links below.
Implementers guide (INFO-006) where you can find the checklists:
https://specs.amwa.tv/info-006/branches/main/docs/Device_implementation_tutorial.html
The mock-device 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
And some other fresh projects I have just kicked off.
Open source device IS-12 implementation in Rust (WIP but already covers the basics):
https://github.com/cristian-recoseanu/nmos-control-rusty-device
Open source device IS-12 implementation in Python (WIP but already covers the basics):
https://github.com/cristian-recoseanu/nmos-control-serpenty-device
Open source client/controller IS-12/BCP-008 example implementation in TypeScript/NodeJS (WIP but already covers the basics):
https://github.com/cristian-recoseanu/nmos-control-scripty-client
And last but not least…