ABR

Startup bitrate and time to first frame

The player has to pick a rendition before it knows anything about the connection. Get it wrong one way and the viewer waits; get it wrong the other and the first seconds look like a phone stream on a 65-inch panel.

The dilemma

Time to first frame is one of the strongest predictors of abandonment, and it is dominated by the size of the first segment. Start on a high rung and a viewer on an ordinary connection watches a spinner while a large segment downloads. Start on the lowest rung and playback begins fast but looks blurred until the ABR logic has measured throughput and stepped up - a visible quality jump that reads as a fault.

The reason it is hard is that at startup the player genuinely has no information. Adaptive bitrate algorithms need at least one download to estimate bandwidth, and on a television there is usually no earlier network activity in the session to learn from.

Common mistakes

The most common is a hard-coded starting rendition chosen on a developer's office connection, applied to every device and every market. The second is throwing away what the previous session learned: a viewer who watched at 8 Mbps last night is almost certainly on the same connection today, and starting from zero each time wastes that.

  • A fixed startup rendition regardless of device, market or previous sessions.
  • ABR tuned to switch up slowly, so a cautious start stays cautious for too long.
  • A first segment as long as every other segment, delaying the first frame further.
  • No measurement of time to first frame per device model, so nobody knows it is a problem.

What works

Start from data. Report time to first frame and the startup rendition per device model, and use remote configuration to set the startup rung per model or platform rather than in code - a Roku Express and a current Android TV set-top box should not start on the same rendition. Persist the bandwidth estimate at the end of each session and reuse it as the starting estimate for the next; it is right far more often than any default.

Where there is no history, start on a conservative mid-range rung and let the ABR logic ramp up quickly once the first two or three downloads have been measured. The Network Information API can provide a hint on some platforms, but support on television browsers is inconsistent enough that it should be treated as a bonus rather than a dependency. A shorter first segment, where the packager supports it, gets the first frame on screen sooner at any bitrate.