Integrations
Connecting real-world encoders, decoders, and software to Punch.
Overview
Punch generates ready-to-use connection strings for every major SRT implementation. Once a session is created and both peers have registered, Punch provides the exact command or configuration needed — no manual parameter assembly.
This guide covers manual configuration for each platform. In practice, the Punch web UI generates these automatically.
Software
FFmpeg
FFmpeg has native SRT support via libsrt. It is the most flexible tool for SRT workflows.
Send (encoder side):
ffmpeg -re -i input.ts -c copy -f mpegts \ "srt://PEER_IP:9000?mode=rendezvous&latency=200000&passphrase=PUNCH_PASSPHRASE&pkt_size=1316"Receive (decoder side):
ffmpeg -i "srt://PEER_IP:9000?mode=rendezvous&latency=200000&passphrase=PUNCH_PASSPHRASE" \ -c copy output.tsCritical notes:
| Parameter | Value | Common mistake |
|---|---|---|
latency | In microseconds | Using milliseconds (200 instead of 200000) |
mode | rendezvous | Omitting mode (defaults to caller) |
pkt_size | 1316 | Using other values corrupts MPEG-TS |
passphrase | 10-79 chars | Shell quoting issues with special characters |
Note on pkt_size versus payloadsize: libsrt accepts both names as
aliases for the same parameter. Punch’s auto-generated strings use
pkt_size because it is the canonical name in current libsrt and is
accepted by every tool tested (FFmpeg, GStreamer, srt-live-transmit).
Older guides that show payloadsize are not wrong — but pkt_size is
what Punch emits and what its test suite asserts on.
Encoding pipeline example (1080p50 H.264):
ffmpeg -f v4l2 -framerate 50 -video_size 1920x1080 -i /dev/video0 \ -f alsa -i hw:0 \ -c:v libx264 -preset ultrafast -tune zerolatency -b:v 8M \ -c:a aac -b:a 128k \ -f mpegts \ "srt://PEER_IP:9000?mode=rendezvous&latency=200000&passphrase=PUNCH_PASSPHRASE"Low-latency tips:
-preset ultrafast -tune zerolatency— minimises encoding latency-g 50— keyframe interval matching framerate (1 second)-flags +cgop— closed GOP for better error resilience- Consider
-x264-params "sliced-threads=1"to reduce per-frame latency
OBS Studio
OBS has native SRT support since version 27.
Settings → Stream:
| Field | Value |
|---|---|
| Service | Custom… |
| Server | srt://PEER_IP:9000?mode=rendezvous&latency=200000&passphrase=PUNCH_PASSPHRASE |
| Stream Key | (leave empty) |
Settings → Output → Streaming:
| Field | Recommended |
|---|---|
| Encoder | x264 (or hardware: NVENC, QSV, AMF) |
| Rate Control | CBR |
| Bitrate | 6000-10000 kbps |
| Keyframe Interval | 1s or 2s |
| Tune | zerolatency |
OBS SRT output limitations:
- OBS only supports SRT as output (streaming), not as input (source)
- For SRT input in OBS, use the Media Source with an
srt://URL - Custom OBS builds (obs-srt) may offer additional SRT features
vMix
vMix has comprehensive SRT support with multi-audio capabilities.
Add SRT output:
- Settings → Outputs → Gear icon
- Select “SRT” as output type
- Configure:
| Field | Value |
|---|---|
| Hostname | PEER_IP |
| Port | 9000 |
| Type | Rendezvous |
| Latency | 200 (vMix uses milliseconds) |
| Passphrase | PUNCH_PASSPHRASE |
Add SRT input:
- Add Input → Stream/SRT
- Enter the
srt://URL
vMix MABC (Multi Audio Bitrate Channel):
vMix can output 4 stereo audio pairs on separate MPEG-TS PIDs:
| PID | Content |
|---|---|
| Audio 1 | Programme mix |
| Audio 2 | Talent microphones |
| Audio 3 | Ambient/effects |
| Audio 4 | IFB/intercom |
Note: Not all decoders read multiple audio PIDs. Test your receive chain.
VLC
VLC can play SRT streams but has limitations.
Play an SRT stream:
Media → Open Network Stream → srt://PEER_IP:9000?passphrase=PUNCH_PASSPHRASELimitations:
- VLC is always SRT Caller via the GUI — it cannot act as a Listener
- For rendezvous mode, use VLC’s command line:
Terminal window vlc "srt://PEER_IP:9000?mode=rendezvous&passphrase=PUNCH_PASSPHRASE" - VLC adds significant decode buffering — not suitable for ultra-low-latency monitoring
GStreamer
GStreamer supports SRT via the srtsrc and srtsink elements.
Receive:
gst-launch-1.0 \ srtsrc uri="srt://PEER_IP:9000" mode=rendezvous latency=200 passphrase=PUNCH_PASSPHRASE \ ! tsdemux \ ! decodebin \ ! autovideosinkSend:
gst-launch-1.0 \ v4l2src ! videoconvert ! x264enc tune=zerolatency bitrate=8000 \ ! mpegtsmux \ ! srtsink uri="srt://PEER_IP:9000" mode=rendezvous latency=200 passphrase=PUNCH_PASSPHRASECritical gotcha: GStreamer silently ignores passphrases shorter than 10 characters. The connection appears to succeed but is unencrypted. Always use passphrases of 10+ characters. Punch generates 32-character passphrases by default, avoiding this entirely.
CasparCG
CasparCG has no native SRT support. There are two workarounds:
Option 1: srt-live-transmit relay (recommended)
Run a local relay that converts between SRT and UDP:
# Receive SRT and output to local UDP (for CasparCG input)srt-live-transmit \ "srt://PEER_IP:9000?mode=rendezvous&passphrase=PUNCH_PASSPHRASE&latency=200000" \ "udp://127.0.0.1:5000" -vThen configure CasparCG to use udp://127.0.0.1:5000 as input.
Option 2: Custom FFmpeg build
Build FFmpeg with --enable-libsrt and use it as CasparCG’s FFmpeg backend. This requires modifying CasparCG’s build configuration.
Note: CasparCG GitHub issues #1251 and #1535 requesting native SRT support remain open.
srt-live-transmit
The reference SRT relay tool from Haivision. Useful for protocol bridging and relay setups.
# SRT rendezvous → SRT listener (relay to studio)srt-live-transmit \ "srt://PEER_IP:9000?mode=rendezvous&passphrase=PUNCH_PASSPHRASE&latency=200000" \ "srt://:10000?mode=listener&passphrase=STUDIO_KEY" -v
# SRT rendezvous → UDP multicast (local distribution)srt-live-transmit \ "srt://PEER_IP:9000?mode=rendezvous&passphrase=PUNCH_PASSPHRASE&latency=200000" \ "udp://239.1.1.1:5000?adapter=eth0" -vHardware encoders
Magewell Ultra Encode
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | Yes |
| SRT Rendezvous | Yes (firmware 2.x+) |
| Bonding | No (libsrt bonding) |
| Multi-audio | Stereo + embedded HDMI audio |
Configuration: Web UI → Encoding → Protocol: SRT → Mode: Rendezvous → enter peer IP, port, passphrase, latency.
Teradek (Vidiu, Cube, Prism)
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | Yes (Cube, Prism) |
| SRT Rendezvous | No |
| Bonding | Via Sharelink (proprietary cloud) |
Limitation: Teradek does not support SRT rendezvous mode. To use with Punch, the Teradek must connect as SRT Caller to an srt-live-transmit relay that converts to rendezvous.
Kiloview (N-series)
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | Yes |
| SRT Rendezvous | Model-dependent (check firmware) |
| NDI bridge | Yes (N-series) |
Haivision (KB, Makito)
Haivision created SRT — their encoders have the most complete implementation.
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | Yes |
| SRT Rendezvous | Yes |
| Bonding | Via SRT Gateway (proprietary) |
| Multi-audio | Up to 8 stereo pairs |
Blackmagic (ATEM Mini Pro, Web Presenter)
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | No |
| SRT Rendezvous | No |
Critical limitation: Blackmagic devices are SRT Caller only. They cannot be a Listener or use Rendezvous mode. To use with Punch, the receive side must run an srt-live-transmit relay in Listener mode.
AJA HELO
| Feature | Support |
|---|---|
| SRT Caller | Yes |
| SRT Listener | Yes |
| SRT Rendezvous | Firmware-dependent |
Multi-camera ISO setup
For a multi-camera ISO production with Punch:
Session: "show-2026-03-06"Streams: cam-wide, cam-close, cam-roving, pgm-return
Camera 1 (wide) → punch.thåst.se/s/show-2026-03-06 → scan QR → claim "cam-wide"Camera 2 (close) → punch.thåst.se/s/show-2026-03-06 → scan QR → claim "cam-close"Camera 3 (roving) → punch.thåst.se/s/show-2026-03-06 → scan QR → claim "cam-roving"MCR return feed → punch.thåst.se/s/show-2026-03-06 → scan QR → claim "pgm-return"Each camera gets:
- Its own SRT rendezvous connection
- A unique stream slot in the session
- Individual health monitoring on the dashboard
- Tally state (program/preview/off)
All coordinated through one session URL.
Audio channel mapping
| Scenario | Approach | MPEG-TS PIDs |
|---|---|---|
| Simple stereo | Single audio PID | 1 |
| Programme + IFB | Two audio PIDs | 2 |
| Full ISO (per-camera mix) | One audio PID per camera stream | 1 per stream |
| vMix MABC | Four stereo PIDs in one stream | 4 |
| Discrete channels | AAC 5.1/7.1 in single PID | 1 |
For discrete multi-channel audio, AAC is the most compatible codec. Opus offers lower latency but has less universal decoder support in broadcast hardware.