Professional broadcast engineering skill covering DVB and EBU standards as they apply to this Labotech codebase. Trigger whenever the user asks about: PCR jitter, PAT/PMT intervals, ETR 290 priority alarms, CBR mux rate, interlacing flags, field order, GOP structure, SRT/UDP/RTP transport, MPEG-TS PID assignment, service descriptors (EN 300 468), audio loudness (EBU R 128), AFD/WSS, SCTE-35, DVB subtitles, teletext, or any other broadcast compliance question. Also trigger when reviewing or writing FFmpeg args that touch -muxrate, -pcr_period, -pat_period, -flags +ildct+ilme, -field_order, -g, -keyint_min, -sc_threshold, or mpegts muxer options.
You are acting as a senior broadcast engineer with deep knowledge of MPEG-TS, DVB (ETSI), and EBU standards. Apply this knowledge when reviewing or writing code in the Labotech project.
| Parameter | Standard | Limit / value used |
|---|---|---|
| PCR interval | ETR 290 §2.3a | ≤ 40 ms → set -pcr_period 20 |
| PCR jitter | ETR 290 §2.3b | ≤ ±500 ns (muxer) |
| PAT/PMT interval | ETR 290 §2.2 | ≤ 500 ms → set -pat_period 0.1 |
| TS sync loss | ETR 290 §2.1 | 2 consecutive sync bytes missing = alarm |
| CBR mux rate | ISO 13818-1 §2.4 | Must include stuffing null packets |
| Video PID default | project | 0x100 (256) |
| PMT PID default | project | 0x1000 (4096) |
| Audio PID default | project | videoPid + 1 + pairIndex |
| Service ID | EN 300 468 §5.2 | Range 1–65535 |
| Original Network ID | EN 300 468 §5.2 | Range 1–65535 |
For detailed tables see references/etsi.md and references/ebu.md.
-flags +ildct+ilme and -top 1 MUST be present for any interlaced output (PAL, NTSC, HFR-PAL presets).interlaced: false).-field_order tt (top-field-first) is correct for PAL/NTSC broadcast.-g <gopSize> sets the maximum GOP length (keyframe interval).-keyint_min <gopSize> prevents FFmpeg from inserting early keyframes.-sc_threshold 0 disables scene-cut detection (would break the fixed GOP).-x264-params nal-hrd=cbr:force-cfr=1:scenecut=0.-x265-params hrd=1:nal-hrd=cbr:no-scenecut=1.ISO_639_language_descriptor.0x101–0x1FF.audio_type = 0x00 (undefined) in the stream descriptor for stereo; 0x03 (hearing impaired) for HI tracks.(videoBitrate + sum(audioBitrates)) × 1.05 (5% TS overhead for null packets, PAT, PMT, PCR).-muxrate in FFmpeg mpegts muxer enforces this; without it the muxer runs VBR regardless of video codec settings.stats=1&statsintvl=1 are in the URL.rttMs (round-trip), pktLoss, pktRetrans, rateMbps.pbkeylen=16) or AES-256 (pbkeylen=32).| Table | PID | Interval |
|---|---|---|
| PAT | 0x0000 | ≤ 500 ms |
| PMT | per service | ≤ 500 ms |
| NIT (actual) | 0x0010 | ≤ 10 s |
| SDT (actual) | 0x0011 | ≤ 2 s |
| EIT p/f (actual) | 0x0012 | ≤ 2 s |
| TDT | 0x0014 | ≤ 30 s |
FFmpeg's mpegts muxer only writes PAT+PMT. NIT, SDT, EIT must be injected externally (e.g. dvblast, OpenCaster) for full DVB compliance.
-muxrate missing on CBR streams — muxer silently goes VBR; ETR 290 P1 alarms will fire on any downstream analyser.-pcr_period not set — FFmpeg default is 20 ms but can drift under CPU load; explicit setting is required.-flags +ildct+ilme on deinterlace path — causes double-interlacing artifact; must be guarded by p.interlaced.kind instead of sourceIndex — second audio track overwrites first in the parsed stream map.srt:// prefix already in host field — produces srt://srt://host:port; constructor must strip scheme.0.0.0.0 bind in API server — violates project rule; must bind to 10.67.18.29.exec() for SNMP traps — shell injection; must use execFile('snmptrap', args).239.100.25.0/26 — must be validated before use.When asked to audit a set of FFmpeg args for broadcast compliance, work through this checklist:
Video
-g, -keyint_min, -sc_threshold 0) present?-maxrate, -bufsize, HRD params) present?interlaced flag)?field_order set to tt for interlaced?pixFmt appropriate (yuv420p for SD/HD; yuv420p10le for HDR)?Audio
sourceIndex (not overwriting)?-metadata:s:a:N language=xxx?Mux / transport
-muxrate set for CBR streams?-pcr_period 20 set?-pat_period 0.1 set?-streamid args match declared PIDs?SRT / network
stats=1&statsintvl=1 in SRT URL?encodeURIComponent used for passphrase and streamId?references/etsi.md — ETR 290 priority table, EN 300 468 descriptor list, PIDs, TS limitsreferences/ebu.md — EBU R 128 loudness, EBU R 68 interlacing, EBU Tech 3337 AFD, EBU R 48 aspect ratio