NMOS
bilbycast-edge implements the broadcast-audio subset of the AMWA NMOS specifications:
| Spec | Endpoint | Coverage |
|---|---|---|
| IS-04 v1.3 | /x-nmos/node/v1.3/ | self, devices, sources, flows, senders, receivers |
| IS-05 v1.1 | /x-nmos/connection/v1.1/ | single sender/receiver staged + active + transporttype + constraints |
| IS-08 v1.0 | /x-nmos/channelmapping/v1.0/ | io, map/active, map/staged, map/activate (active map persists to disk) |
| BCP-004 | embedded in IS-04 receiver caps | constraint_sets for ST 2110 audio inputs |
| mDNS-SD | _nmos-node._tcp | best-effort registration via the mdns-sd crate |
Format detection
Section titled “Format detection”Each flow’s input is classified at IS-04 list time:
InputConfig::St2110_30/St2110_31→urn:x-nmos:format:audioInputConfig::St2110_40→urn:x-nmos:format:data- everything else →
urn:x-nmos:format:mux
The same classifier drives the receiver caps block. Audio receivers
advertise BCP-004 constraint sets keyed by urn:x-nmos:cap:format:*
URNs (sample_rate, channel_count, sample_depth) so NMOS controllers can
reject incompatible senders before activation.
BCP-004 receiver capabilities
Section titled “BCP-004 receiver capabilities”{ "caps": { "media_types": ["audio/L16", "audio/L24"], "constraint_sets": [{ "urn:x-nmos:cap:format:media_type": { "enum": ["audio/L16", "audio/L24"] }, "urn:x-nmos:cap:format:sample_rate": { "enum": [{ "numerator": 48000 }] }, "urn:x-nmos:cap:format:channel_count": { "enum": [2] }, "urn:x-nmos:cap:format:sample_depth": { "enum": [24] } }] }}ST 2110-40 receivers advertise media_types: ["video/smpte291"].
Non-ST-2110 receivers continue to advertise the historical
video/MP2T shape so existing NMOS controllers don’t break.
PTP clocks
Section titled “PTP clocks”When any flow on the node sets clock_domain, the IS-04 /self
resource includes a single PTP clock entry (name: "clk0",
ref_type: "ptp"). Sources whose flow has clock_domain set
reference this clock by name. The locked field is reported as false
until live PTP integration lands; the manager UI uses
FlowStats.ptp_state.lock_state for the real view — see
ST 2110 for the PTP architecture.
IS-08 audio channel mapping
Section titled “IS-08 audio channel mapping”The IS-08 endpoints expose every ST 2110-30/-31 audio input and output
under /io. The active map is persisted to
<config_dir>/nmos_channel_map.json (next to config.json) and
reloaded on startup. Both staged and active maps support the standard
PUT/POST + activate workflow.
Bilbycast does not currently re-route channels internally — the map is a passthrough — but the endpoints exist so external NMOS controllers can stage and activate maps and the manager UI can render the channel layout.
Bounds: at most 1024 outputs per map, at most 64 channels per
output. Controllers exceeding these limits receive a
413 PAYLOAD_TOO_LARGE response.
mDNS-SD registration
Section titled “mDNS-SD registration”On startup the edge calls a small mdns-sd helper to register
_nmos-node._tcp on the local link. Failures (no multicast on the
selected interface, daemon errors) are logged once and swallowed; flow
startup is never blocked. The handle is dropped on process exit, which
unregisters the service cleanly.
Backward compatibility
Section titled “Backward compatibility”Multi-essence audio + data resources are additive — old NMOS
controllers that only consumed format:mux continue to work because
mux flows are still classified the same way. The IS-08 router is
mounted under a fresh URL prefix and is invisible to controllers that
don’t speak it. The mDNS-SD registration is supplementary to manual
NMOS registry configuration.
Pending external validation
Section titled “Pending external validation”The following items are deferred until matching tooling becomes available in the test lab:
- AMWA NMOS Testing Tool runs against IS-04, IS-05, IS-08, BCP-004.
Expected pass matrix:
- IS-04: pass on
test_01(resources have valid UUIDs / formats / transports) throughtest_19(clocks). - IS-05: pass on staged/active round-trip for sender + receiver, with transport-file SDP advertisement for ST 2110 senders.
- IS-08: pass on
io,map/active,map/staged,map/activatehappy paths. - BCP-004: pass on receiver caps containing
media_typesplus aconstraint_setsblock matching the configured sample rate / channel count / bit depth.
- IS-04: pass on
- Sony NMOS Commissioning Tool end-to-end smoke against a real Lawo or Riedel device.