IVS Real-Time (Stages) Configuration
Configure AWS IVS Real-Time stages for live streaming with RTMPS ingest, WebRTC viewers, and broadcast tool support.
AWS IVS Real-Time uses WebRTC-based stages to support ultra-low-latency live streaming. Broadcasters push a stream via RTMPS (e.g. OBS), and viewers join the stage via the IVS Web Broadcast SDK. This guide covers the Nomad application settings and instructions for configuring common broadcast tools.
For AWS infrastructure setup (IAM, EventBridge, SNS), see the IVS Real-Time Infrastructure Guide in the infrastructure docs.
Application Configuration
IVS Real-Time settings live under application/ivsRealtimeSettings in the tenant configuration JSON. All keys must be camelCase — PascalCase keys are silently ignored by the deserializer.
| Field | Type | Default | Description |
|---|---|---|---|
isEnabled | bool | false | Must be true to enable the IVS Real-Time provider |
isRecordingEnabled | bool | false | Show recording controls in the UI; required for composition recording |
whipIngestEnabled | bool | false | If true, creates an RTMPS IngestConfiguration on stage creation so broadcasters can push via OBS or other RTMPS tools |
tokenDurationMinutes | int | 720 | Lifetime of generated participant tokens (for WebRTC viewers) |
maxParticipants | int | 0 | Maximum simultaneous stage participants (0 = IVS default) |
recordingMode | int | 2 | 1 = AutoParticipant (per-participant files), 2 = Composite (mixed video) |
broadcastToChannelEnabled | bool | false | If true, composition simultaneously broadcasts to an IVS Low-Latency channel |
Example
{
"application/ivsRealtimeSettings": {
"isEnabled": true,
"isRecordingEnabled": true,
"whipIngestEnabled": true,
"tokenDurationMinutes": 720,
"maxParticipants": 0,
"recordingMode": 2,
"broadcastToChannelEnabled": false
}
}After updating config, Lambda containers must be recycled to pick up changes (run
SnapStartVersionPublisherLambdaFunctionor update a Lambda environment variable to force replacement).
Creating a Live Channel
- Ensure
isEnabled: trueinapplication/ivsRealtimeSettingsand Lambda containers have been recycled. - Create a Live Channel in the Nomad Admin UI with the IVS Real-Time provider.
- Nomad creates an IVS Stage and (if
whipIngestEnabled: true) an RTMPS IngestConfiguration. - The channel's Input Ingest Address (RTMPS server URL) and Stream Key appear in the property panel.
The stream key is permanent — it does not expire and does not need to be regenerated between streams.
Channel Status
| Event | Status Change |
|---|---|
| Broadcaster connects and publishes | Idle → Running |
| Broadcaster disconnects | Running → Idle |
| Recording started | RecordingStatus → Recording |
| Recording stopped | RecordingStatus → Idle |
Streaming with OBS Studio
IVS Real-Time requires H.264 video with no B-frames. This is the most common cause of connection failures — OBS must be configured with a compatible encoder profile.
Stream Settings
- Open Settings → Stream
- Set Service to
Custom... - Set Server to the channel's Input Ingest Address (e.g.
rtmps://xxxx.global-contribute.live-video.net:443/app/) - Set Stream Key to the channel's Stream Key
Encoder Settings (required)
Switch to Advanced output mode in Settings → Output, then configure the encoder:
| Setting | Required Value | Why |
|---|---|---|
| Encoder | x264 or hardware H.264 | IVS Real-Time requires H.264 |
| Profile | baseline or main | high profile enables B-frames by default |
| B-frames | 0 | IVS Real-Time rejects streams with B-frames |
| Tune | zerolatency (recommended) | Minimizes encoder latency |
| Keyframe Interval | 2 seconds | Recommended for low-latency ingest |
If OBS connects briefly then disconnects with no clear error, the encoder is almost certainly sending B-frames. Set B-frames to
0and verify the profile isbaselineormain.
You can also add bframes=0 in the x264 Options field as an explicit override.
Streaming with FFmpeg
ffmpeg -i input.mp4 \
-c:v libx264 -profile:v baseline -tune zerolatency \
-x264opts "bframes=0:keyint=60" \
-b:v 3000k -maxrate 3000k -bufsize 6000k \
-c:a aac -b:a 128k \
-f flv "rtmps://STAGE_RTMPS_ENDPOINT/app/STREAM_KEY"Key flags: -profile:v baseline disables B-frames; bframes=0 in -x264opts is an explicit safety net.
Streaming with Hardware Encoders (vMix, Wirecast, etc.)
Configure the RTMPS output with:
- Protocol: RTMPS (not RTMP)
- Server/URL: the channel's Input Ingest Address
- Stream Key: the channel's Stream Key
- Video Codec: H.264, Baseline or Main profile, B-frames disabled
Most broadcast SDKs and hardware encoders expose B-frame control in advanced codec settings.
Common Issues
| Error / Symptom | Cause | Fix |
|---|---|---|
| OBS disconnects immediately | Encoder sending B-frames (B_FRAME_PRESENT) | Set profile to Baseline/Main, B-frames = 0 |
| "Cannot access specified channel" in OBS | Wrong server URL (e.g. using the WHIP URL) | Use the RTMPS Input Ingest Address, not the WHIP endpoint |
| Channel stuck on Idle after stream starts | EventBridge or Lambda delivery issue | Check with your Nomad administrator |
Updated about 1 month ago
