Live output and encoding
Live output and encoding
Operator guide for encoded output on Pixop Prime: what the appliance muxes after GPU enhancement, how that differs from picture processing and from WAN transport, and how to change profiles safely. This page is for experienced broadcast engineers commissioning HEVC MPEG-TS—not a generic NVEncC manual.
Version gate: Encoder defaults and qualified flags can differ by AMI recipe and delivery channel (Marketplace vs KVM). On any appliance, run pixop-version and read the installed /etc/pixop-live/nvencc.args before copying examples from docs or from a lab instance. See Supported GPUs FAQ for qualification context.
Three configuration planes
Pixop Prime deliberately separates concerns. Mixing them is the most common commissioning mistake.
| Plane | Primary location | What you control | Apply mechanism |
|---|---|---|---|
| Pipeline / encoder output | /etc/pixop-live/nvencc.args | Resolution, bit depth, chroma subsampling, VUI colour signalling (SDR / HLG / PQ), HEVC bitrate and GOP, optional pre-Pixop YADIF, optional NVENC quality/latency trade-offs | Edit marked blocks → pixopctl restart (Pixop container only) |
| Picture processing | Remote-control UI http://<appliance>:8080 → /var/lib/pixop-live/parameters/params.json | Restoration, scaling policy, SDR→HDR processing, grain, PostFX, controller behaviour | UI (persists to disk); keys in params.json override matching --vpp-pixop-live values at container startup—see Picture processing |
| Transport / TS backbone | /etc/pixop-live/network.env, /etc/pixop-live/tsduck/*.env, relay *.ingest.args / *.egress.args | SRT passphrases, latency, PIDs, TS_TARGET_BITRATE, on-guest multicast hand-offs | tsduckctl / stack restarts—see Transport configuration |
Operational fact: NVEncC reads UDP MPEG-TS from the internal tap 239.0.0.1:5500 and emits replacement elementary stream to 239.0.0.1:5501 (pkt_size=1316). TSDuck merges that back into the outbound multiplex toward 239.0.0.1:5600 and SRT egress on UDP 5001. Those addresses are on-guest multicast hops—not customer WAN endpoints.
Metadata vs processing: Flags such as --colormatrix, --colorprim, and --transfer set encoded signal metadata (what decoders and displays believe about the stream). They are not a guarantee that Pixop performed a particular tone-mapping or HDR transform. Actual luminance and colour rendering come from the Pixop stack (license, GPU, and UI/params.json processing). Align both encoder signalling and picture settings with what downstream monitors, IRDs, and origin servers expect.
For the full file map, see Configuration and Configuration change control.
Anatomy of nvencc.args
nvencc.argsThe installed appliance file is /etc/pixop-live/nvencc.args. It controls output and encoding when Pixop LIVE starts. Edit only the operator-marked blocks during a planned change window (back up the file first), then restart Pixop as documented below. Lines starting with # are comments; inline # comments are also ignored when the service reads the file.
Input contract (do not change casually)
| Setting | Role |
|---|---|
-i udp://239.0.0.1:5500?… | Pre-Pixop MPEG-TS from TSDuck ingress |
--avsw | Software demux/decode path for live TS |
--input-option fflags:+discardcorrupt | Drop corrupt TS packets instead of stalling |
--decoder-recovery-watchdog balanced | Decoder recovery policy for live input |
Real-time behaviour (protected)
--realtime, --lowlatency, --timestamp-passthrough, --rt-max-pts-jump, and --rt-max-frame-delay implement the qualified live latency envelope. Do not tune these during normal broadcast commissioning unless Pixop support directs you.
Processing hook (mostly protected)
| Flag | Operator relevance |
|---|---|
--vpp-resize pixop-live | Pixop scaling path—fixed product integration |
--vpp-pixop-live license_file=…,params_file=…,restoration_mode=full,controller_preset=realtime_balanced | AWS baseline; restoration_mode / controller_preset are policy, not day-to-day encoder knobs. Routine picture keys belong in the UI, not duplicated here |
Host license bind-mount: LICENSE_HOST (default /etc/pixop-live/license.jwt) → /opt/pixop/license.jwt:ro inside the container when the file exists.
Mux, monitoring, and output contract (protected)
| Block | Purpose |
|---|---|
-c hevc, --gop-len 50 | HEVC elementary stream; GOP length in frames (not seconds—cadence follows input time base, not a fixed appliance frame rate) |
-f mpegts, --process-ts-scte35, --repeat-headers | MPEG-TS mux; SCTE-35 handling; repeating parameter sets |
--perf-monitor all, --perf-monitor-log - | In-process performance counters |
--http-port 8080, --https-port 0 | Metrics and remote-control HTTP on the guest |
-o udp://239.0.0.1:5501?pkt_size=1316 | Replacement video to TSDuck merge |
Operator-editable blocks
Comments in the shipped file mark these sections. After any change: pixopctl restart. SRT ingest stays up; expect a processing/output gap on the replacement leg while the container restarts.
| Block | Typical flags | Notes |
|---|---|---|
| Optional higher-efficiency encoding | #--tune hq, #--lookahead 8, #--lookahead-level 1, #--multipass 2pass-quarter | Shipped commented. Template notes ~160 ms extra latency at 50 fps when lookahead 8 is enabled (8 frames). Not a universal latency number for every input cadence |
| Optional YADIF | #--vpp-yadif mode=bob | Pre-Pixop bob deinterlace only. Not the Pixop DNN deinterlace post-processor—do not enable both blindly |
| Output resolution | --output-res 3840x2160 (1080p example commented) | Drives encoded raster after Pixop processing |
| Output depth | --output-depth 10 | 10-bit HEVC in default profile |
| Output chroma | --output-csp yuv420 | Also yuv422, yuv444 per file comments |
| Colour signalling | Exactly one active trio: HLG (bt2020nc / bt2020 / arib-std-b67), PQ (… / … / smpte2084), or SDR (bt709 triplet) | Comment out the active group before enabling another |
| Range | --colorrange tv | Legal range for broadcast-style chains |
| Bitrate | --cbr <kbps>, --vbv-bufsize <kbps>, --cbr-filler | Keep CBR and VBV equal. --cbr-filler is part of the qualified CBR profile—leave enabled unless support says otherwise |
Chroma qualification (engineering template):
--output-csp | Requirement stated in template |
|---|---|
yuv420 | Default 4:2:0 profile |
yuv422 | NVIDIA Blackwell; AWS G7 / G7e |
yuv444 | Listed as valid; practical support depends on GPU generation and NVEncC—confirm with pixop-nvencc --check-hw on your image |
Backbone vs video bitrate: Default operator video CBR is 37 000 kbps (--cbr / --vbv-bufsize). The internal TS backbone target in network.env is TS_TARGET_BITRATE=50000000 (50 Mbps). Video bitrate and backbone capacity are related but not identical—raising encoder bitrate without understanding merge and egress pressure can contribute to pixop-flow exit 3 (tap at or above backbone target). See Monitoring and troubleshooting.
Pixop does not document a single guaranteed 4K50/4K60 outcome for every GPU size, license, and restoration setting. Size instances empirically; monitor GPU and frame metrics on your feed.
Profile design in change control
Treat each on-air profile as a controlled document: geometry, chroma, signalling triplet, bitrate, GOP, optional lookahead multipass, and optional YADIF. Record the input format separately (interlaced vs progressive, SDR vs HDR content).
Colour groups: Enable one complete matrix / primaries / transfer set. Mixing active lines from HLG and PQ groups produces undefined encoder metadata.
Downstream compatibility: HLG (arib-std-b67) and PQ (smpte2084) with BT.2020 primaries are common for UHD HDR chains; SDR BT.709 is appropriate when receivers expect Rec.709 end-to-end. Match the monitoring tool (waveform, analyser, IRD) to the signalled transfer—not only the marketing label on the slide.
GOP and latency: --gop-len 50 at 50 Hz input is roughly one second between random access points; at 25 Hz it is two seconds. Shorter GOP can ease some receiver start-up behaviour at the cost of efficiency. Optional lookahead adds encoder delay on top of SRT and GPU pipeline latency.
Deinterlace caution: Use --vpp-yadif mode=bob only when the workflow explicitly needs bob deinterlacing before Pixop. Pixop’s DNN deinterlace (UI) is a different stage.
Example profiles (minimal diffs from shipping baseline)
Shipping baseline (active in template): 3840×2160, 10-bit, yuv420, HLG BT.2020, 37 Mbps CBR, GOP 50, no YADIF, no HQ/lookahead block.
A — SDR 1080p contribution (illustrative diff only):
- --output-res 3840x2160
+ --output-res 1920x1080
# Comment HLG trio; uncomment SDR trio:
- --colormatrix bt2020nc
- --colorprim bt2020
- --transfer arib-std-b67
+ --colormatrix bt709
+ --colorprim bt709
+ --transfer bt709
- --cbr 37000
- --vbv-bufsize 37000
+ --cbr 12000
+ --vbv-bufsize 12000B — PQ UHD (illustrative diff only):
# Disable HLG trio; enable PQ trio (one group active):
- --transfer arib-std-b67
+ --transfer smpte2084
# (ensure bt2020nc + bt2020 lines match the PQ block in the file)C — Optional quality/latency trade-off (illustrative diff only):
-#--tune hq
-#--lookahead 8
-#--lookahead-level 1
-#--multipass 2pass-quarter
+--tune hq
+--lookahead 8
+--lookahead-level 1
+--multipass 2pass-quarterBack up nvencc.args, then apply with pixopctl restart. Optional HQ/lookahead adds roughly ~160 ms encoder delay at 50 fps only when lookahead 8 is enabled—not a universal latency number for every input cadence.
Edit process and validation
Backup and permissions
/etc/pixop-live/nvencc.args is typically owned root:root with mode 0640. Viewing and editing the file on the guest usually requires sudo (or root). Operator CLIs such as pixopctl re-exec via sudo internally—you normally do not prefix pixopctl with sudo.
Before editing:
pixop-version
sudo cp -a /etc/pixop-live/nvencc.args ~/nvencc.args.$(date -u +%Y%m%dT%H%M%SZ).bakFor support archives without secrets, use pixop-pack-config (redacted /etc/pixop-live only)—see Configuration change control.
Edit rules
- Change only
=== OPERATOR:blocks (and their commented alternatives) unless Pixop support instructs otherwise. - Preserve input, realtime, mux, HTTP, and output UDP lines.
- After colour profile changes, verify no duplicate active
--colormatrix/--colorprim/--transfergroups. - Leave
--cbr-fillerin place for the qualified CBR recipe unless directed otherwise.
Apply
pixopctl restart
pixopctl statusUse restart, not recover, for encoder-only changes so primary SRT ingest stays connected (pixopctl). Downstream may still see a brief glitch on the enhanced path while Pixop restarts.
UI vs restart: Picture tweaks in :8080 persist to params.json and affect processing according to the UI/product behaviour for your build. nvencc.args never hot-reloads—always restart Pixop after encoder edits.
Read-only verification (AL2023 guest)
pixop-version
pixopctl health
pixop-flow --secs 5Confirm non-zero throughput on Pixop -> replacement (239.0.0.1:5501 by default) and Final merged TS / SRT main egress when your encoder and downstream receiver are active. Compare pre-Pixop structure with pixop-probe-input (tap :5500); validate downstream program/PID and HEVC VUI on the receiver or analyser on your SRT egress path—there is no separate shipped “probe replacement only” shortcut beyond flow and receiver-side tools (Stream diagnostics).
Inspect encoder capability flags read-only:
pixop-nvencc --check-hwDo not paste passphrases, JWTs, or customer WAN addresses into tickets.
Troubleshooting
| Symptom | Likely layers to check | Conservative action |
|---|---|---|
| Wrong colours / HDR mode on monitor | Signalling in nvencc.args vs actual processed content in UI/params.json; receiver tone-mapping | Fix one active colour group; align UI HDR/restoration with intent; pixopctl restart after nvencc.args changes |
Encoder fails or falls back after yuv422 | GPU generation (Blackwell / G7) | Revert to yuv420; confirm with pixop-nvencc --check-hw |
pixop-flow exit 3 | Input TS rate vs TS_TARGET_BITRATE; video --cbr vs backbone | Reduce source bitrate or review backbone design with engineering—do not raise TS_TARGET_BITRATE casually |
| Long receiver lock / odd GOP cadence | --gop-len vs input frame rate | Adjust GOP in change control; measure end-to-end |
| Output “stale” or frozen enhanced video | Processing wedge vs transport | pixop-flow stages; pixopctl health; consider recover only if ingest tear-down is acceptable—see Monitoring and troubleshooting |
| Degraded FPS / GPU saturation | Instance size, restoration, optional HQ/lookahead | nvidia-smi; metrics; reduce processing load or upgrade GPU class—Supported GPUs FAQ |
| Cold start quality | Model/GPU warmup | Allow continuous feed before judging quality—Incident response runbook |
| Egress bitrate OK but receiver shows source quality | PID/program selection; merge not using replacement | tsduckctl detect-video-pid main (report-only) when feed is stable; --apply only in a change window; verify receiver program map |
| Pixop fails to start after edit | Syntax error or duplicate flags in nvencc.args | pixopctl logs; restore backup file; pixopctl restart |
Rollback: Restore the timestamped nvencc.args backup → pixopctl restart → re-run pixop-flow and downstream checks.
Related documentation
- Configuration — three-plane overview
- Picture processing — UI and
params.json - Configuration change control — packs, backups, change control
- Supported GPUs FAQ — chroma, drivers, sizing
- Transport configuration — SRT and backbone (not encoder VUI)
- Monitoring and troubleshooting — pipeline checkpoints
- pixopctl — restart vs recover
- pixop-nvencc — read-only NVEncC inside
LIVE_IMAGE
Updated about 8 hours ago
