ZAMPP2: DeckLink Duo Mini — frame=0 despite signal detection, /dev/blackmagic not mounted in sidecar container #10

Closed
opened 2026-05-21 18:29:49 -04:00 by zgaetano · 0 comments
Owner

Fixed in commit on main.

Root cause 1 — /dev/blackmagic not mounted in sidecar:
recorders.js POST /:id/start never added device binds for SDI containers. Fix: when source_type = 'sdi', /dev/blackmagic:/dev/blackmagic is now appended to HostConfig.Binds for local spawns, and the same bind is applied by the node-agent for remote spawns.

Root cause 2 — sidecar spawned on wrong host:
All containers were always spawned against the local Docker socket on zampp1, even when the recorder's node_id pointed to zampp2 (where the card is). Fix: resolveNodeTarget() looks up the recorder's cluster node; if it's a different hostname the sidecar is created via POST /sidecar/start on the remote node-agent instead.

New node-agent endpoints (talk to local /var/run/docker.sock):

  • POST /sidecar/start — create + start container (host network, privileged, /dev/blackmagic bind for SDI)
  • DELETE /sidecar/:id — stop + remove
  • GET /sidecar/:id/status — Docker inspect + poll capture service

docker-compose.worker.yml — node-agent now mounts /var/run/docker.sock and accepts LIVE_DIR env var.

Deploy steps on zampp2:

docker compose -f docker-compose.worker.yml build
docker compose -f docker-compose.worker.yml up -d --force-recreate node-agent
Fixed in commit on main. **Root cause 1 — `/dev/blackmagic` not mounted in sidecar:** `recorders.js` `POST /:id/start` never added device binds for SDI containers. Fix: when `source_type = 'sdi'`, `/dev/blackmagic:/dev/blackmagic` is now appended to `HostConfig.Binds` for local spawns, and the same bind is applied by the node-agent for remote spawns. **Root cause 2 — sidecar spawned on wrong host:** All containers were always spawned against the local Docker socket on zampp1, even when the recorder's `node_id` pointed to zampp2 (where the card is). Fix: `resolveNodeTarget()` looks up the recorder's cluster node; if it's a different hostname the sidecar is created via `POST /sidecar/start` on the remote node-agent instead. **New node-agent endpoints** (talk to local `/var/run/docker.sock`): - `POST /sidecar/start` — create + start container (host network, privileged, `/dev/blackmagic` bind for SDI) - `DELETE /sidecar/:id` — stop + remove - `GET /sidecar/:id/status` — Docker inspect + poll capture service **`docker-compose.worker.yml`** — node-agent now mounts `/var/run/docker.sock` and accepts `LIVE_DIR` env var. **Deploy steps on zampp2:** ``` docker compose -f docker-compose.worker.yml build docker compose -f docker-compose.worker.yml up -d --force-recreate node-agent ```
zgaetano changed title from ZAMPP2: DeckLink Duo (2) captures 0 video frames — port likely configured as output to ZAMPP2: DeckLink Duo Mini — frame=0 despite signal detection, /dev/blackmagic not mounted in sidecar container 2026-05-21 18:33:38 -04:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: WildDragonLLC/dragonflight#10
No description provided.