├── .render ├── README.md ├── specs.json ├── spec_list.json ├── themes.json ├── Gemfile ├── Makefile ├── .init-scripts │ ├── make-build-tools.sh │ └── make-distclean.sh ├── themes.md ├── .gitignore ├── _config.yml ├── _includes │ ├── registers_table.html │ ├── spec_table.html │ └── dashboard_table.html └── _local │ └── _includes │ ├── registers_table.html │ ├── feature_sets_table.html │ ├── themes_table.html │ ├── spec_table.html │ ├── dashboard_table.html │ └── specs_by_theme_table.html ├── docs ├── images │ ├── api-doc.png │ ├── api-doc-get.png │ ├── data-model.png │ ├── grains-flow.png │ ├── header-menu.png │ ├── jtnm-layers.png │ ├── menu-is-xx.png │ ├── doc-main-list.png │ ├── menu-docs-spec.png │ ├── nav-versions.png │ ├── nmos-main-list.png │ ├── node-devices.png │ ├── overview-class.png │ ├── find-spec-table.png │ ├── grains-irregular.png │ ├── jtnm-layers-nmos.png │ ├── node-components.png │ ├── connection-sequence.png │ ├── grains-flow-source.png │ ├── node-device-sender.png │ ├── find-spec-table-crop.png │ ├── node-device-receiver.png │ ├── registration-sequence.png │ ├── nmos-spec-render.drawio.png │ ├── registration-and-discovery.png │ ├── node-device-senders-receivers.png │ ├── node-device-sender-receiver-flow.png │ └── node-device-sender-receiver-uuids.png ├── README.md ├── Introduction.md ├── NMOS Solutions.md ├── Glossary.md ├── Technical Overview.md └── FAQ.md ├── .lint ├── .init-scripts │ ├── make-distclean.sh │ └── make-build-tools.sh ├── .gitignore └── Makefile ├── info └── index.md ├── ms └── index.md ├── bcp └── index.md ├── 404.md ├── is └── index.md ├── .github ├── workflows │ ├── lint.yml │ ├── open-issue.yml │ └── render.yml └── ISSUE_TEMPLATE │ └── request-to-add-entry-to-nmos-solutions-page.md ├── .gitignore ├── NOTICE ├── spec_list.yml ├── LICENSE ├── specs-by-type.md ├── CONTRIBUTING.md ├── README.md └── themes.yml /.render/README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.render/specs.json: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | {{ site.data.specs | jsonify }} -------------------------------------------------------------------------------- /.render/spec_list.json: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | {{ site.data.spec_list | jsonify }} -------------------------------------------------------------------------------- /.render/themes.json: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | {{ site.data.themes | jsonify }} 5 | -------------------------------------------------------------------------------- /docs/images/api-doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/api-doc.png -------------------------------------------------------------------------------- /docs/images/api-doc-get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/api-doc-get.png -------------------------------------------------------------------------------- /docs/images/data-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/data-model.png -------------------------------------------------------------------------------- /docs/images/grains-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/grains-flow.png -------------------------------------------------------------------------------- /docs/images/header-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/header-menu.png -------------------------------------------------------------------------------- /docs/images/jtnm-layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/jtnm-layers.png -------------------------------------------------------------------------------- /docs/images/menu-is-xx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/menu-is-xx.png -------------------------------------------------------------------------------- /docs/images/doc-main-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/doc-main-list.png -------------------------------------------------------------------------------- /docs/images/menu-docs-spec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/menu-docs-spec.png -------------------------------------------------------------------------------- /docs/images/nav-versions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/nav-versions.png -------------------------------------------------------------------------------- /docs/images/nmos-main-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/nmos-main-list.png -------------------------------------------------------------------------------- /docs/images/node-devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-devices.png -------------------------------------------------------------------------------- /docs/images/overview-class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/overview-class.png -------------------------------------------------------------------------------- /docs/images/find-spec-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/find-spec-table.png -------------------------------------------------------------------------------- /docs/images/grains-irregular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/grains-irregular.png -------------------------------------------------------------------------------- /docs/images/jtnm-layers-nmos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/jtnm-layers-nmos.png -------------------------------------------------------------------------------- /docs/images/node-components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-components.png -------------------------------------------------------------------------------- /docs/images/connection-sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/connection-sequence.png -------------------------------------------------------------------------------- /docs/images/grains-flow-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/grains-flow-source.png -------------------------------------------------------------------------------- /docs/images/node-device-sender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-device-sender.png -------------------------------------------------------------------------------- /.render/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages', group: :jekyll_plugins 3 | gem 'faraday', '~>0' 4 | -------------------------------------------------------------------------------- /docs/images/find-spec-table-crop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/find-spec-table-crop.png -------------------------------------------------------------------------------- /docs/images/node-device-receiver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-device-receiver.png -------------------------------------------------------------------------------- /docs/images/registration-sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/registration-sequence.png -------------------------------------------------------------------------------- /docs/images/nmos-spec-render.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/nmos-spec-render.drawio.png -------------------------------------------------------------------------------- /docs/images/registration-and-discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/registration-and-discovery.png -------------------------------------------------------------------------------- /docs/images/node-device-senders-receivers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-device-senders-receivers.png -------------------------------------------------------------------------------- /docs/images/node-device-sender-receiver-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-device-sender-receiver-flow.png -------------------------------------------------------------------------------- /docs/images/node-device-sender-receiver-uuids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AMWA-TV/nmos/HEAD/docs/images/node-device-sender-receiver-uuids.png -------------------------------------------------------------------------------- /.lint/.init-scripts/make-distclean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | 5 | rm -rf package.json node_modules/ yarn.lock package-lock.json .scripts/ 6 | -------------------------------------------------------------------------------- /.lint/.gitignore: -------------------------------------------------------------------------------- 1 | *# 2 | *.swp 3 | *~ 4 | .DS_Store 5 | .scripts/ 6 | node_modules/ 7 | npm-debug.log 8 | package-lock.json 9 | package.json 10 | yarn.lock 11 | -------------------------------------------------------------------------------- /info/index.md: -------------------------------------------------------------------------------- 1 | ## NMOS Informative Documents (INFO) 2 | 3 | These provide NMOS implementation guides: 4 | 5 | {% include spec_table.html filter_id="INFO-" %} 6 | 7 | -------------------------------------------------------------------------------- /ms/index.md: -------------------------------------------------------------------------------- 1 | ## NMOS Data Model Specifications (MS) 2 | 3 | These model the resources used in NMOS APIs: 4 | 5 | {% include spec_table.html filter_id="MS-" show_releases=true %} 6 | -------------------------------------------------------------------------------- /bcp/index.md: -------------------------------------------------------------------------------- 1 | ## NMOS Best Common Practices (BCP) 2 | 3 | These specify best practice for use of NMOS APIs: 4 | 5 | {% include spec_table.html filter_id="BCP-" show_releases=true %} 6 | -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | # Page Not Found 2 | 3 | Please check the page address, or use the menus above. 4 | 5 | [NMOS Specifications](https://specs.amwa.tv/nmos) 6 | 7 | [AMWA Website](https://amwa.tv/) 8 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | - [Introduction](Introduction.md) 2 | - [Technical Overview](Technical%20Overview.md) 3 | - [FAQ](FAQ.md) 4 | - [Glossary](Glossary.md) 5 | - [NMOS Solutions](NMOS%20Solutions.md) 6 | -------------------------------------------------------------------------------- /.lint/Makefile: -------------------------------------------------------------------------------- 1 | -include .scripts/scripts.mk 2 | 3 | .PHONY: build-tools distclean 4 | 5 | build-tools: 6 | .init-scripts/make-build-tools.sh 7 | 8 | distclean: 9 | .init-scripts/make-distclean.sh 10 | -------------------------------------------------------------------------------- /.render/Makefile: -------------------------------------------------------------------------------- 1 | -include .scripts/scripts.mk 2 | 3 | .PHONY: build-tools distclean 4 | 5 | build-tools: 6 | .init-scripts/make-build-tools.sh 7 | 8 | distclean: 9 | .init-scripts/make-distclean.sh 10 | -------------------------------------------------------------------------------- /is/index.md: -------------------------------------------------------------------------------- 1 | ## NMOS Interface Specifications (IS) 2 | 3 | These specify NMOS APIs using RAML, JSON Schema and normative text, supported by examples and other text: 4 | 5 | {% include spec_table.html filter_id="IS-" show_releases=true %} 6 | -------------------------------------------------------------------------------- /.lint/.init-scripts/make-build-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | 5 | git clone --single-branch --branch "${NMOS_LINT_SCRIPTS_BRANCH:-main}" https://${GITHUB_TOKEN:+${GITHUB_TOKEN}@}github.com/AMWA-TV/nmos-lint-scripts .scripts 6 | .scripts/install-dependencies.sh 7 | -------------------------------------------------------------------------------- /.render/.init-scripts/make-build-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | 5 | git clone --single-branch --branch "${NMOS_DOC_BUILD_SCRIPTS_BRANCH:-main}" https://${GITHUB_TOKEN:+${GITHUB_TOKEN}@}github.com/AMWA-TV/nmos-render-scripts .scripts 6 | .scripts/install-dependencies.sh 7 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: [push, pull_request, workflow_dispatch] 3 | jobs: 4 | lint: 5 | runs-on: ubuntu-latest 6 | name: Lint 7 | steps: 8 | - name: Use NMOS Lint 9 | uses: docker://amwa/nmos-lint:latest 10 | env: 11 | GITHUB_BRANCH: ${{ github.ref_name }} 12 | -------------------------------------------------------------------------------- /.render/.init-scripts/make-distclean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | 5 | rm -f index.md index-contents.md 6 | rm -rf source-repo/ branches/ releases/ 7 | rm -rf .scripts/ .layouts/ _layouts/ assets/ raml2html-nmos-theme/ _site/ .ssh/ 8 | rm -rf node_modules/ 9 | rm -f yarn.lock package.json package-lock.json Gemfile.lock 10 | -------------------------------------------------------------------------------- /.render/themes.md: -------------------------------------------------------------------------------- 1 | # NMOS Specifications by Theme 2 | 3 | The tables below are organised by theme. To see them organised by id, click [here](.) 4 | 5 | {% for theme in site.data.themes %} 6 | 7 | ### {{ theme.name }} 8 | 9 | {{ theme.description}} 10 | 11 | {% include specs_by_theme_table.html filter_theme=theme.id show_releases=true %} 12 | 13 | {% endfor %} 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *# 2 | *.swp 3 | *~ 4 | .DS_Store 5 | .layouts/ 6 | .sass-cache/ 7 | .scripts/ 8 | Gemfile.lock 9 | /_layouts/ 10 | /_includes/ 11 | /assets/ 12 | /_data/ 13 | _site/ 14 | *.json 15 | branches/ 16 | index.md 17 | node_modules/ 18 | npm-debug.log 19 | package-lock.json 20 | package.json 21 | releases/ 22 | raml2html-nmos-theme/ 23 | source-repo/ 24 | yarn.lock 25 | -------------------------------------------------------------------------------- /.render/.gitignore: -------------------------------------------------------------------------------- 1 | *# 2 | *.swp 3 | *~ 4 | .DS_Store 5 | .layouts/ 6 | .sass-cache/ 7 | .scripts/ 8 | Gemfile.lock 9 | /_layouts/ 10 | /_includes/ 11 | /assets/ 12 | /_data/ 13 | _site/ 14 | *.json 15 | branches/ 16 | index.md 17 | node_modules/ 18 | npm-debug.log 19 | package-lock.json 20 | package.json 21 | releases/ 22 | raml2html-nmos-theme/ 23 | source-repo/ 24 | yarn.lock 25 | -------------------------------------------------------------------------------- /docs/Introduction.md: -------------------------------------------------------------------------------- 1 | # Introduction to the AMWA NMOS Specifications 2 | 3 | NMOS is a family name for specifications produced by the Advanced Media Workflow Association related to networked media for professional applications. 4 | 5 | The list of NMOS Specifications is at 6 | 7 | See [AMWA's overview](https://www.amwa.tv/nmos-overview) of NMOS for more information. 8 | -------------------------------------------------------------------------------- /.github/workflows/open-issue.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Open Issue 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | 8 | jobs: 9 | label_issue: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - env: 13 | GITHUB_TOKEN: ${{ github.token }} 14 | ISSUE_URL: ${{ github.event.issue.html_url }} 15 | run: | 16 | gh issue edit $ISSUE_URL --add-label "triage" 17 | -------------------------------------------------------------------------------- /.render/_config.yml: -------------------------------------------------------------------------------- 1 | # Don't change this 2 | theme: jekyll-theme-primer 3 | spec_server: specs.amwa.tv 4 | 5 | # AMWA ID 6 | amwa_id: NMOS 7 | 8 | # Base name for site (typically lower case version of AMWA ID, or the repo name) 9 | baseurl: /nmos 10 | 11 | # Which release or branch appears in header links and on the home page 12 | default_tree: branches/main 13 | 14 | # Regex patterns of releases and branches to show 15 | show_releases: 16 | show_branches: ^main$|^publish- 17 | -------------------------------------------------------------------------------- /.github/workflows/render.yml: -------------------------------------------------------------------------------- 1 | name: Render 2 | on: 3 | workflow_dispatch: 4 | 5 | push: 6 | branches: 7 | - main 8 | - 'publish-*' 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | name: Build 13 | steps: 14 | - name: Use NMOS Render 15 | uses: docker://amwa/nmos-render:latest 16 | env: 17 | SSH_HOST: ${{ secrets.SSH_HOST }} 18 | SSH_USER: ${{ secrets.SSH_USER }} 19 | SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} 20 | SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }} 21 | 22 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | THIS AMWA SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, 2 | AND IN PARTICULAR, ANY WARRANTY OF NON-INFRINGEMENT IS EXPRESSLY DISCLAIMED. 3 | ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTER'S 4 | OWN RISK, AND NEITHER AMWA, NOR ANY OF ITS MEMBERS OR CONTRIBUTORS, SHALL 5 | HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY 6 | DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE 7 | USE OF THIS SPECIFICATION. 8 | 9 | Readers are advised that any IPR contribution forms associated with this 10 | project are available from the [AMWA](http://amwa.tv/) 11 | -------------------------------------------------------------------------------- /.render/_includes/registers_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% assign registers_to_show = site.data.registers | where: "show_in_index", true %} 10 | {% for register in registers_to_show %} 11 | 12 | 13 | 14 | 15 | {% endfor %} 16 | 17 |
IdName
{{ register.id }}{{ register.name }}
18 | -------------------------------------------------------------------------------- /.render/_local/_includes/registers_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% assign registers_to_show = site.data.registers | where: "show_in_index", true %} 10 | {% for register in registers_to_show %} 11 | 12 | 13 | 14 | 15 | {% endfor %} 16 | 17 |
IdName
{{ register.id }}{{ register.name }}
18 | -------------------------------------------------------------------------------- /.render/_local/_includes/feature_sets_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% assign feature_sets_to_show = site.data.feature_sets | where: "show_in_index", true %} 10 | {% for feature_set in feature_sets_to_show %} 11 | 12 | 13 | 14 | 15 | {% endfor %} 16 | 17 |
IdName
{{ feature_set.id }}{{ feature_set.name }}
18 | -------------------------------------------------------------------------------- /spec_list.yml: -------------------------------------------------------------------------------- 1 | - IS-04 2 | - IS-05 3 | - IS-06 4 | - IS-07 5 | - IS-08 6 | - IS-09 7 | - IS-10 8 | - IS-11 9 | - IS-12 10 | - IS-13 11 | - IS-14 12 | - MS-04 13 | - MS-05-01 14 | - MS-05-02 15 | - MS-05-03 16 | - BCP-002 17 | - BCP-002-01 18 | - BCP-002-02 19 | - BCP-003 20 | - BCP-003-01 21 | - BCP-003-02 22 | - BCP-003-03 23 | - BCP-004-01 24 | - BCP-004-02 25 | - BCP-005-01 26 | - BCP-005-02 27 | - BCP-005-03 28 | - BCP-006 29 | - BCP-006-01 30 | - BCP-006-02 31 | - BCP-006-03 32 | - BCP-006-04 33 | - BCP-007 34 | - BCP-007-01 35 | - BCP-008-01 36 | - BCP-008-02 37 | - INFO-002 38 | - INFO-003 39 | - INFO-004 40 | - INFO-005 41 | - INFO-006 42 | - NMOS-PARAMETER-REGISTERS 43 | - NMOS-CONTROL-FEATURE-SETS 44 | - IS-TEMPLATE 45 | - INFO-TEMPLATE 46 | -------------------------------------------------------------------------------- /docs/NMOS Solutions.md: -------------------------------------------------------------------------------- 1 | # NMOS Solutions 2 | {:.no_toc} 3 | 4 | - A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above 5 | {:toc} 6 | 7 | The following links will take you to AMWA's catalogues of NMOS solutions which have moved to . Please see that page for information about how to add your product: 8 | 9 | - [Open source & freeware](https://docs.google.com/spreadsheets/d/1WUrNoZunfngurf6VYbJ5uOmr40x0g2qAYXSDnA7_ltM/edit?usp=sharing) 10 | - [Controllers & registries](https://docs.google.com/spreadsheets/d/1B69SmHT2CqG5swe20nT4nOsRKK-hDC1Vk_ueVOmk8pw/edit?usp=sharing) 11 | - [Media Nodes](https://docs.google.com/spreadsheets/d/1ae6V3Nd_1YUPP-hUGFiok3EtXdTpCgZtryqktdpCdFw/edit?usp=sharing) 12 | -------------------------------------------------------------------------------- /.render/_local/_includes/themes_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for theme in site.data.themes %} 11 | 12 | 13 | 14 | 15 | 24 | 25 | {% endfor %} 26 | 27 |
ThemeDescriptionMembers
{{ theme.name }}{{ theme.description }} 16 | {% for member in theme.members %} 17 |
18 | 19 | {{ member }} 20 | {{ site.data.specs[0].amwa_id }} 21 |
22 | {% endfor %} 23 |
28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | (c) AMWA 2017 2 | 3 | The following license applies to API definitions and software: 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this Specification except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | 15 | See the License for the specific language governing permissions and 16 | limitations under the License. 17 | 18 | ==== 19 | 20 | The following license applies to text/markdown documents: 21 | 22 | Creative Commons license: "CC Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)." 23 | See http://creativecommons.org/licenses/by-nd/4.0/. 24 | -------------------------------------------------------------------------------- /.render/_includes/spec_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if include.show_releases %} 8 | 9 | {% endif %} 10 | 11 | 12 | 13 | {% assign specs_to_show = site.data.specs | where_exp:"spec", "spec.amwa_id contains include.filter_id" | where: "show_in_index", true %} 14 | {% for spec in specs_to_show %} 15 | 16 | 17 | 18 | 19 | {% if include.show_releases %} 20 | 28 | {% endif %} 29 | 30 | {% endfor %} 31 | 32 |
IdNameSpec StatusRelease(s)
{{ spec.amwa_id }}{{ spec.name }}{{ spec.status }} 21 | {% for release in spec.releases %} 22 |
23 | {{ release }} 24 | 25 |
26 | {% endfor %} 27 |
33 | -------------------------------------------------------------------------------- /.render/_local/_includes/spec_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if include.show_releases %} 8 | 9 | {% endif %} 10 | 11 | 12 | 13 | {% assign specs_to_show = site.data.specs | where_exp:"spec", "spec.amwa_id contains include.filter_id" | where: "show_in_index", true %} 14 | {% for spec in specs_to_show %} 15 | 16 | 17 | 18 | 19 | {% if include.show_releases %} 20 | 28 | {% endif %} 29 | 30 | {% endfor %} 31 | 32 |
IdNameSpec StatusRelease(s)
{{ spec.amwa_id }}{{ spec.name }}{{ spec.status }} 21 | {% for release in spec.releases %} 22 |
23 | {{ release }} 24 | 25 |
26 | {% endfor %} 27 |
33 | -------------------------------------------------------------------------------- /.render/_includes/dashboard_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% for spec in site.data.specs %} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {% endfor %} 23 | 24 |
AMWA ID
(Links to spec)
Default Branch
(Links to repo)
Lint
(Default Branch)
Render
(All)
Open
Issues
Open
PRs
{{ spec.amwa_id }}{{ spec.default_branch }}{{ spec.num_issues }}{{ spec.num_pulls }}
25 | -------------------------------------------------------------------------------- /.render/_local/_includes/dashboard_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% for spec in site.data.specs %} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {% endfor %} 23 | 24 |
AMWA ID
(Links to spec)
Default Branch
(Links to repo)
Lint
(Default Branch)
Render
(All)
Open
Issues
Open
PRs
{{ spec.amwa_id }}{{ spec.default_branch }}{{ spec.num_issues }}{{ spec.num_pulls }}
25 | -------------------------------------------------------------------------------- /.render/_local/_includes/specs_by_theme_table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if include.show_releases %} 8 | 9 | {% endif %} 10 | 11 | 12 | 13 | {% assign specs_to_show = site.data.specs | where_exp:"spec", "spec.themes contains include.filter_theme" | where: "show_in_index", true %} 14 | {% for spec in specs_to_show %} 15 | 16 | 17 | 18 | 19 | {% if include.show_releases %} 20 | 28 | {% endif %} 29 | 30 | {% endfor %} 31 | 32 |
IdNameSpec StatusRelease(s)
{{ spec.amwa_id }}{{ spec.name }}{{ spec.status }} 21 | {% for release in spec.releases %} 22 |
23 | {{ release }} 24 | 25 |
26 | {% endfor %} 27 |
33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/request-to-add-entry-to-nmos-solutions-page.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Request to add entry to NMOS Solutions page 3 | about: Provides a form for the required information to list implementations 4 | title: 'New product request: \[COMPANY\]' 5 | labels: product 6 | assignees: 'peterbrightwell' 7 | 8 | --- 9 | 10 | AMWA maintains a list of NMOS-capable implementations [here](https://specs.amwa.tv/nmos/branches/main/docs/NMOS_Solutions.html). To request an addition please complete the following information (repeat as required for multiple products), add your company name to the issues title (as well as below), and submit the issue. 11 | 12 | **Company name** 13 | 14 | **Type of product** 15 | 16 | > Node, Controller or registry 17 | 18 | **Product name and link to information** 19 | 20 | > Please use this form: `[Name](URL)` 21 | > It must be possible to find information about the supported specifications via the URL. If this is not obvious, please add a suitable comment to help 22 | 23 | **Supported specifications** 24 | 25 | > Must include the latest supported version, e.g. "IS-04 v1.3". 26 | 27 | **Comments** 28 | 29 | > Such as the function of the product. Please keep brief. 30 | -------------------------------------------------------------------------------- /specs-by-type.md: -------------------------------------------------------------------------------- 1 | # NMOS Specifications by Document Type 2 | 3 | The tables below are organised by the specification document type. To see them organised by themes, click [here](.) 4 | 5 | ### [NMOS Interface Specifications (IS)](is/) 6 | 7 | These specify NMOS APIs using RAML, JSON Schema and normative text, supported by examples and other text: 8 | 9 | {% include spec_table.html filter_id="IS-" show_releases=true %} 10 | 11 | ### [NMOS Data Model Specifications (MS)](ms/) 12 | 13 | These model the resources used in NMOS APIs: 14 | 15 | {% include spec_table.html filter_id="MS-" show_releases=true %} 16 | 17 | ### [NMOS Best Common Practices (BCP)](bcp/) 18 | 19 | These specify best practice for use of NMOS APIs: 20 | 21 | {% include spec_table.html filter_id="BCP-" show_releases=true %} 22 | 23 | ### [NMOS Informative Documents (INFO)](info/) 24 | 25 | These provide NMOS implementation guides: 26 | 27 | {% include spec_table.html filter_id="INFO-" %} 28 | 29 | ### [NMOS Parameter Registers](https://specs.amwa.tv/nmos-parameter-registers) 30 | 31 | These specify constants for many types of NMOS parameter values: 32 | 33 | {% include registers_table.html %} 34 | 35 | ### [NMOS Control Feature Sets](https://specs.amwa.tv/nmos-control-feature-sets) 36 | 37 | These specify opt-in models for the NMOS Control Framework 38 | 39 | {% include feature_sets_table.html %} 40 | 41 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks for your interest in this AMWA NMOS Specification. 4 | 5 | AMWA Specifications (including Best Current Practices) are developed and ratified in accordance with 6 | AMWA's Specification Process. See BCP-001 on the [AMWA Specifications page](https://www.amwa.tv/specifications) 7 | 8 | They are created and updated in AMWA working groups, requiring AMWA membership for participation. 9 | 10 | AMWA member contributions to this Specification are made subject to AMWA's [IPR Policy](https://www.amwa.tv/about/policies/AMWA_IPR_Policy_V3.0.pdf). 11 | Contributions should be accompanied by the form in an appendix of that policy. 12 | 13 | For more information for those wishing to develop or contribute to AMWA NMOS Specifications, 14 | please see the NMOS [Wiki Page](https://github.com/amwa-tv/nmos/wiki/Maintainers) for maintainers. 15 | 16 | ## Reporting Issues 17 | 18 | AMWA members and non-members are welcome to raise issues via the GitHub Issues tab. 19 | 20 | ## Pull Requests 21 | 22 | We accept Pull Requests from AMWA members participating in relevant workgroups. These are subject to the IPR Policy. 23 | 24 | Please read about our [GitHub Workflow](https://github.com/amwa-tv/nmos/wiki/GitHub-Workflow) before creating a pull request, 25 | in particular the 'Maintaining a Specification' section, as we try to maintain a consistent approach to branches and releases. 26 | This should indicate which branch it is most appropriate to create your pull request against. 27 | 28 | Each NMOS workgroup has a number of members that will review a PR. 29 | 30 | ## Suggesting Improvements or Enhancements 31 | 32 | We are interested in hearing of suggestions, both for the spec itself and the accompanying documentation. 33 | Please use the issue tracker or [contact AMWA](https://www.amwa.tv/contact). 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Networked Media Open Specifications 2 | 3 | 4 | 5 | 6 | 7 | 8 | NMOS is a family name for specifications produced by the [Advanced Media Workflow Association](https://www.amwa.tv) related to networked media for professional applications. 9 | 10 | For a non-technical introduction to NMOS see AMWA's [overview page](https://www.amwa.tv/nmos-overview) and [NMOS Roadmap](https://static.amwa.tv/nmos-roadmap-version-2(2023-08-07).pdf). 11 | 12 | To help contribute to the ongoing development of NMOS, you can [join AMWA](https://www.amwa.tv/join). 13 | 14 | The tables below list the current specifications and provide links to their documentation on [specs.amwa.tv](https://specs.amwa.tv). The "Release" links will take you to the documentation and download page (↓) for the latest release of recent versions of the specification. 15 | 16 | > The tables no longer include direct links to the GitHub repos. These are available through the [NMOS CI Dashboard](https://specs.amwa.tv/nmos-dashboard/dashboard.html). 17 | 18 | The [NMOS API Testing Tool](https://specs.amwa.tv/nmos-testing) supports the majority of these specifications. 19 | 20 | The tables below are organised by theme. To see them organised by document type, click [here](specs-by-type.md) 21 | 22 | {% for theme in site.data.themes %} 23 | 24 | ### {{ theme.name }} 25 | 26 | {{ theme.description}} 27 | 28 | {% include specs_by_theme_table.html filter_theme=theme.id show_releases=true %} 29 | 30 | {% endfor %} 31 | 32 | 33 | 34 | > The table of NMOS specs is no longer contained in this README, but is generated on demand from YAML files in each spec repo and rendered at : 35 | > 36 | > ![NMOS Spec Render](docs/images/nmos-spec-render.drawio.png) 37 | -------------------------------------------------------------------------------- /themes.yml: -------------------------------------------------------------------------------- 1 | - id: RESOURCE 2 | name: Resource Management 3 | description: Specifications, recommendations and guidance concerning registration, discovery and labelling of NMOS resources 4 | members: 5 | - IS-04 6 | - IS-09 7 | - IS-13 8 | - BCP-002-01 9 | - BCP-002-02 10 | - INFO-004 11 | - INFO-005 12 | 13 | - id: CONNECTION 14 | name: Connection Management 15 | description: Specifications, recommendations and guidance concerning connection of devices, audio channel mapping and compressed streams 16 | members: 17 | - IS-05 18 | - IS-08 19 | - BCP-004-01 20 | - BCP-004-02 21 | - BCP-006-01 22 | - BCP-006-02 23 | - BCP-006-03 24 | - BCP-006-04 25 | - BCP-007-01 26 | - INFO-003 27 | - INFO-005 28 | 29 | - id: CONTROL 30 | name: Device Control & Monitoring 31 | description: Specifications, recommendations and guidance concerning device control and status monitoring 32 | members: 33 | - IS-07 34 | - IS-12 35 | - MS-05-01 36 | - MS-05-02 37 | - BCP-008-01 38 | - BCP-008-02 39 | - INFO-006 40 | 41 | - id: CONFIGURATION 42 | name: Device Configuration 43 | description: Specifications, recommendations and guidance concerning device and media parameter configuration 44 | members: 45 | - IS-11 46 | - IS-14 47 | 48 | - id: PRO-AV 49 | name: ProAV 50 | description: Specifications, recommendations and guidance concerning the ProAV space. IPMX relevant items are included here. See VSF Technical Recommendations for further details. 51 | members: 52 | - IS-04 53 | - IS-05 54 | - IS-08 55 | - IS-11 56 | - IS-12 57 | - BCP-002-01 58 | - BCP-002-02 59 | - BCP-004-01 60 | - BCP-004-02 61 | - BCP-005-01 62 | - BCP-005-02 63 | - BCP-005-03 64 | - BCP-006-01 65 | - BCP-008-01 66 | - BCP-008-02 67 | 68 | - id: SECURITY 69 | name: Security Recommendations 70 | description: Specifications, recommendations and guidance concerning encryption, authorization and certificate provisioning 71 | members: 72 | - IS-10 73 | - BCP-003-01 74 | - BCP-003-02 75 | - BCP-003-03 76 | - INFO-002 77 | - INFO-005 78 | -------------------------------------------------------------------------------- /docs/Glossary.md: -------------------------------------------------------------------------------- 1 | # NMOS Glossary 2 | {:.no_toc} 3 | 4 | - A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above 5 | {:toc} 6 | 7 | In NMOS, several common terms have specific meanings that it helps to be aware of. 8 | Many of these correspond to the glossary of the [JT-NM Reference Architecture][JT-NM RA]. 9 | 10 | Several of these are formally defined in NMOS specifications, for example in the [IS-04 Data Model](https://specs.amwa.tv/is-04/branches/v1.3.x/docs/Data_Model.html), but are described here for convenience. 11 | 12 | ## API 13 | 14 | An Application Programming Interface provided over a protocol such as HTTP or WebSocket, defined in an AMWA NMOS Specification (IS-04, IS-05, IS-06, etc.). 15 | 16 | ## Client 17 | 18 | The entity that is using an [API](#api), for example: 19 | 20 | - a [Node](#node) using the IS-04 Registration API 21 | - a monitoring application using the IS-04 Query API 22 | - a connection control application using the IS-05 Connection API 23 | 24 | The Client is distinct from the [User](#user). 25 | 26 | ## Controller 27 | 28 | A Controller is [Client](#client) software that interacts with the NMOS [APIs](#api) to discover, connect and manage resources ([Nodes](#node), [Devices](#device), [Senders](#sender) and [Receivers](#receiver)) within a networked media system. 29 | 30 | ## Device 31 | 32 | A Device is a logical block of functionality within a networked media infrastructure. 33 | Examples of Devices include: 34 | 35 | - Camera 36 | - SDI to IP adapter 37 | - Chroma keyer 38 | - Audio mixer 39 | 40 | A Device can have a permanent presence on its [Node](#node) (a fixed Device, e.g., a networked camera), or it can be created on demand by its Node (a virtual Device, e.g., a software-based transcoder). 41 | Nodes can dynamically create different types of Device (a dynamic Device). 42 | 43 | ## Essence 44 | 45 | Essence is video, audio or other data. 46 | 47 | ## Flow 48 | 49 | In the IS-04 and IS-05 specifications a Flow refers to a sequence of [Essence](#essence) [Grains](#grain), that is video, audio or time-related data, generated by a [Source](#source). 50 | A Source can generate multiplexed Flows consisting of more than one kind of Essence. 51 | 52 | This is a relatively high-level usage of the word, not to be confused with a low-level flow within the physical network (distinguished as a Network Flow in the [IS-06 Data Model](https://specs.amwa.tv/is-06/branches/v1.0.x/docs/Data_Model.html)). 53 | 54 | In addition to indicating the [format](https://specs.amwa.tv/nmos-parameter-registers/branches/main/formats) of its Source, a Flow identifies the media type and parameters of the particular rendition. 55 | 56 | ## Grain 57 | 58 | NMOS uses Grain as a convenient way of identifying a unit of [Essence](#essence), that is video, audio or time-related data. This helps with mapping NMOS's logical data model onto physical Specifications. 59 | 60 | For example, a video Grain could correspond to a frame of video. 61 | 62 | ## Node 63 | 64 | A Node is a _logical_ host for [Devices](#device). This can be physical, or virtual (and a Node can be within a "cluster" or "cloud"). 65 | 66 | In [JT-NM TR-1001-1][JT-NM TR-1001-1], the [EBU Technology Pyramid][EBU Tech Pyramid], and other industry documents, the term Media Node is often used. 67 | 68 | ## Receiver 69 | 70 | A Receiver consumes a [Flow](#flow) transmitted on the network by a [Sender](#sender). 71 | 72 | A Receiver identifies the [transport](https://specs.amwa.tv/nmos-parameter-registers/branches/main/transports/) protocol it uses to communicate over the network 73 | and the data [format](https://specs.amwa.tv/nmos-parameter-registers/branches/main/formats) it can accept. 74 | 75 | ## Registry 76 | 77 | A Registry, or Registration & Discovery Instance, is a [Server](#server) that provides the IS-04 Registration API for [Nodes](#node) and the IS-04 Query API for [Controllers](#controller). 78 | 79 | ## Sender 80 | 81 | A Sender makes a [Flow](#flow) available on the network. 82 | 83 | A Sender identifies the [transport](https://specs.amwa.tv/nmos-parameter-registers/branches/main/transports/) protocol it uses to communicate over the network. 84 | 85 | For example, a Sender could transmit an RTP stream according to a payload mapping for a specific video format, or a sequence of data [Grains](#grain) via the MQTT or WebSocket protocols. 86 | 87 | ## Server 88 | 89 | The entity that is providing an [API](#api), for example: 90 | 91 | - a [Registry](#registry) implementing IS-04 Registration and Query APIs 92 | - a [Node](#node) implementing IS-04 Node API and IS-05 Connection API 93 | 94 | ## Source 95 | 96 | A Source represents the _logical_ origin of any number of [Essence](#essence) [Flows](#flow), each of which is a rendition of the Source. 97 | 98 | A Source therefore identifies the common [format](https://specs.amwa.tv/nmos-parameter-registers/branches/main/formats) of its Flows. 99 | 100 | For example, a Source could generate Essence based on its [Device](#device)'s input signals, such as a camera image sensor, HDMI input signal, received RTP streams, or an internally generated test pattern or file read from storage, etc. 101 | 102 | Note that a Source is: 103 | 104 | - not a Device from which the content originates (for example there might be video, audio and perhaps data Sources _associated with_ a camera, the camera itself is the Device not a Source). 105 | - not about the physical origin of the Flows (for example: two Flows associated with the same Source might physically originate from different hardware in distinct geographical locations). 106 | 107 | ## User 108 | 109 | Where specifications refer to a User, this can include both human operators who drive a [Controller](#controller) manually and automation systems that drive a [Controller](#controller) programmatically. 110 | 111 | [EBU Tech Pyramid]: https://tech.ebu.ch/pyramid "The Technology Pyramid For Media Nodes: Minimum User Requirements to Build and Manage an IP-Based Media Facility" 112 | [JT-NM RA]: https://www.jt-nm.org/reference-architecture "Joint Task Force on Networked Media (JT-NM): Reference Architecture V1.0" 113 | [JT-NM TR-1001-1]: https://www.jt-nm.org/tr-1001-1 "Joint Task Force on Networked Media (JT-NM): Technical Recommendation TR-1001-1:2020 v1.1: System Environment and Device Behaviors For SMPTE ST 2110 Media Nodes in Engineered Networks" 114 | -------------------------------------------------------------------------------- /docs/Technical Overview.md: -------------------------------------------------------------------------------- 1 | # NMOS Technical Overview 2 | {:.no_toc} 3 | 4 | - A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above 5 | {:toc} 6 | 7 | ## Introduction 8 | 9 | Networked Media Open Specifications ([NMOS][]) are a family of specifications that support the professional AV media industry's transition to a "fully-networked" architecture. 10 | 11 | The NMOS specs are developed by the Advanced Media Workflow Association ([AMWA][]) and are published on GitHub. 12 | 13 | NMOS specs are required by other industry recommendations, in particular [TR-1001-1][], which addresses requirements for the behaviour of media devices and the network enviroment in which devices run. 14 | 15 | This page provides a technical overview of NMOS. It's a work in progress, and will be updated with information currently in a legacy document in this repository. 16 | 17 | ### Background 18 | 19 | While much of the broadcast industry has moved to file-based operation, live facilities have long depended on specialist technologies such as the [Serial Digital Interface][] (SDI), [SMPTE Timecode][] and various incompatible control protocols (including some using RS-232, some of which are still in use). However (as of 2017) there is a significant move towards replacing these with more general IT/IP technologies, allowing the industry to benefit from the high speeds and economies of scale that have enabled the success of the Internet and Web. 20 | 21 | Standards bodies including SMPTE and AES have created specifications for streaming of uncompressed video and audio over IP. These use RTP and include [ST 2022-6][] for SDI-based payloads, [AES-67][] for audio-only payloads and the forthcoming [ST 2110][] for separate video, audio and ancillary data over IP. However none of these tackle the control or application planes, leaving significant additional work to be done to achieve useful interoperability in professional networked media environments. So a number of industry bodies came together in 2013 on the Joint Task Force on Networked Media ([JT-NM][]) to coordinate how this might happen. This led to the creation of a "reference architecture" for interoperability ([JT-NM RA][]). At its most basic this identifies models and best practices for what may be needed at four layers: operation, application, platform and infrastructure. 22 | 23 | ![JT-NM Layers](images/jtnm-layers.png) 24 | 25 | This is where the Advanced Media Workflow Association ([AMWA][]) comes in. AMWA is an industry group of manufacturers, developers and end users, that is trying to advance a software-focussed approach to support future professional media operations. What this means in practice is identifying how to build upon "commodity" infrastructure (red layer) and widely used platform technologies/protocols (green) layer and supplement these where required with helpful specifications that build upon these building blocks. AMWA has done this in the past with "application specifications" for file-based interchange and delivery, and is now doing this for networked media with the NMOS specifications, which are being created by AMWA's Networked Media Incubator group. These provide a open set of APIs to support interoperability for networked media applications: 26 | 27 | ![JT-NM Layers with NMOS APIs](images/jtnm-layers-nmos.png) 28 | 29 | ### General Principles 30 | 31 | When creating NMOS specifications we try to follow a number of general principles, which will be familiar to today's developers. 32 | 33 | #### Web-friendly protocols 34 | 35 | In the past specialised wire protocols have often been used for the control plane within facilities. However networked media operations are becoming increasingly distributed across locations, and sometimes across organisational boundaries, including third-party/public cloud providers. So it is desirable to use protocols that are aimed at such environments. HTTP and WebSockets are examples of these, and this is what NMOS currently uses. 36 | 37 | There is a huge amount of work happening in the wider IT/IP industry on optimising these protocols and their implementation, making previous arguments about the performance of specialised protocols less relevant. 38 | 39 | #### Developer-friendly APIs 40 | 41 | A decade ago, typical control APIs used an "RPC-style" approach based on SOAP, XML, XSD and WSDL, leading to quite complex code and messages. Modern developers of web APIs typically use a REST (or at least "REST-like"—see below) approach with simpler messages based on JSON and a lightweight approach to schemas using e.g. RAML and JSON Schema. 42 | 43 | NMOS adopts this modern approach. 44 | 45 | #### REST 46 | 47 | Although "REST" is often used to mean any simple HTTP API, in creating the NMOS specs we have tried to adopt "correct practice" such as statelessness, uniform interface, resource identification in requests, HATEOAS, etc. (The [Wikipedia REST page][] has a good summary of these.) But as there are no hard rules on this, and a certain amount of pragmatism has also been used, especially for more control-oriented activities such as connection management. 48 | 49 | #### Technology independence through data modelling 50 | 51 | This might seem to conflict with some of the above, but it doesn't have to. In creating the NMOS specifications we have started with (UML) data models, which you will see in the NMOS repositories, and mapped these to JSON/HTTP/WebSockets/whatever. But should the wider IT/IP world migrate to new technologies, alternative mappings of the data models could feature in updated specifications. 52 | 53 | #### Build on widely used and open foundations 54 | 55 | The success of HTTP and WebSockets is in part due to their open nature, being made available through IETF RFCs. The same applies to RTP, which is the basis of much industry activity on live IP at present. 56 | 57 | #### Openly available specifications 58 | 59 | We are using GitHub repositories to publish the specifications. These are made public as soon as is sensible, and of couse are available at no cost (AMWA is using a "RAND-Z" model for this work). We use the Apache 2.0 open source licence for specifications (and the current open-source implementations). 60 | 61 | #### Self-documenting specifications 62 | 63 | Much of the "normative" part of the NMOS specifications takes the form of RAML and JSON Schema (with text-based supporting information). This allows for automatic generation of the HTML rendered API documentation you will see on the GitHub pages. 64 | 65 | #### Scalable 66 | 67 | The Internet/Web has scaled well so far (shortage of remaining public IPv4 addresses notwithstanding). NMOS APIs are built from Internet/Web technologies, so should also scale. That's the theory – at the time of writing this we are planning some practical work to study/prove this is the case, including documenting best practice. 68 | 69 | #### Securable 70 | 71 | Huge amounts of resources are spent on ensuring the world can use the Internet/Web securely. NMOS APIs are built from Internet/Web technologies, so should benefit. Again, that's the theory – so far Incubator workshops have used plain HTTP/WebSockets for expediency, but the specifications support HTTPS/WSS. At the time of writing this we are planning some practical work to study/prove this is the case, including documenting best practice (such as what authentication, authorisation and audit technologies are well suited to networked media applications). 72 | 73 | #### Suitable for all types of platform 74 | 75 | Professional media has to work in many different types of environment, requiring a range of types of equipment. This means that NMOS specifications have been designed to work on many types of platform, such as: 76 | 77 | - low-power devices, used on location and connected on a local network 78 | - rack-mounted equipment within a fixed facility in a television centre 79 | - virtualised in an on-premesis data centre 80 | - on a shared or public cloud 81 | 82 | #### Universal identity 83 | 84 | In NMOS specifications, everything is treated as a resource that can be uniquely identified. This is discussed in depth in the "Identity Framework" section of the [JT-NM RA][]. In practice it means that every resource has a UUID/GUID that can be generated locally (rather than being assigned by a central authority). This UUID is then used within JSON messages and as part of RESTful URIs. 85 | 86 | #### Flexible content 87 | 88 | NMOS's content model reflects the richness of use of content in modern productions. Video, audio and data are treated as separate elements with their own identity and timing information. This allows them to be handled as required during production and rendered for consumption as needed for the platform(s). 89 | 90 | #### Use rather than invent 91 | 92 | NMOS specifications apply techniques used more generally for the professional media industry. Where possible we use protocols, representations, technologies, etc. that have proved successful elsewhere. 93 | 94 | #### Benefit from modern tooling 95 | 96 | Similarly the NMOS specifications have been written with the intent that they will be implemented using technologies that are widely known by developers with experience of network and web development. 97 | 98 | #### Guided by JT-NM RA 99 | 100 | This has already been mentioned, but it underpins how work on future NMOS specifications is likely to develop, as it ensures the work stays relevant across a broad community. 101 | 102 | ## NMOS Model and Terminology 103 | 104 | Before explaining the NMOS specifications themselves it is helpful to present the model we are using in a sequence of pictures. This will also introduce some of the terminology used in NMOS specifications – this is similar to that used in the [JT-NM RA][]. Be warned that in some cases common words (such as "Device") are used to represent "logical" things and so may not mean what you expect. A more complete list of NMOS terminology is provided in the [Glossary][]. 105 | 106 | In NMOS specifications a **Device** represents a _logical_ block of functionality, and a **Node** is the host for one or more Devices. 107 | 108 | ![Node-Devices](images/node-devices.png) 109 | 110 | Devices have _logical_ inputs and outputs called **Receivers** and **Senders**, for example: 111 | 112 | ![Node-Device-Sender](images/node-device-sender.png) 113 | 114 | or: 115 | 116 | ![Node-Device-Receiver](images/node-device-receiver.png) 117 | 118 | or: 119 | 120 | ![Node-Device-Senders-Receivers](images/node-device-senders-receivers.png) 121 | 122 | Devices, Senders and Receivers are all **Resources**. A Resource is a uniquely identified and addressable part of a networksed system: 123 | 124 | ![Node-Device-Sender-Receiver-UUIDs](images/node-device-sender-receiver-uuids.png) 125 | 126 | As an example, consider an IP-enabled camera. Associated with it there will probably be a Node, a Device, A video Sender, an audio Sender (if it has microphones), and maybe a data Sender (e.g. for position data), and perhaps Receivers for reverse video, intercom and control data. 127 | 128 | NMOS uses the term **Flow** for a sequence of video, audio, or time-related data, which can _flow_ from a Sender to a Receiver or Receivers. A Flow is treated as a resource and has a unique ID: 129 | 130 | ![Node-Device-Sender-Receiver-Flow](images/node-device-sender-receiver-flow.png) 131 | 132 | The elements within the Flow are called **Grains**. An example of a Grain is a video frame. Grains are associated with a position on a timeline: 133 | 134 | ![Grains-Flow](images/grains-flow.png) 135 | 136 | Although Grains often are regularly spaced, they don't have to be, for example in the case of Data Grains representing irregular events: 137 | 138 | ![Grains-Irregular](images/grains-irregular.png) 139 | 140 | Each Flow is also associated with a **Source**. This is the _logical_ originator of the Flow: 141 | 142 | ![Grains-Flow-Source](images/grains-flow-source.png) 143 | 144 | So in the NMOS model, a camera could be have several associated resources: 145 | 146 | - Node 147 | - Device 148 | - Video, Audio and Data Sources 149 | - Video, Audio and Data Senders 150 | - Video, Audio and Data Receivers (for tally, viewfinder and comms) 151 | - Video, Audio and Data Flows 152 | 153 | ![Overview-Class](images/overview-class.png) 154 | 155 | So far, NMOS specifications have worked with quite fine-grained Resources (pun unavoidable). Future NMOS specifications will consider functionality and content at a higher level, for example for detailing with "bundles" of Flows. 156 | 157 | ## Reading the Specifications 158 | 159 | ### Finding the Specifications 160 | 161 | A current list of NMOS Specifications is at : 162 | 163 | ![NMOS-Main-List](images/nmos-main-list.png) 164 | 165 | From there you can click on the entry in the "Name" column to go to the *rendered HTML documentation* for each Specification. Each Specification's "home page" contains a short introduction, typically including: 166 | 167 | - What does it do? 168 | - Why does it matter? 169 | - How does it work? 170 | 171 | To see the GitHub _repository_ that contains the source for the specification, click on the entry in the "Repository" column, or on "REPO" in the menu bar of the documentation. This takes you to the default git branch 172 | 173 | ![Find-Spec-Table](images/find-spec-table-crop.png) 174 | 175 | ### Navigating the Specifications 176 | 177 | The NMOS Interface Specications (IS-04 etc.) are layed out as below, where the directory names refer to what is in the repo: 178 | 179 | - `/APIs/`: RAML API definitions 180 | - `/APIs/schemas/`: JSON Schemas referenced from the RAML 181 | - `/examples/`: Example API messages 182 | - `/docs/`: Normative and supporting documents, starting with an Overview. 183 | 184 | The most imporant parts of these are listed on the Specification's main documentation page: 185 | 186 | ![Doc-Main-List](images/doc-main-list.png) 187 | 188 | And you can also use menu options: 189 | 190 | ![Menu-Docs-Spec](images/menu-docs-spec.png) 191 | 192 | ### Selecting a Version 193 | 194 | "VERSIONS..." in the documenation menu lets you select a particular release of a specification, or a live (development) branch: 195 | 196 | ![Nav-Versions](images/nav-versions.png) 197 | 198 | On the main Specification list, the "Version(s)" column lets you go directly to the documentation for the most important versions, and also download GitHub releases. 199 | 200 | ### Other Menu Options 201 | 202 | The documentation menu also allows you to go to the NMOS wiki, look at FAQs, access tools such as the NMOS test suite, switch to a different Specification, and search the documentation. 203 | > To search the repository, use the GitHub search feature. 204 | 205 | ![Header-Menu](images/header-menu.png) 206 | 207 | To go back to the main Spec list, click the NMOS logo. 208 | 209 | ### Viewing the APIs 210 | 211 | You can download the RAML and schema files directly from the repo (in the directories listed above). 212 | But in many cases it may be easier to view rendered versions, such as this one for the IS-04 Node API: 213 | 214 | ![API-Doc](images/api-doc.png) 215 | 216 | Then you can use the GET, PUT, etc. buttons to see a relevant request or response message, in this case for getting a source resource: 217 | 218 | ![API-Doc-Get](images/api-doc-get.png) 219 | 220 | > Note that this example includes three further referenced schemas. At present you will have to navigate to the "Schemas" page to see these. We hope to put in links soon though! 221 | 222 | ### Viewing the Documentation 223 | 224 | This is straightforward - just click on the relevant links. 225 | 226 | [AES-67]: http://www.aes.org/publications/standards/search.cfm?docID=96 "AES67-2015: AES standard for audio applications of networks - High-performance streaming audio-over-IP interoperability" 227 | 228 | [AMWA]: http://amwa.tv "Advanced Media Workflow Association" 229 | 230 | [Glossary]: https://specs.amwa.tv/nmos/branches/main/docs/Glossary.html "Glossary" 231 | 232 | [JT-NM]: http://jt-nm.org/ "Joint Task Force on Networked Media (JT-NM)" 233 | 234 | [JT-NM RA]: http://jt-nm.org/reference-architecture/ "Joint Task Force on Networked Media (JT-NM): Reference Architecture V1.0" 235 | 236 | [NMOS]: http://nmos.tv "Networked Media Open Specifications website" 237 | 238 | [Serial Digital Interface]: http://ieeexplore.ieee.org/document/7292109/ "ST 259:2008 - SMPTE Standard - For Television — SDTV1 Digital Signal/Data — Serial Digital Interface" 239 | 240 | [SMPTE Timecode]: http://ieeexplore.ieee.org/document/7291029/ "ST 12-1:2014 - SMPTE Standard - Time and Control Code" 241 | 242 | [ST 2022-6]: http://ieeexplore.ieee.org/document/7289943/ "ST 2022-6:2012 - SMPTE Standard - Transport of High Bit Rate Media Signals over IP Networks (HBRMT)" 243 | 244 | [ST 2110]: https://www.smpte.org/webcasts/Standards-SMPTE-ST-2110 "SMPTE ST 2110 – Professional Media over IP Networks" 245 | 246 | [TR-1001-1]: https://www.jt-nm.org/tr-1001-1 "JT-NM TR-1001: System Environment and Device Behaviors For SMPTE ST 2110 Media Nodes in Engineered Networks" 247 | 248 | [Wikipedia REST page]: https://en.wikipedia.org/wiki/Representational_state_transfer "Wikipedia REST page" 249 | -------------------------------------------------------------------------------- /docs/FAQ.md: -------------------------------------------------------------------------------- 1 | # NMOS FAQ 2 | {:.no_toc} 3 | 4 | - A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above 5 | {:toc} 6 | 7 | ## What are the Networked Media Open Specifications / NMOS? 8 | 9 | The Networked Media Open Specifications (NMOS for short) support professional AV media industry’s transition to a “fully-networked” architecture, by providing an interoperable approach to discovering, connecting and managing resources. 10 | 11 | NMOS specs are required by other industry recommendations, in particular [TR-1001-1][], which addresses requirements for the behaviour of media devices and the network enviroment in which devices run. 12 | 13 | ## Why is NMOS needed? 14 | 15 | SMPTE [ST 2110][] specifies how to transport and synchronise video, audio and ancillary data as RTP streams. But it doesn't cover how to discover or connect the devices that send and receive these streams. 16 | This leaves a risk that multiple proprietary approaches will proliferate, making interoperability more difficult and limiting what can be done with IP-based facilities. 17 | 18 | NMOS provides open and interoperable solutions to avoid this. 19 | 20 | ## Will NMOS do everything we need? 21 | 22 | **No**: it specifically addresses certain requirements in the stack (or "[pyramid][EBU-Tech-3371]" of technologies that the networked media industry need, and does so in an open and interoperable way. 23 | 24 | In some cases AMWA may publish new or updated specifications to provide extended or new functionality, such as confirmation that certain IS-06 actions have been taken. While in other cases AMWA may decide not to address new functionality. 25 | 26 | AMWA takes decisions of what to work on based on demonstrable business need of its members. 27 | 28 | In any case, any real solution will depend on other best practice network services such as DNS and DHCP. (See also question below about [TR-1001-1][].) 29 | 30 | ## Aren't there other things that do what NMOS does? 31 | 32 | In some cases yes. There are vendor-specific networked media products that include discovery and connection capabilities. But these are proprietary rather than open and interoperable. 33 | 34 | ## What form do the NMOS specifications take? 35 | 36 | The NMOS specifications provide a set of building blocks for accessing and working with networked media resources (Node, Device, Sender, Receiver, etc.) as modelled in the [JT-NM Reference Architecture][]. 37 | 38 | NMOS provides API and schema definitions for how these resources are represented and accessed in the control plane. As appropriate, these use a RESTful or publish-subscribe approach. 39 | 40 | The various NMOS specifications are written in a way that ensures that they are mutually compatible, and extensible. This is aided through by use of components across the IS's, including: 41 | 42 | - Common API semantics and syntax 43 | - Common approach to versioning 44 | - Common approach to extension through [Parameter Registers][] 45 | - Shared data and security models 46 | - Consistent use of GitHub repositories, documentation, testing and continuous integration 47 | 48 | ## What are IS-04, IS-05, IS-06, etc? 49 | 50 | These are identifiers assigned by AMWA for Interface Specifications they create, including the NMOS specs so far, starting with IS-04 for Discovery and Registration. 51 | See the [NMOS Documentation][] page for the full list. 52 | 53 | AMWA has other types of specifications such as "AS" is used for Application Specifications and "MS" for Data Model Specifications, and "BCP" is used for Best Current Practice. 54 | 55 | For more detail on AMWA's specification process see [BCP-001][]. 56 | 57 | ## Why not just have a single NMOS Specification/API? 58 | 59 | NMOS has multiple APIs because it includes multiple small pieces of functionality that provide building blocks to solve specific problems. So connecting two audio devices could involve functionality from IS-04, IS-05 and IS-06. Bundling everything into one monolithic specification/API is considered an anti-pattern, and gives rise to maintainability, scalability, interoperability and roadmap issues. 60 | 61 | ## Where can I find the NMOS specifications? 62 | 63 | Go to the main [NMOS Documentation][] page and follow the links to the required specifications. 64 | 65 | For each specification, you will find: 66 | 67 | - A description of what it does, why it's needed, how it works 68 | - An index of documentation 69 | - Lists of APIs, schemas and examples 70 | - Links to different development versions and releases 71 | 72 | ## Is NMOS a product? 73 | 74 | **No**. Vendors choose to build NMOS into their products, and users choose products that support NMOS. 75 | 76 | ## Where can I find products that support NMOS? 77 | 78 | [This page][NMOS-Solutions] lists many products supporting IS-04 and IS-05 and other NMOS specifications. 79 | 80 | See also the [JT-NM Tested][] TR-1001 Catalogue. 81 | 82 | ## Are there open source implementations? 83 | 84 | **Yes**, from a variety of sources, mostly using the Apache 2.0 license. They are listed on the [above][NMOS-Solutions] page. 85 | 86 | ## How are implementations tested? 87 | 88 | AMWA's open source [NMOS Testing][] tool provides simple web service for testing NMOS API implementations. 89 | It downloads and parses the specification to automatically create and run basic tests to check API syntax etc. We add manual tests to check specific functionality for each specification. 90 | 91 | The testing tool is useful in four ways: 92 | 93 | - It lets manufacturers test their implementations as they are developing them. 94 | - It helps save time during AMWA Incubator workshops. 95 | - It is used formally for JT-NM NMOS/TR-1001 testing (see below). 96 | - It helps identify interoperability issues between vendors. 97 | 98 | ## How are implementations certified? 99 | 100 | AMWA does not currently certify products. However the [JT-NM Tested][] programme covers IS-04 and IS-05 support for media devices within its TR-1001 testing, and maintains a catalogue of tested products. This will soon be extended to include testing of IS-08, and of registries and clients. 101 | 102 | The [NMOS Testing][] tool is used for this programme. 103 | 104 | ## When will IS-xx / NMOS be standardised? When is it “done”? 105 | 106 | The [NMOS Documentation][] page gives the current status of the Specifications. 107 | You will see that many are already published. You will also see that some have multiple versions. 108 | As the professional networked media industry matures we can expect requirements to keep changing, so although individual versions will be "done", NMOS will not – and cannot – stand still. 109 | 110 | This is commonplace with software products, and reflects the changing nature of the industry. 111 | However maintaining compatibility is important, and to date all changes introduced have been non-breaking. 112 | 113 | NMOS's API versioning semantics allow [different versions of implementations to work together][Upgrade Path], so that new systems can be used alongside older ones without things breaking; users will only need to upgrade to take advantage of new features. 114 | 115 | [TR-1001-1][] specifies use of IS-04 version 1.2 _or higher_ and IS-05 version 1.0 _or higher_. 116 | 117 | ## How can IS-04 be used in a scalable and resilient way? 118 | 119 | IS-04 defines the Registration and Query APIs, and how to find their endpoints. But it does not define how the API backend should be implemented, nor does it define how the registry data should be stored. This allows implementers and integrators to choose an approach to scaling each of these that is appropriate to topology of the infrastructure and the usage scenarios. There are a wide range of techniques available from how web APIs and databases can be implemented that can be used. 120 | 121 | The design of IS-04 includes a number of features to aid scalability and resilience: 122 | 123 | - A heartbeat mechanism allows a Node to know quickly when a registry instance has failed. The Node can dynamically switch between available registry instances upon failure, with zero downtime. 124 | - A priority mechanism allows specific APIs to be favoured. 125 | - The Query API provides filtering mechanisms, including pagination and basic/advanced query languages to help minimise query traffic. 126 | 127 | Also, IS-05 supports bulk connections, which reduces the network overhead when many changes are made togegther. 128 | 129 | Some details on the sorts of considerations which should go into scaling to very large systems is included in the End User Guides on the [wiki][NMOS Wiki], and [this presentation][Scalability] outlines results from a Networked Media Incubator study testing the performance of IS-04 and IS-05 at scale. 130 | 131 | ## Why and how does NMOS use DNS-SD? What does this mean for scalability? 132 | 133 | The first thing to point out is that DNS-SD plays a relatively minor role in NMOS. It helps minimise the amount configuration required by automating how to discover API endpoints: 134 | 135 | - Nodes use DNS-SD to find the IS-04 Registration API endpoints 136 | - Clients use DNS-SD to find IS-04 Query, IS-05 Connection and other API endpoints. 137 | 138 | Most NMOS traffic takes the form of HTTP/WebSocket API messages (also MQTT can be used for IS-07 event messages), and the choice of DNS-SD does not impact on scalability. 139 | 140 | ## What about mDNS? 141 | 142 | DNS-SD can be either multicast or unicast. Multicast DNS-SD (aka mDNS) provides a suitable approach for small setups, including when using peer-to-peer mode discovery. Unicast DNS-SD is preferred for larger deployments where an IS-04 registry is used (and multicast Node announcements were deprecated for registered mode in IS-04 v1.3.) 143 | 144 | Unicast DNS-SD is mandatory in [TR-1001-1][] environments. 145 | 146 | ## Does NMOS require multicast? 147 | 148 | **No.** See above. Furthermore, although IS-04/05 are often used with ST 2110 multicast streams they are not limited to these. 149 | 150 | ## Does NMOS only support RTP? 151 | 152 | **No.** The transport used for Flows is independent of how the Flows are discovered and how connections are made. 153 | 154 | We already use IS-05 to connect IS-07 WebSocket/MQTT event flows, and Streampunk's [Arachnid][] is an example of how Grains may be transported over HTTP(S), using HTTP headers to carry identity, timestamp and other Grain attributes. 155 | 156 | ## Does NMOS only support ST 2110? Or only uncompressed? 157 | 158 | **No.** See above. 159 | 160 | ## What is TR-1001-1? 161 | 162 | [TR-1001-1][] is a technical recommendation from the [JT-NM][], covering many aspects of how ST 2110, PTP and NMOS should be used for "engineered networks" such as those suitable for media facilities. It makes some constraints on the use of these standards and specifications and also requires certain network services to be available, including DNS, DHCP and LLDP, and defines certain startup and failover behaviour. 163 | 164 | TR-1001-1 could be considered as including a "profile" for the use of IS-04 and IS-05 for such facilities. 165 | 166 | ## Does IS-04 still support peer-to-peer discovery (i.e. without a registry)? 167 | 168 | Yes. Although TR-1001-1 requires the use of registered mode, this is still useful for small ad-hoc cases. 169 | 170 | ## Is there more to IS-07 than just tallies? 171 | 172 | Although its title refers to "Event and Tally", IS-07 can be used to carry any type of time-related data payload. For instance at the IBC 2019 IP Showcase we demonstrated a control panel that generates IS-07 events with information about the state of its buttons and dials, with several receiving devices subscribing to these event flows. This potentially could form the basis of an open approach to control transport. 173 | 174 | ## What is a "Broadcast Controller" and how does it relate to NMOS? 175 | 176 | "Broadcast Controller" is typically used for a system that tells items of broadcast equipment what to do. In a traditional studio facility this might include sending control commands to an SDI router or to a bank of studio monitors. A number of propriatry control protocols are used in the industry (recently network protocols but older equipment may use serial ports etc.), and many broadcast controllers can "speak many languages", and integrate with multiple vendors' APIs. Several AMWA members make such systems. 177 | 178 | A broadcast controller can support NMOS by including clients for NMOS APIs. So: 179 | 180 | - An IS-04 client could find Senders and Receivers 181 | - An IS-05 client could make/break connections that the controller manages 182 | - An IS-06 client could make sure the network layer is ready for the connections 183 | - An IS-07 client could accept incoming event information that the controller needs to know about 184 | - An IS-08 client could make any audio channel mappings required 185 | 186 | ## What is a Source, Flow, Grain, Node, Device, Sender, Receiver...? 187 | 188 | NMOS uses these common terms (capitalised) in specific ways that may not always correspond to your expectation. They are defined in the specifications, explained in the [Technical Overview][] and summarised in the [Glossary][]. 189 | 190 | ## How can NMOS be used securely? 191 | 192 | NMOS APIs have supported use of HTTPS and WSS (secure WebSockets) since IS-04 v1.1. 193 | 194 | The [BCP-003][] set of Best Common Practices cover how to secure NMOS APIs: 195 | 196 | - BCP-003-01 specifies the use of TLS 1.2 or later to encrypt communications. 197 | - This is now the default for accessing the IS-04 registry at AMWA workshops. 198 | - BCP-003-02 (in progress) specifies the use of OAuth 2.0 and JSON Web Tokens to authorise API calls. 199 | 200 | Of course, securing just the APIs isn't sufficient, and the JT-NM Tested activities now include vulnerability scanning. 201 | 202 | ## Can NMOS servers be virtualised? Can they be "in the cloud"? 203 | 204 | Although current interest in NMOS is mostly in how to discover and connect physical devices, 205 | we frequently run the IS-04 Registration and Query API servers on VMs, or in Docker containers. We sometime also use public cloud hosted servers for remote testing. 206 | 207 | ## Does NMOS only deal with individual elemental Flows? 208 | 209 | **No.** Since v1.1, IS-04 has supported multiplexed Flows. In particular, it has been used with ST 2022-6 (SDI over RTP). 210 | 211 | Also [BCP-002-01][BCP-002] specifies how to group together "natural" groups, such as video, audio and data coming from a camera, or multiple video Receivers on a multiviewer. 212 | 213 | ## How do I make my product compatible with NMOS? 214 | 215 | Some suggestions: 216 | 217 | - Be familiar with the specifications, how they work, what they can and can't do. 218 | - Read the developer resources on the Wiki. 219 | - Try one or more [open source implementations][NMOS-Solutions]. 220 | - Use the [Testing Tool][NMOS Testing], make sure it passes. 221 | - Join the [JT-NM Tested][] activities. 222 | - Consider joining AMWA and participating in the Incubator and workshops, where you will benefit from a helpful community. 223 | - Contribute issues or pull requests to GitHub. 224 | - Ask to have you product included on the Wiki. 225 | 226 | ## How does my company / project show its Unique Selling Points? 227 | 228 | SDI has allowed users to choose between vendors based on the functionality, features and performance of their devices (amongst other factors), and be sure that they will interoperate correctly, rather than have to think about "box X will work with box Y but not box Z". 229 | 230 | It's similar with NMOS – but better because users will be able to use software and virtualised devices, not just hardware ones. NMOS addresses "foundational" building blocks such as identity, discovery and connection management that enable interoperability between networked devices. 231 | 232 | But NMOS doesn't (and won't) attempt to "standardise" the functions, features, or performance of the networked devices. It will however provide a framework that manufactures can link to their specific information. For example hierarchical URIs allow allow manufacturer-specific elements to be included in JSON API messages. 233 | 234 | ## Who is AMWA? 235 | 236 | [AMWA][] is the Advanced Media Workflow Association. Originally it was known for developing application specifications for using [MXF][] (for example the [AS-11][] family is used for delivery of finished media assets to a broadcaster or publisher). 237 | 238 | In recent years AMWA has widened its attention to cover the application and control layers for networked media. Much of this is happening in the Networked Media Incubator project, and this complements other industry activity looking at wire formats and codecs. 239 | 240 | ## What is the Networked Media Incubator? 241 | 242 | AMWA set up the Networked Media Incubator (also called just "Incubator" here) in September 2015 "to establish open specifications for end-to-end identity, media transport, timing, discovery and registration, connection management and control." 243 | 244 | ## If the “O” in NMOS means “open”, why are Incubator workshops closed? 245 | 246 | The Incubator, and its workshops, have been set up to provide an environment to encourage cooperation between members, and allow them to work together, online and at workshops towards interoperability in a low-risk way. This means that they don't have to worry about their fellow participants – who also may be their competitors – reporting negatively about their implementation, as this is forbidden by the [Incubator rules][]. 247 | 248 | In addition, there are costs associated with running AMWA and the Incubator that are met at least in part through membership fees. Companies need to be an Associate or higher member to participate, and a nominal cost Indvidual membership is also available. 249 | 250 | Of course the NMOS specifications themselves are made publicly available (Apache 2 licence) as early as is practical, and at latest on elevation to AMWA Specification. 251 | 252 | ## Can I be sure that I won't be subject to patent fees/litigation if I implement NMOS? 253 | 254 | AMWA's [IPR Policy][] attempts to minimise such a risk by requiring participants to disclose any knowledge of possibly relevant patents and requiring all AMWA Specifications to have an IPR review. 255 | 256 | In addition, NMOS/Incubator is "RAND-Z" so it requires any contributions to be made available on a reasonable and non-discriminatory basis at zero cost. 257 | 258 | And the NMOS APIs are built on widely adopted patterns used on the Internet/Web, using open-source components wherever available. 259 | 260 | ## Why does IS-04 have connection management if there is IS-05? 261 | 262 | **History.** IS-04 v1.0 and v1.1 predate IS-05. A basic connection management mechanism was needed at earlier Incubator workshops so that we could connect together senders and receivers. This was included in IS-04 as an expediency, but doesn't really belong there. Recent workshops use the separate, and more flexible device connection management API. The IS-04 mechanism has been deprecated in v1.2 and may be removed in later versions. 263 | 264 | ## Why does IS-05 use SDP? And why not _just_ use SDP? 265 | 266 | Despite its ugliness, as of 2021 [SDP][] is still regularly used with RTP media streams, and is included in SMPTE's ST 2110-10 for describing streams. So 2110-compliant senders and receivers will be using it anyway, and it makes sense for IS-05 to use it. 267 | 268 | However, IS-05 doesn't _require_ the use of SDP. It abstracts it through the Sender's ``/transportfile`` resource, and alternative formats can be used. For a non-RTP transport this will certainly be the case (e.g. DASH manifest). 269 | 270 | And relying on _just_ SDP itself isn't enough. It describes the streams but doesn't provide a means of making connections, so we would be reliant on proprietary mechanisms. 271 | 272 | ## Why doesn't IS-xx do yyy? How can I get yyy done? 273 | 274 | Maybe it's because that's not something the specification should be doing. For instance, connections could use a break-before-make or make-before-break, but that is implementation/infrastructure-dependent; IS-05 is there to tell the implementation to make the connection, and possibly when to do so. 275 | 276 | Or maybe it's a feature that is still on in development,or AMWA members have not (yet) provided a business reason for it to happen. See earlier question. 277 | 278 | To make a difference, consider joining AMWA. 279 | 280 | ## What is the relationship between connection management and network control? 281 | 282 | The NMOS Network Control API (IS-06) is concerned with what happens within the network itself. It deals with lower-level concepts than IS-04 and IS-05, i.e. network endpoints on NICs and switches, and control of the individual "network flows" between these. 283 | 284 | The NMOS Connection Management API (IS-05) is concerned with creation of higher-level _logical_ connections between the Senders and Receivers of Devices. Although it's quite possible that an IS-05 connection/disconnection request may cause a controller to invoke IS-06 to "make it happen", this doesn't have to be the case. 285 | 286 | ## Can I use IS-xx without having to use IS-yy? 287 | 288 | **Yes, but...** It's possible to use the NMOS specifications independently, but they benefit from being used in combination. For example, the Connection Management API (IS-05) allows connections between manually configured IP addresses (perhaps entered into a spreadsheet?), but this becomes unmanageable in large and changing environments, where the benefits of automated discovery using IS-04 become overwhelming. 289 | 290 | And [TR-1001-1][] requires use of IS-05. 291 | 292 | ## How do NMOS specifications fit into the wider community activity on interoperability? 293 | 294 | The **Joint Task Force on Networked Media** is a an industry group that was set up a few years ago to coordinate work on interoperability. The NMOS specifications are part of the JT-NM industry roadmap and IS-04 and IS-05 are mandated in the [TR-1001-1][] recommendations. 295 | 296 | The [EBU][EBU-R-152] and [WBU][WBU-Pyramid] support the adoption of IS-04 and IS-05. 297 | 298 | [AMWA]: http://amwa.tv "Advanced Media Workflow Association" 299 | 300 | [Arachnid]: https://github.com/Streampunk/arachnid "Streampunk Arachnid" 301 | 302 | [AS-11]: http://www.amwa.tv/projects/AS-11.shtml "AMWA AS-11" 303 | 304 | [BCP-001]: https://www.amwa.tv/specifications "AMWA BCP-001 AMWA Specification Process" 305 | 306 | [BCP-002]: https://specs.amwa.tv/bcp-002 "AMWA BCP-002 Recommendations for Grouping NMOS Resources" 307 | 308 | [BCP-003]: https://specs.amwa.tv/bcp-003 "AMWA BCP-003 Security recommendations for NMOS APIs" 309 | 310 | [EBU-R-152]: https://tech.ebu.ch/publications/r152 "EBU R 152: Strategy for the Adoption of an NMOS Open Discovery & Connection Protocol" 311 | 312 | [EBU-Tech-3371]: https://tech.ebu.ch/publications/tech3371 "EBU Tech 3371: The Technology Pyramid for Media Nodes: Minimum User Requirements to build and manage an IP-Based Media Facility" 313 | 314 | [Glossary]: https://specs.amwa.tv/nmos/branches/main/docs/Glossary.html "Glossary" 315 | 316 | [NMOS-Solutions]: https://specs.amwa.tv/nmos/branches/main/docs/NMOS_Solutions.html "NMOS Solutions" 317 | 318 | [Incubator rules]: https://www.amwa.tv/bylaws-policy-documents-and-license "AMWA Networked Media Incubator rules" 319 | 320 | [IPR Policy]: https://www.amwa.tv/bylaws-policy-documents-and-license "AMWA IPR Policy" 321 | 322 | [JT-NM]: http://jt-nm.org "Joint Task Force on Networked Media (JT-NM)" 323 | 324 | [JT-NM Reference Architecture]: http://jt-nm.org/RA-1.0/ "JT-NM Reference Architecture 1.0" 325 | 326 | [JT-NM Tested]: http://jt-nm.org/jt-nm_tested/ "JT-NM Tested" 327 | 328 | [MXF]: http://tech.ebu.ch/docs/techreview/trev_2010-Q3_MXF-2.pdf "MXF - a technical review" 329 | 330 | [NMOS Documentation]: https://specs.amwa.tv/nmos "NMOS Documentation" 331 | 332 | [NMOS Testing]: https://amwa-tv.github.io/nmos-testing/ "NMOS API Testing Tool" 333 | 334 | [Parameter Registers]: https://specs.amwa.tv/nmos-parameter-registers/ "NMOS Parameter Registers" 335 | 336 | [Scalability]: http://www.ipshowcase.org/wp-content/uploads/2019/05/1030-Robert-Porter-Scalability-and-Performance-of-IS-04-and-IS-05-and-How-TR-1001-1-Helps.pdf "Scalability" 337 | 338 | [SDP]: https://tools.ietf.org/html/rfc4566 "SDP: Session Description Protocol" 339 | 340 | [ST 2110]: https://www.smpte.org/smpte-st-2110-faq "ST 2110 FAQ" 341 | 342 | [Technical Overview]: https://specs.amwa.tv/nmos/branches/main/docs/Technical_Overview.html "NMOS Technical Overview" 343 | 344 | [TR-1001-1]: http://www.jt-nm.org/documents/JT-NM_TR-1001-1:2018_v1.0.pdf "JT-NM TR-1001: System Environment and Device Behaviors For SMPTE ST 2110 Media Nodes in Engineered Networks" 345 | 346 | [Upgrade Path]: https://specs.amwa.tv/is-04/v1.3/docs/6.0._Upgrade_Path.html "Upgrade Path" 347 | 348 | [WBU-Pyramid]: https://worldbroadcastingunions.org/wbu-supports-ebus-technology-pyramid-for-media-nodes/ "WBU Endorses EBU Pyramid" 349 | 350 | [NMOS Wiki]: https://github.com/AMWA-TV/nmos/wiki "NMOS Wiki" 351 | --------------------------------------------------------------------------------