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.

PlanePrimary locationWhat you controlApply mechanism
Pipeline / encoder output/etc/pixop-live/nvencc.argsResolution, bit depth, chroma subsampling, VUI colour signalling (SDR / HLG / PQ), HEVC bitrate and GOP, optional pre-Pixop YADIF, optional NVENC quality/latency trade-offsEdit marked blocks → pixopctl restart (Pixop container only)
Picture processingRemote-control UI http://<appliance>:8080 → /var/lib/pixop-live/parameters/params.jsonRestoration, scaling policy, SDR→HDR processing, grain, PostFX, controller behaviourUI (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.argsSRT passphrases, latency, PIDs, TS_TARGET_BITRATE, on-guest multicast hand-offstsduckctl / 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

The 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)

SettingRole
-i udp://239.0.0.1:5500?…Pre-Pixop MPEG-TS from TSDuck ingress
--avswSoftware demux/decode path for live TS
--input-option fflags:+discardcorruptDrop corrupt TS packets instead of stalling
--decoder-recovery-watchdog balancedDecoder 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)

FlagOperator relevance
--vpp-resize pixop-livePixop scaling path—fixed product integration
--vpp-pixop-live license_file=…,params_file=…,restoration_mode=full,controller_preset=realtime_balancedAWS 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)

BlockPurpose
-c hevc, --gop-len 50HEVC 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-headersMPEG-TS mux; SCTE-35 handling; repeating parameter sets
--perf-monitor all, --perf-monitor-log -In-process performance counters
--http-port 8080, --https-port 0Metrics and remote-control HTTP on the guest
-o udp://239.0.0.1:5501?pkt_size=1316Replacement 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.

BlockTypical flagsNotes
Optional higher-efficiency encoding#--tune hq, #--lookahead 8, #--lookahead-level 1, #--multipass 2pass-quarterShipped 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=bobPre-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 1010-bit HEVC in default profile
Output chroma--output-csp yuv420Also yuv422, yuv444 per file comments
Colour signallingExactly 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 tvLegal range for broadcast-style chains
Bitrate--cbr <kbps>, --vbv-bufsize <kbps>, --cbr-fillerKeep CBR and VBV equal. --cbr-filler is part of the qualified CBR profile—leave enabled unless support says otherwise

Chroma qualification (engineering template):

--output-cspRequirement stated in template
yuv420Default 4:2:0 profile
yuv422NVIDIA Blackwell; AWS G7 / G7e
yuv444Listed 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 12000

B — 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-quarter

Back 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).bak

For support archives without secrets, use pixop-pack-config (redacted /etc/pixop-live only)—see Configuration change control.

Edit rules

  1. Change only === OPERATOR: blocks (and their commented alternatives) unless Pixop support instructs otherwise.
  2. Preserve input, realtime, mux, HTTP, and output UDP lines.
  3. After colour profile changes, verify no duplicate active --colormatrix / --colorprim / --transfer groups.
  4. Leave --cbr-filler in place for the qualified CBR recipe unless directed otherwise.

Apply

pixopctl restart
pixopctl status

Use 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 5

Confirm 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-hw

Do not paste passphrases, JWTs, or customer WAN addresses into tickets.

Troubleshooting

SymptomLikely layers to checkConservative action
Wrong colours / HDR mode on monitorSignalling in nvencc.args vs actual processed content in UI/params.json; receiver tone-mappingFix one active colour group; align UI HDR/restoration with intent; pixopctl restart after nvencc.args changes
Encoder fails or falls back after yuv422GPU generation (Blackwell / G7)Revert to yuv420; confirm with pixop-nvencc --check-hw
pixop-flow exit 3Input TS rate vs TS_TARGET_BITRATE; video --cbr vs backboneReduce 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 rateAdjust GOP in change control; measure end-to-end
Output “stale” or frozen enhanced videoProcessing wedge vs transportpixop-flow stages; pixopctl health; consider recover only if ingest tear-down is acceptable—see Monitoring and troubleshooting
Degraded FPS / GPU saturationInstance size, restoration, optional HQ/lookaheadnvidia-smi; metrics; reduce processing load or upgrade GPU class—Supported GPUs FAQ
Cold start qualityModel/GPU warmupAllow continuous feed before judging quality—Incident response runbook
Egress bitrate OK but receiver shows source qualityPID/program selection; merge not using replacementtsduckctl 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 editSyntax error or duplicate flags in nvencc.argspixopctl logs; restore backup file; pixopctl restart

Rollback: Restore the timestamped nvencc.args backup → pixopctl restart → re-run pixop-flow and downstream checks.

Related documentation


Did this page help you?