Skip to content

Updated June 15, 2026

Streaming and media load testing

Validate video delivery, live-stream concurrency, and media API throughput under realistic viewer concurrency before a broadcast or major product launch.

What this workflow should produce

  • Confirmed CDN cache-hit rates and origin-offload ratios at expected peak viewer concurrency.
  • Measured rebuffer rate and segment-delivery latency under concurrent adaptive-bitrate streams.
  • A validated origin-capacity ceiling: the maximum concurrent streams before the origin saturates.
  • Evidence that failover and load-balancing between CDN PoPs behaves correctly under synthetic load.

Use case

Streaming and media platforms face a performance challenge that most load-testing approaches handle poorly: the traffic pattern is highly bursty (viewers join at broadcast start), the payload is large and time-sensitive (video segments must arrive faster than they play), and the CDN layer absorbs most of the load in the happy path — but the origin must handle the remainder at scale.

A failure mode unique to streaming is the rebuffer cascade: under CDN stress, cache-hit rates drop, more requests reach the origin, the origin saturates, segment delivery slows below playback rate, viewers rebuffer, some retry, amplifying the load spike further. This cascade does not show up in a simple HTTP throughput test because it requires modelling the interplay between CDN cache hit rates, segment delivery timing, and viewer concurrency.

Streaming and media load testing models that interplay. The goal is to confirm, before a major broadcast, that the delivery stack handles the expected concurrent viewer count with acceptable rebuffer rates — and to find the capacity ceiling at which the cascade begins.

How MaxoPerf supports it

MaxoPerf’s HTTP executor supports custom request sequences, making it possible to model adaptive bitrate streaming: a virtual user fetches a manifest, parses the playlist, requests segment files at realistic intervals, and asserts that each segment arrives within the playback window.

Labels are essential for streaming tests: label the manifest request, the segment requests by bitrate tier, and any API calls (authentication, licence acquisition, analytics) separately. The breakdown shows which layer is the bottleneck — segment delivery, not auth — and which bitrate tier degrades first under load.

Multi-region load distribution lets you simulate a geographically distributed audience. Viewers from EU-West and US-East produce qualitatively different CDN PoP load, and a single-region test will not surface PoP failover issues.

Private runner locations allow testing the origin directly, bypassing CDN caching, to measure raw origin throughput — the floor capacity that CDN cache-misses must reach.

A concrete streaming test

A sports streaming company runs a pre-broadcast capacity test before every major live event:

  • Delivery stack: Akamai CDN → nginx origin → HLS segment generator
  • Test scenario: each virtual user fetches the master playlist (GET /live/event-id/master.m3u8), selects the 720p variant playlist, and requests segments at 6-second intervals for 10 minutes; asserts segment delivery time < 3 s (< 1× segment duration with headroom)
  • Load profile, CDN test: ramp from 0 to 15,000 concurrent virtual users over 4 minutes; hold for 8 minutes; all traffic through CDN edge (no cache bypass)
  • Load profile, origin test: 500 concurrent users with cache-bypass header; ramp over 2 minutes; hold for 5 minutes
  • Labels: manifest, segment-720p, segment-480p, segment-1080p, auth-token-refresh
  • Findings from last event: the 720p segment delivery time crossed 3 s at 12,000 concurrent users; investigation showed CDN cache-hit rate dropped from 98% to 87% at that concurrency due to segment cache key fragmentation. Cache key normalisation restored hit rate to 99% and segment delivery time dropped to 0.8 s at 15,000 concurrent users.

Practical rollout

  1. Model the viewer journey, not just raw throughput — write a scenario that fetches manifests and segments at realistic timing intervals, not just a flood of HTTP requests. Segment delivery time relative to segment duration is the metric that matters.
  2. Separate CDN and origin tests — run a CDN test (traffic through edge) to validate cache hit rates and PoP performance, and a separate origin test (cache bypass) to validate origin capacity. These are different failure modes.
  3. Assert on delivery timing, not just status codes — a 200 response that arrives 8 seconds into a 6-second segment is a rebuffer event. Build timing assertions into the test script.
  4. Run from multiple regions — a geographically distributed viewer base produces distributed CDN PoP load. A single-region test validates one PoP; multi-region testing validates the full edge network.
  5. Run at 1.5× expected concurrent viewers — live events frequently exceed attendance forecasts, especially viral or social-media-amplified events. Test to a safety margin above forecast.

FAQ

How do I test HLS/DASH adaptive bitrate streaming with a load test?

Model the M3U8/MPD manifest fetch and the subsequent segment requests as labeled HTTP requests in your test script. Simulate adaptive bitrate behaviour by having each virtual user fetch a playlist, parse the available quality levels, and request segment files at a realistic interval (typically 2–10 seconds per segment depending on your target segment length). Assert on segment delivery time relative to segment duration — if a 6-second segment takes more than 6 seconds to deliver, the viewer would rebuffer.

Should I load-test the CDN or the origin for streaming?

Both, separately. The CDN test (traffic direct to CDN edge) validates cache-hit rates, PoP failover, and edge performance. The origin test (traffic bypassing or cache-missin through to origin) validates the origin's capacity to handle cache misses and live segments. CDN performance is dominated by cache hit rate; origin performance is dominated by segment generation and delivery throughput.

How do I simulate a real audience arrival pattern for a live event?

Use a steep ramp profile: 0 to peak concurrency in 2–5 minutes (simulating viewers joining at broadcast start), then a hold at peak for the expected broadcast duration, then a gradual taper. Supplement with a secondary ramp 30–60 minutes in if your event typically has a second wave (late arrivals, social media amplification). MaxoPerf multi-stage profiles let you model this shape explicitly.

Related documentation

Related use cases

  • AI inference load testing

    Validate LLM inference APIs under concurrent request load — measure time-to-first-token, token throughput, and cost per request to right-size GPU capacity.

  • Frontend browser performance testing

    Load-test real browser journeys — login flows, SPAs, and media-heavy pages — measuring user-perceived latency and render performance under concurrency.

  • Microservices SLO validation

    Confirm each service meets its latency and error-budget SLOs under realistic request concurrency before changes are promoted to production environments.