Encoder Setup
Configure your encoder for FrameWorks. Covers OBS Studio, FFmpeg, RTMP/E-RTMP, SRT, and WHIP.
OBS Studio
Section titled “OBS Studio”OBS is free and works on Windows, Mac, and Linux. Download it here.
Stream Settings
Section titled “Stream Settings”- In OBS Studio, navigate to Settings, then select the Stream tab.
- Configure the following:
- Service: Custom
- Server:
rtmp://edge-ingest.frameworks.network:1935/live - Stream Key: From your stream’s Stream Key card in the dashboard
FrameWorks accepts Enhanced RTMP (E-RTMP) on the same ingest endpoint. If your encoder exposes Enhanced RTMP options for newer codecs, keep the same server URL and stream key.
Recommended Output Settings
Section titled “Recommended Output Settings”Use these values as a starting point, then reduce bitrate or resolution if the encoder cannot maintain them or the uplink lacks headroom.
Go to Settings → Output and select Advanced mode.
Streaming tab:
| Setting | Value |
|---|---|
| Encoder | NVIDIA NVENC (if available) or x264 |
| Rate Control | CBR |
| Bitrate | 4500 kbps (for 1080p30) |
| Keyframe Interval | 2 seconds |
| Preset | Quality (GPU) or veryfast (CPU) |
| Profile | high |
Video tab: Set the output resolution and frame rate here:
| Setting | Value |
|---|---|
| Base Resolution | Your monitor resolution |
| Output Resolution | 1920x1080 |
| Downscale Filter | Lanczos |
| FPS | 30 or 60 |
Audio Settings
Section titled “Audio Settings”Use these audio settings for broad playback compatibility:
Settings → Audio:
- Sample Rate:
48 kHz - Channels:
Stereo
Settings → Output → Audio:
- Audio Bitrate:
160 kbps(per track, suitable for most streams) or320 kbps(for high-fidelity audio, especially music)
FFmpeg
Section titled “FFmpeg”FFmpeg works well for scripted or headless publishing. These commands send RTMP to FrameWorks:
ffmpeg -re -i input.mp4 \ -c:v libx264 -preset veryfast -b:v 4500k -maxrate 4500k -bufsize 9000k \ -g 60 -keyint_min 60 \ -c:a aac -b:a 160k -ar 48000 \ -f flv "rtmp://edge-ingest.frameworks.network:1935/live/{stream-key}"From a webcam:
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default \ -c:v libx264 -preset ultrafast -b:v 2500k \ -c:a aac -b:a 128k \ -f flv "rtmp://edge-ingest.frameworks.network:1935/live/{stream-key}"SRT (Alternative Protocol)
Section titled “SRT (Alternative Protocol)”SRT (Secure Reliable Transport) offers improved performance over RTMP, especially on unstable or high-latency networks, by ensuring secure and reliable stream delivery. Use this URL format:
srt://edge-ingest.frameworks.network:8889?streamid={stream-key}&latency=200&mode=callerIn OBS: Settings → Stream → Service → Custom, then paste the SRT URL in Server.
If you’re self‑hosting, make sure the SRT port is exposed on your ingest endpoint (default is 8889).
FFmpeg with SRT:
ffmpeg -re -i input.mp4 \ -c:v libx264 -preset veryfast -b:v 4500k \ -c:a aac -b:a 160k \ -f mpegts "srt://edge-ingest.frameworks.network:8889?streamid={stream-key}&latency=200&mode=caller"WHIP (WebRTC)
Section titled “WHIP (WebRTC)”WHIP (WebRTC-HTTP Ingestion Protocol) provides a modern approach for browser-based ingestion, enabling real-time streaming with sub-second latency directly from your web browser or compatible software. The dashboard shows your specific WHIP URL on the stream details page.
https://edge-ingest.frameworks.network/webrtc/{stream-key}If you’re self‑hosting behind a proxy, make sure the WHIP path is reachable on your ingest endpoint.
Load-aware WHIP URL
Section titled “Load-aware WHIP URL”https://edge-ingest.frameworks.network is a geo-DNS name: it resolves to the nearest healthy ingest node, but does not
account for how loaded that node is. Foghorn’s ingest front door adds load awareness to WHIP:
https://foghorn.frameworks.network/ingest/{stream-key}Publishing a WHIP POST there returns a 307 Temporary Redirect to the selected node’s WHIP URL.
RFC 9725 requires WHIP clients to support
redirects on the initial POST, and 307 preserves the method and SDP offer, so any spec-compliant
WHIP client can use this URL in place of a fixed node URL.
The same path answers GET with JSON, which is useful in setup scripts that need a concrete node
URL for a protocol that cannot follow redirects:
curl https://foghorn.frameworks.network/ingest/{stream-key}RTMP and SRT have no redirect mechanism, so those protocols use either the geo-DNS edge-ingest.frameworks.network
name above or the rtmpUrl / srtUrl from that JSON response.
Choosing the Right Bitrate
Section titled “Choosing the Right Bitrate”Higher bitrates can preserve more detail, but only when the encoder and uplink can sustain them. Use these ranges as a starting point:
| Resolution | FPS | Bitrate Range |
|---|---|---|
| 720p | 30 | 2,500–4,000 kbps |
| 720p | 60 | 3,500–6,000 kbps |
| 1080p | 30 | 3,500–6,000 kbps |
| 1080p | 60 | 4,500–8,000 kbps |
| 1440p | 30 | 5,000–15,000 kbps |
| 1440p | 60 | 6,000–24,000 kbps |
These ranges are FrameWorks recommendations; adjust based on content complexity and network stability.
Rule of thumb: Your upload speed should be at least 2x your stream bitrate.
Run a speed test to speedtest.net and check your upload.
Selecting an Encoder
Section titled “Selecting an Encoder”Hardware encoders reduce CPU use and are usually the best first choice when one is available.
- NVIDIA NVENC: Offers the best quality-to-performance ratio. Highly recommended if you have an NVIDIA GPU.
- AMD AMF: A solid choice for users with AMD graphics cards.
- Intel QuickSync: efficient and widely available on most Intel CPUs with integrated graphics.
- x264: Software-based encoding. It ensures compatibility everywhere but consumes significant CPU resources. Use this only if hardware encoding isn’t an option.
In OBS Studio, you can select your encoder under Settings → Output → Encoder.
Adaptive Bitrate (ABR)
Section titled “Adaptive Bitrate (ABR)”FrameWorks generates lower-quality renditions of your stream so viewers on slower connections can watch without buffering. The default live-stream process configuration uses Livepeer Gateway for video ABR and local AV processes for audio compatibility.
How It Works
Section titled “How It Works”When you go live, the control plane attaches your tier’s live process configuration to the stream. Every billing tier ships the same standard ladder, for both live streams and VOD processing:
| Rendition | Bitrate | Added when the source is at least |
|---|---|---|
| 360p | 900 kbps | 640×360 |
| 480p | 1600 kbps | 850×480 |
| 720p | 3200 kbps | 1280×720 |
| 1080p | 6500 kbps | 1920×1080 |
Sources smaller than 640×360 get no video renditions. Renditions keep the source frame rate and use
H264ConstrainedHigh. Audio compatibility processes generate Opus when the incoming audio is not
already Opus and AAC when it is not already AAC.
Set a stream’s advanced liveVideoAbr option to OFF to omit its live video
renditions on the next ingest session. Audio compatibility and thumbnail
processes continue. A destination that needs a lower or different video track
may have no compatible track when live video ABR is off.
Foghorn fills in the Livepeer Gateway instances for the stream’s cluster at dispatch time. If no Livepeer Gateway is registered, each rendition is converted to a local MistProcAV process so the media node encodes the same ladder itself.
What This Means for You
Section titled “What This Means for You”- Stream at the highest quality your upload supports. The default ladder adds lower renditions, up to 1080p, when the source is large enough.
- Viewers automatically get the best available quality their connection supports via HLS ABR, with DASH and LL-HLS available alongside on every cluster.
Custom Transcoding Profiles
Section titled “Custom Transcoding Profiles”The standard ladder is configured at the billing tier level. Enterprise tiers can use tenant-level
processing overrides when processing_customizable is enabled.
Avoid Common Pitfalls
Section titled “Avoid Common Pitfalls”Leave upload headroom If you experience dropped frames or instability, your bitrate might be too high for your internet connection. Try lowering it to stabilize the stream.
Stick to a 2-Second Keyframe Interval
Always set your keyframe interval to 2 seconds. Longer intervals can cause playback buffering or failures for viewers joining mid-stream.
Verify Your Audio Source Silence is a common issue. Double-check that your microphone or desktop audio is selected and unmuted in the OBS audio mixer.
Use Constant Bitrate (CBR) Variable Bitrate (VBR) is excellent for recording but problematic for live streaming due to fluctuating bandwidth usage. Always use CBR for a consistent stream.
Troubleshooting
Section titled “Troubleshooting”See Troubleshooting for common issues like connection failures and encoding overload.