Skip to content

SMPTE ST 2110 — Uncompressed over IP

The professional broadcast IP standard: uncompressed video (ST 2110-20) and audio (ST 2110-30) over the network, hardware-paced for low latency. It exposes the same plugin ABI as VDI/MXL, so it chains transparently into any pipeline.

  • Library: libst2110.so · Implementation: C++ on Intel MTL + DPDK
  • Direction: tx and rx
{
"direction": "tx",
"mtl": {
"interface": "0000:af:00.0",
"local_ip": "192.168.96.10", "netmask": "255.255.255.0",
"tx_queues_cnt": 16, "rx_queues_cnt": 16
},
"video": {
"ip": "239.168.85.20", "port": 20000, "payload_type": 96,
"width": 1920, "height": 1080, "fps": "p25",
"format": "v210", "transport_format": "yuv_422_10bit",
"pacing": "narrow", "packing": "BPM", "framebuff_cnt": 4
},
"audio": {
"ip": "239.168.85.21", "port": 30000, "payload_type": 97,
"sampling": "48kHz", "channels": 2, "ptime": "1ms"
}
}
  • mtl.interface is a DPDK PCIe address, not a Linux interface name — the NIC is bound to DPDK.
  • pacing: narrow is gapped, ST 2110-21-compliant hardware pacing.
  • transport_format / packing follow ST 2110-20 conventions.
  • plugin_query_config returns runtime stats (uptime, frame counts, RX/TX packet stats, watchdog health).

Heavyweight prerequisites: DPDK v25.11 with 7 MTL patches, Intel MTL v26.01+ built against that patched DPDK, a local prefix install, and a Python venv with pyelftools for the Meson build. Design: one shared MTL device handle per process (lazy-init, refcounted); interrupt-driven RX callbacks bridge to the polling plugin_read API via a lock-free ring buffer; a stall watchdog monitors frame progress.