Hear from Slack, the ACLU, TED, & more at our customer summit in San Francisco Register

Configuration guidelines for live streaming

  Last updated March 29, 2017

The Fastly network can deliver live streams for any HTTP streaming technology, archived or recorded, on any public or private cloud storage service. When configuring VCL to deliver live streams, we recommend following these guidelines, which Customer Support can help you with.

Configure shielding

Configure shielding by designating a specific shield POP for your origin to ensure live streams remain highly available within the Fastly network. If your setup includes primary and alternate origins (e.g., for high profile live streams), be sure to select a shield POP, close to each origin, one for each origin you define.

Set different caching TTLs

Set manifest file TTLs to less than half of the video segment duration, typically 1-2 seconds for 5-second video segments. For long DVRs and live-to-VOD transitions, set segment TTLs longer on shields and shorter on edge POPs such that they are served from memory (that is, less than 3600s).

Configure Streaming Miss

Configure Streaming Miss to reduce the time clients (players) must wait to begin downloading streams when Fastly's edge servers must fetch content from your origin. Streaming Miss should be enabled for video or audio objects only (these are sometimes called "chunks" or "segments").

The following VCL sample may help you implement this:

sub vcl_fetch {
  # Enable Streaming Miss only for video or audio objects. 
  # Below conditions checks for video or audio file extensions commonly used in
  # HTTP Streaming formats.
  if (req.url.ext ~ "m4s|mp4|ts|aac") {
    set beresp.do_stream = true;
  return (deliver);

Configure automatic gzipping

Configure automatic gzipping for manifest files based on their file extension or content-type using the following table as a guide:

HTTP streaming format file extension content-type
Apple HLS m3u8 application/x-mpegurl, application/vnd.apple.mpegurl
MPEG-DASH mpd application/dash+xml
Adobe HDS f4m, bootstrap application/f4m (for manifest), application/octet-stream (for bootstrap)
Microsoft HSS N/A application/vnd.ms-sstr+xml

Configure a CORS header

Configure a CORS header on your service to play audio or video content on a different domain.

Enable TCP optimizations

Enable TCP tuning optimizations (e.g., CWND size) between cache servers and clients. For example, consider setting the CWND value higher, between 40-50. Enabling TCP optimizations allows clients to better estimate network bandwidth and thereby select the ideal rendition and bitrate for the best playback quality.

The following VCL sample may help you implement this:

sub vcl_deliver {
  # increase init cwnd
  if (client.requests == 1) {
    set client.socket.cwnd = 45;

#FASTLY deliver

Configure origin timeouts

Set appropriate origin timeouts to ensure new live video chunks and segments are fetched in a timely manner. Start by setting the First Byte (ms) and Between Bytes (ms) timeout values to less than half of the segment duration and then adjust the values accordingly to optimize them for your origin. For example, for a live stream configured with a 5s segment duration, you could start by setting both timeouts to 2000ms.

Consider setting up failover (fallback) origins

Consider configuring your VCL to allow your origins to failover from high-profile primary streams to alternate streams in case of encoder failures or other issues (e.g., high resource utilization).

Configure real-time log streaming

For troubleshooting and debugging any end-to-end live streaming latency issues (also known as "hand-waving latency" or "glass latency"), configure real-time log streaming and include TCP connection, caching, and different time-related metrics in vcl_log. For example:

These metrics can help you analyze throughput and may help you determine reasons a video player might switch quality levels during ABR playback.

Take advantage of surrogate key purging

All video segments and the manifest for a live stream can be purged using a single API call by using Fastly's surrogate key feature.

Manage live-to-VOD smoothly

Most encoders generate a separate video manifest when making the same live stream available for VOD. If your VOD manifest has the same URL as the live one, purge the live stream video manifest or wait for the caches to invalidate (as they will be set with low TTLs). If your setup archives the live stream as progressive mp4s, consider delivering them using Fastly's OTFP service.

Additional resources:

Back to Top