Skip to content

MPEG-TS output settings

All MPEG-TS outputs of a stream — HTTP playback, SRT, pushes over UDP, SRT, and RIST — come from a single multiplexer. The mpegts section of a stream configures its service tables: the program number, track PIDs, and the SDT service description. The same section on an individual output channel overrides those values for that channel only: different receivers get the same stream under different program numbers and PIDs.

The stream mpegts section

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    mpegts:
      pnr: 1030
      pmt_pid: 1000
      service_name: TV One
      provider_name: Example Media
      pids:
        v1: 1011
        a1: 1012

Every parameter is optional; an unset field means the server default:

Parameter What it sets Default
pnr program number: the PAT entry, PMT program_number, and SDT service_id 1
pmt_pid PID of the PMT table assigned automatically
pids explicit track PIDs by track name: v1, a1, … assigned automatically
service_name service name in the SDT the stream name
provider_name provider name in the SDT empty string
ts_stream_id transport_stream_id in the PAT and the SDT header 1
onid original_network_id in the SDT header 1

Rules checked when the configuration is saved:

  • PIDs must be within 32–8190; lower values are reserved for service tables, higher ones for null packets;
  • duplicate PIDs within the section are rejected, including a track PID equal to pmt_pid;
  • pnr is never zero — program number zero in the PAT is reserved for the NIT;
  • service and provider names together are limited so that the SDT fits into a single TS packet.

A pids entry for a track the stream does not currently have is valid: it takes effect when the track appears. If an explicitly configured PID conflicts with an automatically assigned PID of another track, the explicit value wins and the displaced track deterministically moves to a free PID — with a warning in the log.

SDT

Along with the PAT and PMT, the output carries an SDT table (PID 0x11): a single service of the digital television type, service_id equal to pnr, with the service and provider names from the mpegts section. Strings are encoded per DVB: Latin text goes as is, everything else as UTF-8 with an encoding announcement, so non-Latin names are read correctly by receivers.

When the settings change, the versions of the affected PAT/PMT/SDT tables increment, and receivers pick up the new tables the standard way. Editing the mpegts section applies on the fly: pushes and connected clients do not reconnect.

Per-channel settings

The same mpegts section is accepted by individual output channels:

  • a push over UDP, SRT, or RIST — RTMP has no MPEG-TS, so the section does not combine with the rtmp transport;
  • srt_play — SRT playback from the stream's dedicated port.
streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    mpegts:
      pnr: 1030
      service_name: TV One
    srt_play:
      port: 4010
      mpegts:
        pnr: 200
    pushes:
      local-multicast:
        udp:
          host: 239.1.1.1
          port: 5500
        mpegts:
          pnr: 300
          pids:
            v1: 211
            a1: 221

The channel section is merged over the stream section field by field: a value set on the channel overrides the stream value, an unset one is inherited. The exception is the pids map: it is a single field, and a non-empty channel map replaces the stream map wholesale — there is no per-track merging.

Overrides are available only to channels the stream sends out itself. HTTP MPEG-TS playback and the server-wide SRT port always serve the stream's common output with the stream-level settings.

How it works

No second multiplexer is started for a channel with its own settings. The channel gets a copy of the common output in which only the service tables and packet PIDs are rewritten: the packet timing layout, PCR, and continuity counters of the common multiplex are preserved, so the CBR properties of the output hold for overridden channels as well. Channels with identical effective settings share one byte-identical stream — a hundred identical pushes cost as much as one.

The table versions of a rewritten output follow its own change history and are never copied from the common output.

Configuring in the console

Open the stream, the Egress tab. The stream-level section is called MPEG-TS output; empty fields show the server defaults as hints:

Stream-level MPEG-TS output section

A push over UDP, SRT, or RIST and the SRT playback have their own MPEG-TS output override section. Empty fields inherit the stream section — inherited values are shown as placeholders:

Override on a push

Track PIDs are added row by row: a track name and a number. An empty section is not saved — the channel stays on the common output.

What's next