Skip to content

Encoder Setup

Configure your encoder for FrameWorks. Covers OBS Studio, FFmpeg, RTMP/E-RTMP, SRT, and WHIP.

OBS is free and works on Windows, Mac, and Linux. Download it here.

  1. In OBS Studio, navigate to Settings, then select the Stream tab.
  2. 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.

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:

SettingValue
EncoderNVIDIA NVENC (if available) or x264
Rate ControlCBR
Bitrate4500 kbps (for 1080p30)
Keyframe Interval2 seconds
PresetQuality (GPU) or veryfast (CPU)
Profilehigh

Video tab: Set the output resolution and frame rate here:

SettingValue
Base ResolutionYour monitor resolution
Output Resolution1920x1080
Downscale FilterLanczos
FPS30 or 60

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) or 320 kbps (for high-fidelity audio, especially music)

FFmpeg works well for scripted or headless publishing. These commands send RTMP to FrameWorks:

Terminal window
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:

Terminal window
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 (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=caller

In 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:

Terminal window
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-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.

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:

Terminal window
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.

Higher bitrates can preserve more detail, but only when the encoder and uplink can sustain them. Use these ranges as a starting point:

ResolutionFPSBitrate Range
720p302,500–4,000 kbps
720p603,500–6,000 kbps
1080p303,500–6,000 kbps
1080p604,500–8,000 kbps
1440p305,000–15,000 kbps
1440p606,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.

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.

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.

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:

RenditionBitrateAdded when the source is at least
360p900 kbps640×360
480p1600 kbps850×480
720p3200 kbps1280×720
1080p6500 kbps1920×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.

  • 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.

The standard ladder is configured at the billing tier level. Enterprise tiers can use tenant-level processing overrides when processing_customizable is enabled.

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.

See Troubleshooting for common issues like connection failures and encoding overload.