One container per channel. Built like capture/build-with-decklink: NDI + DeckLink SDKs fetched at build, runs --privileged with Xvfb for the GL context where no real display is present. Components: - entrypoint.sh: Xvfb + CasparCG launch, creates /media/live/<CHANNEL_ID> - src/amcp.js: TCP AMCP client - src/playout-manager.js: channel lifecycle, playlist walk via LOADBG AUTO for gapless transitions; primary consumer (decklink/ndi/srt/rtmp) plus a second FFMPEG HLS consumer (~600 kbps, 2s segments) for the UI preview - src/index.js: HTTP shim — /channel/start, /playlist/load, transport - frame-rate helper picks fps from video_format (59.94 → 60000/1001) so SEEK / LENGTH frame math is correct
18 lines
459 B
JSON
18 lines
459 B
JSON
{
|
|
"name": "wild-dragon-playout",
|
|
"version": "1.0.0",
|
|
"description": "Wild Dragon MAM playout sidecar — wraps a CasparCG Server instance and drives it over AMCP for master-control playout (SDI / NDI / SRT / RTMP).",
|
|
"type": "module",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js"
|
|
},
|
|
"engines": {
|
|
"node": ">=18"
|
|
},
|
|
"dependencies": {
|
|
"express": "^4.18.0",
|
|
"cors": "^2.8.0",
|
|
"dotenv": "^16.4.0"
|
|
}
|
|
}
|