Skip to content
← Back to Media & Content Delivery

Case Study · Media & Content Delivery

Global Sports Streaming Platform on AWS

Manchester United — 10 Home Matches · Vimond + AWS · Well-Architected Design

Architecture study — a design exercise based on public information and AWS best practice, not a claimed client engagement

VimondKinesisLambdaS3CloudFrontMediaLive+4 more

Executive Summary

This case study documents the architecture, design decisions, and operational strategy behind a globally distributed live sports streaming platform built for Manchester United's home match season. The platform delivers 10 live matches per season to a global audience across Europe, Asia, and North America, using Vimond as the OTT application and monetisation layer, AWS Elemental MediaLive and MediaPackage for live video processing, Amazon CloudFront for edge delivery, Amazon Kinesis Data Streams for real-time analytics, and AWS Lambda for event-driven processing.

The architecture is designed to handle peak concurrent viewership during high-profile Premier League fixtures, provide sub-second error recovery at the CDN edge, maintain a complete event audit trail for compliance, and operate within a predictable per-match cost envelope. Every layer is aligned with the AWS Well-Architected Framework including the Sustainability pillar.

Business Value

Direct-to-consumer OTT delivery with real-time engagement analytics, adaptive bitrate streaming across all devices, and per-match or subscription monetisation — without managing physical CDN infrastructure.

Key Architectural Decision

Vimond handles OTT product logic (authentication, entitlements, player, payments) while AWS handles ingest, transcoding, storage, delivery, and analytics — clear separation of concerns with each layer independently scalable.

Reliability Posture

Multi-AZ MediaLive pipeline, CloudFront Origin Shield, S3 Cross-Region Replication for VOD assets, and Kinesis On-Demand capacity mode — ensuring no single component failure disrupts the broadcast.

Business Problem

Manchester United's existing broadcast arrangement relies on third-party rights holders for distribution. As the club sought to capture direct-to-consumer revenue and own the viewer relationship, they required a streaming platform capable of serving a global fanbase of over 1.1 billion supporters — with the reliability and quality expected from a Premier League broadcast.

Peak Concurrency Spikes

Kick-off moments, goals, and VAR reviews trigger simultaneous stream requests from millions of concurrent viewers within seconds. Delivery infrastructure must absorb these spikes without buffering or dropped streams.

Global Audience Distribution

Viewers span the UK, US, Southeast Asia, the Middle East, and Sub-Saharan Africa. Last-mile latency from a single origin region produces unacceptable quality-of-experience metrics for distant viewers.

Monetisation Complexity

The platform must support pay-per-view per match, recurring subscription tiers, and geo-restricted content windows — requiring flexible entitlement logic that cannot be baked into CDN configuration alone.

Compliance & Rights Management

Broadcasting rights are geo-restricted per territory. The platform must enforce blackout rules in markets where rights are held by a third party, and maintain an auditable event log for rights compliance reporting.

Design Constraints

  • 10 home matches per season — platform must be match-ready within 4 hours of kick-off and torn down within 2 hours post-match to control cost
  • Peak concurrent viewership target: 500,000 simultaneous streams at match start
  • Maximum tolerated stream start latency (time-to-first-frame): under 3 seconds on a 10 Mbps connection
  • Geo-restriction enforcement required for UK, Germany, and selected Southeast Asian territories
  • Full event stream retained for 90 days for rights auditing; condensed highlights retained for 12 months
  • RTO of 5 minutes at the delivery layer (CloudFront failover); RTO of 15 minutes for origin ingest failover

Architecture Overview

The platform is structured as four distinct functional layers: ingest and encoding, origin packaging and storage, edge delivery, and analytics. Vimond sits across the product and entitlement layer, issuing signed tokens that CloudFront validates before serving stream segments. Each layer is independently scalable and replaceable without affecting the others.

Architecture Diagram · Official AWS Icons

INGEST & ENCODEORIGINEDGE DELIVERYREAL-TIME ANALYTICSStadiumRTMP SignalRTMP/ARQMediaConnectFEC + ARQMediaLiveABR EncodeMediaPackageHLS/DASH/CMAFHarvestS3VOD ArchiveViewers500k concurrentAWS WAFGeo + RateCloudFrontOrigin ShieldSigned URLVVimondOTTVimondEntitlementAPI GatewayEvents endpointLambdaKinesis proxyKinesisOn-DemandEFOLambdaAggregatorDynamoDBLive dashboardS3Event archiveEventBridgeMatch scheduleStart/Stop
Data / stream pathExternal OTT platform (Vimond)Icons: AWS Architecture Icons (official)

Request & Stream Flow

1

Live Signal Ingest

RTMP contribution feed from Old Trafford is ingested into AWS Elemental MediaLive via a redundant input (primary + backup). MediaLive is deployed in a standard-class channel with two pipeline processing for automatic failover between pipelines. The ingest endpoint is a MediaLive input attached to a MediaConnect flow for managed transport with Forward Error Correction (FEC).

2

Adaptive Bitrate Transcoding

MediaLive transcodes the incoming signal into a multi-bitrate ABR ladder: 1080p60 (8 Mbps), 720p60 (4 Mbps), 720p30 (2.5 Mbps), 480p30 (1.2 Mbps), 360p30 (700 Kbps), and 240p30 (400 Kbps). Each profile targets the same keyframe interval (2 seconds) to ensure seamless ABR switching in HLS and DASH manifests.

3

Packaging & Origin

MediaLive outputs are sent to AWS Elemental MediaPackage, which packages the stream into HLS (for iOS, Apple TV, Safari), DASH (for Android, web), and CMAF (for low-latency delivery). MediaPackage generates the origin manifests and serves segments on HTTPS. A MediaPackage Harvest Job is configured to automatically create VOD assets in S3 at match end for replay and highlights.

4

Edge Delivery via CloudFront

CloudFront distributes manifests and segments from MediaPackage origins. Origin Shield is enabled in eu-west-1 (London) as the intermediary cache layer, collapsing redundant origin requests from all 400+ edge PoPs into a single origin-facing connection pool. This protects MediaPackage from thundering-herd traffic spikes at kick-off. Signed URLs are required for all stream paths — CloudFront validates Vimond-issued tokens before serving any segment.

5

Entitlement & Access Control (Vimond)

Vimond handles user authentication, subscription and pay-per-view entitlement checks, and geo-restriction rule enforcement. Upon a valid entitlement check, Vimond's backend calls the CloudFront key pair API to issue a time-limited signed URL for the stream manifest. The player in the Vimond OTT app uses this URL to initiate playback. Token expiry is set to match duration plus 30 minutes.

6

Real-Time Analytics via Kinesis

The Vimond player SDK emits heartbeat events (every 10 seconds per viewer) and quality-of-experience (QoE) events (buffering, bitrate switches, errors) to an API Gateway endpoint backed by a Lambda proxy, which writes to a Kinesis Data Stream. The stream is configured in On-Demand capacity mode, automatically scaling shard count to handle up to 500,000 concurrent viewers each emitting one event per 10 seconds — approximately 50,000 records/second at peak. At 1,000 records/second write capacity per shard, On-Demand mode provisions up to 200 shards automatically.

7

Stream Processing via Lambda

Lambda functions consume from the Kinesis stream using the Event Source Mapping with parallelisation factor set to 10 (max per shard), enabling up to 2,000 concurrent Lambda invocations during a 200-shard peak scenario. Lambda writes aggregated viewership counts and QoE metrics to DynamoDB for live dashboards, and raw events to S3 (partitioned by match ID and minute) for post-match analytics queries via Athena.

8

VOD Delivery Post-Match

MediaPackage Harvest Jobs deliver completed match recordings to S3 as HLS VOD assets. Objects larger than 100 MB use S3 multipart upload. CloudFront serves VOD content from S3 origin using the same distribution (separate cache behaviour for VOD paths). Match recordings transition from S3 Standard to S3 Standard-IA after 30 days, to S3 Glacier Instant Retrieval after 90 days.

Vimond Media Platform Integration

Vimond is an OTT platform-as-a-service that handles the full subscriber lifecycle: user registration, authentication, entitlement management, payment processing, player SDK, and content metadata. In this architecture, Vimond is the product layer; AWS is the infrastructure layer. The integration boundary is the signed URL issuance point.

Entitlement Flow

Vimond's entitlement service checks the subscriber's active product access (PPV or subscription), validates the territory against the geo-restriction ruleset, and — on success — calls the Vimond backend to generate a CloudFront signed URL with a 3-hour expiry tied to the viewer session.

Player SDK

The Vimond OTT player is embedded in the web and mobile app. It handles HLS and DASH manifest loading, ABR switching logic, DRM token exchange (Widevine for Android/Chrome, FairPlay for Apple), buffering strategy, and the heartbeat event emission to the analytics endpoint.

Content Metadata

Match schedules, team lineups, match thumbnails, and EPG data are managed in Vimond's CMS. The OTT app fetches content metadata from Vimond's API, whilst the actual stream manifests are served directly from CloudFront — minimising Vimond API calls per viewer per session.

Geo-Restriction Enforcement

Territory rules are maintained in Vimond's rights management module. CloudFront's geo-restriction feature provides a secondary enforcement layer — blocking requests from blacklisted countries at the CDN edge before they reach origin, reducing origin load and strengthening rights compliance.

DRM & Content Protection

  • AWS Elemental MediaPackage supports multi-DRM packaging via SPEKE (Secure Packager and Encoder Key Exchange)
  • Widevine (Google) for Android, Chrome, and FireTV; FairPlay Streaming (Apple) for iOS, macOS, and Apple TV; PlayReady for Microsoft Edge and Xbox
  • DRM licence server (third-party: BuyDRM or Axinom via SPEKE) issues time-limited content keys; Vimond player SDK manages licence acquisition
  • AES-128 token-based encryption used for HLS streams to non-DRM devices (Smart TVs, older Android)
  • Signed URLs expire at match end + 30 minutes; replays use separate signed URL with 72-hour TTL

Live Ingest & Encoding

Reliable live ingest is the most latency-sensitive layer of the architecture. A failure at ingest produces a visible broadcast outage — unlike a CDN cache miss, which degrades gracefully. The design prioritises redundancy and fast automatic failover at every stage.

MediaLive Channel Class

Standard channel class provides two independent encoding pipelines (Pipeline 0 and Pipeline 1) operating simultaneously. Both pipelines produce identical output. MediaPackage receives output from both pipelines and uses the primary; if MediaPackage detects a gap in the primary pipeline's segment sequence, it automatically switches to the secondary within one segment interval (2 seconds).

Contribution Network

The contribution feed from the stadium is transported via AWS Elemental MediaConnect with ARQ (Automatic Repeat reQuest) and FEC (Forward Error Correction) to compensate for packet loss over the contribution circuit. A backup RTMP push path is configured as a secondary MediaLive input, auto-selected if the primary MediaConnect flow fails.

ABR Ladder Design

Six renditions from 240p to 1080p60 cover the full range of viewer connection speeds. The keyframe interval is fixed at 2 seconds across all renditions — a requirement for seamless ABR switching. The 1080p60 profile targets a broadcast-quality 8 Mbps peak bitrate using H.264 (AVC). H.265 (HEVC) is available for HbbTV and connected TV outputs to reduce bandwidth by ~40% at equivalent quality.

Closed Captions & Accessibility

CEA-608 and CEA-708 captions are passed through from the contribution feed and included in the HLS and DASH manifests as separate caption tracks. MediaLive supports pass-through of embedded captions without re-encoding, preserving the original caption timing.

Cost Control: Match-Scoped Infrastructure

MediaLive Standard channels are billed per active channel-hour. To avoid paying for idle encoding capacity between matches, the MediaLive channel is stopped between match days and restarted 4 hours before kick-off. An EventBridge scheduled rule (cron) triggers a Lambda function to start the channel, verify pipeline health, and page the operations team if the channel fails to reach Running state within 5 minutes.

Origin: MediaPackage & S3

MediaPackage is the packaging origin for all live streams. It receives the encoded output from MediaLive, packages it into HLS/DASH/CMAF manifests, and serves segments to CloudFront on HTTPS. S3 is the origin for all VOD assets (post-match recordings and highlights).

MediaPackage Endpoints

Three endpoints are configured per channel: HLS (for Apple devices and Safari), DASH (for Android and web browsers), and CMAF with Low-Latency HLS for viewers on supported players seeking sub-5-second glass-to-glass latency. Each endpoint has a 30-second manifest window and a segment duration of 2 seconds.

Time-Shifted Viewing

MediaPackage's Time-Shifted Viewing (TSV) feature maintains a rolling 6-hour content window. This allows viewers who join mid-match to start from kick-off, and supports a catch-up window covering the match + half-time period. The TSV window is stored in MediaPackage's managed origin store — no S3 bucket is required for this feature.

Harvest Jobs (VOD)

A MediaPackage Harvest Job is triggered via EventBridge 5 minutes after scheduled full-time. It clips the full match (typically 105–120 minutes) into a complete HLS VOD asset and writes the output to S3. A second Harvest Job clips a 10-minute highlights package. Both jobs complete within 2–3 minutes of job creation.

S3 Storage Classes

VOD assets land in S3 Standard. An S3 Lifecycle policy transitions objects to S3 Standard-IA after 30 days (infrequent access, lower cost) and to S3 Glacier Instant Retrieval after 90 days (archival with millisecond retrieval for compliance requests). Cross-Region Replication copies match recordings to a second region within 15 minutes of upload.

S3 Multipart Upload

Full match recordings are typically 25–40 GB for a 1080p60 stream. The Harvest Job output is written to S3 using multipart upload for objects over 100 MB — AWS recommendation for objects above this threshold. Multipart upload improves throughput by parallelising part uploads, and enables automatic recovery from network interruptions by retrying only the failed part rather than the entire object.

Edge Delivery: Amazon CloudFront

CloudFront is the delivery layer for both live stream segments and VOD assets. With over 400 Points of Presence globally, CloudFront delivers content from the edge closest to each viewer, reducing latency and offloading origin traffic. At peak (500,000 concurrent viewers, one segment request every 2 seconds), CloudFront handles approximately 250,000 requests per second with sub-10ms cache hit latency.

Origin Shield

Origin Shield is enabled in eu-west-1 (London) — the closest available Origin Shield region to the MediaPackage origin. All CloudFront PoPs around the world route cache misses through Origin Shield before reaching MediaPackage. This collapses the thundering herd at kick-off (when all 500,000 viewers simultaneously request the first segment) into a single cache-fill request per segment reaching MediaPackage, protecting origin from amplified load.

Cache Behaviours

Live manifests (.m3u8 files) have a TTL of 2 seconds — matching the segment interval — so viewers always receive a fresh segment index. Segment files (.ts and .fmp4) are immutable once written and carry a 1-year TTL. VOD assets on the /vod/* path have a 7-day manifest TTL and a 1-year segment TTL. This TTL split ensures live viewers get fresh manifests without overwhelming origin on every segment request.

Signed URLs & Token Auth

All live stream paths require a CloudFront signed URL. Vimond's backend generates the signed URL using an RSA private key associated with a CloudFront key group. The signed URL covers the manifest path with a time-limited policy expiring 3 hours after issuance. CloudFront rejects requests without a valid signature before they reach origin, preventing unauthorised stream access.

Price Class

CloudFront Price Class All is used — distributing content from all 400+ edge locations globally. Given Manchester United's major audience regions (UK, Europe, US, Southeast Asia, Middle East), Price Class All delivers the optimal cache hit ratio and latency profile. Price Class 100 (US/Europe only) or Price Class 200 (US/Europe/Asia) would reduce cost but increase latency for the high-revenue Asian and Middle Eastern markets.

Real-Time Logs

CloudFront Real-Time Logs are configured on the live stream cache behaviour, delivering access log records to a dedicated Kinesis Data Stream within 1 second of the request. Fields captured include viewer IP, edge location, cache result (Hit/Miss/RefreshHit), bytes transferred, time-to-first-byte, and the viewer's User-Agent. A Lambda consumer reads from this stream and writes aggregated CDN metrics (requests/second per PoP, cache hit rate, error rate) to CloudWatch custom metrics for the live operations dashboard.

WAF Integration

  • AWS WAF is attached to the CloudFront distribution to enforce geo-restriction at the CDN edge
  • IP rate limiting rule: 1,000 requests per 5-minute window per IP — prevents credential stuffing and stream token farming
  • Managed rule group (AWS-AWSManagedRulesCommonRuleSet) blocks known bad actors, SQL injection attempts, and XSS payloads
  • Custom rule blocks requests without a valid User-Agent matching known player SDK signatures — reduces bot scraping of stream URLs
  • AWS WAF is billed per rule evaluated per million requests; for a 250,000 req/sec peak, WAF cost is a material line item and rules are kept minimal

Real-Time Analytics: Amazon Kinesis

Real-time analytics are critical to sports streaming operations. The production team needs live visibility into concurrent viewer counts, stream quality metrics, geographic distribution, and CDN error rates during the match. Post-match, the data drives revenue reporting, QoE analysis, and rights compliance audit trails.

Kinesis Data Stream (Player Events)

The player event stream receives heartbeat events (every 10 seconds per viewer) and QoE events (buffering start/end, bitrate switch, error, rebuffer ratio) from the Vimond player SDK via API Gateway and Lambda proxy. At 500,000 concurrent viewers with a 10-second heartbeat interval, this stream processes ~50,000 records/second. On-Demand capacity mode is used — Kinesis automatically scales shard count up to the service default limit, handling burst without manual shard management.

Kinesis Data Stream (CDN Logs)

CloudFront Real-Time Logs deliver CDN access records to a second Kinesis stream. At 250,000 requests/second peak, this stream requires provisioned shards at 1,000 records/second write throughput per shard — approximately 250 shards minimum. On-Demand mode is used to handle the rapid ramp-up at kick-off without pre-provisioning. Each record is approximately 500 bytes; at 250,000 records/second, the stream handles ~125 MB/second — well within the 1 MB/second per shard write limit when distributed across 250+ On-Demand shards.

Shard Capacity Limits

Each Kinesis Data Stream shard supports 1,000 records/second or 1 MB/second on writes (whichever is reached first), and 2 MB/second on reads. With Enhanced Fan-Out, each registered consumer gets a dedicated 2 MB/second read throughput per shard — essential when multiple Lambda functions (analytics, CDN dashboard, audit logger) consume from the same stream concurrently without competing for read capacity.

Retention & Audit

Player event stream retention is set to 7 days (default). For rights compliance audit requirements (90-day retention), a Lambda consumer writes raw player events to S3 (partitioned by match ID, date, and viewer region) within 60 seconds of receipt. Kinesis does not retain data beyond 7 days natively; S3 is the authoritative long-term event store for compliance purposes.

Enhanced Fan-Out

Enhanced Fan-Out (EFO) is enabled for all Lambda consumers on both streams. Without EFO, all consumers on a shard share a single 2 MB/second GetRecords throughput — meaning with 3 consumers, each gets approximately 666 KB/second effective read capacity. With EFO, each registered consumer gets a dedicated 2 MB/second pipe per shard via HTTP/2 server push, with record delivery latency reduced from ~200ms (polling) to typically under 70ms (push). This is required to support simultaneous consumption by the live dashboard Lambda, the audit S3 writer Lambda, and the DynamoDB aggregator Lambda without read throttling.

Event-Driven Processing: AWS Lambda

Lambda provides the event-driven compute layer that bridges Kinesis streams to downstream stores (DynamoDB, S3) and triggers operational workflows (channel start/stop, harvest jobs, alerting). Lambda's integration with Kinesis uses a managed polling mechanism — the Event Source Mapping — which handles checkpointing, retry, and shard rebalancing automatically.

Kinesis Event Source Mapping

Each Lambda function consuming from Kinesis is connected via an Event Source Mapping with a batch size of 100 records and a batch window of 5 seconds. The parallelisation factor is set to 10 — meaning Lambda spawns up to 10 concurrent invocations per shard, each processing a subset of the batch in parallel. With 200 On-Demand shards at peak, this allows up to 2,000 concurrent Lambda invocations per consumer function. Lambda's default concurrency limit of 1,000 per region is a hard constraint — reserved concurrency is allocated per function to prevent one consumer from exhausting the regional pool.

Function Timeout

Lambda's maximum function timeout is 900 seconds (15 minutes). Analytics processing functions are designed to complete within 30 seconds per batch — well within the limit. The EventBridge-triggered channel management functions (start/stop, harvest job creation) may run for up to 5 minutes while polling for channel state transitions. Idempotency keys are used on all state-mutation operations to prevent duplicate channel starts if the function is retried.

DynamoDB Writer

A Lambda function aggregates concurrent viewer counts from the player heartbeat stream and writes to DynamoDB every 10 seconds. The DynamoDB table uses match_id as the partition key and minute_of_match as the sort key, enabling time-series queries for the live viewership chart. DynamoDB on-demand capacity mode is used to absorb write spikes at kick-off without pre-provisioning WCUs.

Operational Lambdas

EventBridge schedules control the match-day workflow: T-4h triggers MediaLive channel start and health verification; T-0 triggers WAF rule activation; T+90min triggers Harvest Job creation; T+120min triggers channel stop and WAF rule deactivation; T+24h triggers S3 lifecycle tagging for completed match assets. Each Lambda publishes a custom CloudWatch metric on success and failure for operational visibility.

Security Architecture

Security is enforced at every layer: network, transport, application, content, and identity. The platform handles subscriber PII (email, payment tokens via Vimond's PCI-compliant layer), broadcast content with commercial rights implications, and real-time data streams that could expose viewer behaviour at scale.

Encryption

  • All data in transit is encrypted with TLS 1.2 or higher; CloudFront enforces the TLSv1.2_2021 security policy on viewer-facing connections, supporting TLS 1.2 and 1.3 only
  • MediaPackage endpoint to CloudFront: HTTPS with Origin Shield as the intermediary; no unencrypted paths in the delivery chain
  • S3 buckets use SSE-S3 (AES-256) encryption at rest by default; KMS-managed keys (SSE-KMS) are used for match recordings to enable per-key audit trails via AWS CloudTrail
  • Kinesis Data Streams are encrypted at rest using KMS-managed keys; all Lambda environment variables with credentials use KMS encryption
  • DynamoDB tables are encrypted at rest using AWS-owned keys; viewer analytics data does not include PII — only anonymised session identifiers

Access Control

  • IAM roles with least-privilege policies govern all Lambda-to-Kinesis, Lambda-to-DynamoDB, Lambda-to-S3, and Lambda-to-MediaLive interactions; no access keys stored in function code
  • CloudFront signed URLs restrict stream access to authenticated, entitled subscribers; URL expiry is enforced by CloudFront independently of Vimond session state
  • S3 bucket policies block all public access; CloudFront Origin Access Control (OAC) is the only allowed principal for VOD bucket reads
  • AWS WAF geo-restriction rules block viewer access from blacklisted territories at the CDN edge — a second enforcement layer beyond Vimond's entitlement check
  • MediaLive and MediaPackage resources are deployed in a dedicated VPC with no public internet access; only AWS service endpoints and MediaConnect are accessible from the ingest subnet

Audit & Compliance

  • CloudTrail is enabled in all regions; S3 data event logging captures every GetObject on the VOD bucket for rights audit evidence
  • Kinesis player events are written to S3 with 90-day retention to support broadcasting rights compliance reporting
  • VPC Flow Logs are enabled on the ingest VPC to detect unexpected traffic patterns from the contribution network
  • AWS Config rules track changes to IAM policies, S3 bucket ACLs, and WAF rule groups — any drift triggers an SNS alert to the security team

Cost Model

The platform is designed for match-scoped lifecycle management: infrastructure is active only during the match window to minimise idle cost. The cost model below is based on a single home match (estimated 3-hour active window including pre-match and post-match) with 500,000 peak concurrent viewers.

MediaLive (per match)

Standard channel, 6-output ABR ladder, 4-hour active window (T-4h to T+0h post-match): approximately $180–$220 per match depending on region. Channel is stopped between match days — no idle charges. 10 home matches: ~$2,000/season for encoding alone.

CloudFront (per match)

500,000 viewers × 3 hours × 30 segment requests/min × ~250 KB/segment = approximately 675 TB of data transfer per match. At $0.0085/GB (Price Class All, blended), this is approximately $5,700/match. Origin Shield adds ~$0.0010/GB for cache fills — negligible relative to edge transfer. 10 matches: ~$57,000/season.

Kinesis (per match)

On-Demand mode pricing: $0.08 per million records written. At 50,000 player events/second for 3 hours = ~540 million records. Cost: ~$43/match for the player event stream. CDN log stream at similar volume: ~$43/match. Enhanced Fan-Out: $0.015 per shard-hour — minimal relative to records pricing. 10 matches: ~$860/season for Kinesis.

Lambda (per match)

At 2,000 concurrent invocations × 3 hours × typical 5-second duration per invocation: approximately 2 million invocations/match. At $0.20 per million invocations + $0.0000166667 per GB-second at 512 MB: approximately $25/match. Operational Lambdas (channel management, harvest) add negligible cost. 10 matches: ~$250/season.

S3 (per season)

10 matches × ~40 GB per 1080p60 full match = 400 GB for full recordings. Highlights (10 × 2 GB) = 20 GB. Cross-Region Replication doubles storage cost. At $0.023/GB/month for Standard, lifecycle transitions to Standard-IA and Glacier Instant Retrieval reduce long-term cost significantly. Annual storage cost: under $50 for a season's recordings.

Total Estimated Season Cost

Encoding: ~$2,000 · Delivery: ~$57,000 · Analytics: ~$1,100 · Storage: ~$500 · MediaPackage + WAF + other: ~$3,000. Total estimated season cost: approximately $63,000–$68,000 for 10 home matches at 500,000 peak concurrent viewers. Per-viewer per-match cost: ~$0.13.

Cost Optimisation Levers

  • Stop MediaLive channel between match days — largest single cost reduction lever
  • Use CloudFront Reserved Capacity pricing if committing to a volume of data transfer per month across the season
  • Switch to HEVC (H.265) for Smart TV and connected device profiles — reduces bitrate by ~40%, cutting CloudFront data transfer cost proportionally for those viewer segments
  • Reduce ABR ladder to 5 renditions (remove 1080p60 for non-premium subscribers) to reduce MediaLive encode cost by approximately 15%
  • Use Kinesis On-Demand mode to avoid over-provisioning shards for the ramp-up period; switch to Provisioned if the workload becomes steady-state across a full season

AWS Well-Architected Framework

The platform is evaluated against all six pillars of the AWS Well-Architected Framework.

Operational Excellence

Match-day runbook: EventBridge-driven Lambda functions automate channel start, WAF activation, Harvest Job creation, and channel stop. Operations team receives SNS notifications at each stage with success/failure status.

Observability: CloudWatch dashboard aggregates MediaLive pipeline health, CloudFront error rate, Kinesis iterator age (consumer lag indicator), Lambda error rate, and live viewer count from DynamoDB — all on a single match-day operations screen.

Post-match review: Kinesis iterator age during the match is the primary indicator of consumer pipeline health; a growing iterator age indicates Lambda cannot keep up with the event rate and requires immediate investigation.

Security

Defence in depth: Geo-restriction enforced at Vimond (entitlement), CloudFront (WAF rule), and MediaPackage (no public origin); three independent enforcement points for rights compliance.

Encryption everywhere: TLS 1.2+ on all data paths; KMS-managed keys for VOD recordings and Kinesis streams; no plaintext credentials in any Lambda function.

Audit trail: CloudTrail + S3 data event logging + 90-day Kinesis-to-S3 player event retention provides a complete audit trail for rights compliance and incident response.

Reliability

MediaLive redundancy: Standard channel class with two independent pipelines; MediaPackage automatic failover between pipelines within one segment interval (2 seconds).

CloudFront resilience: Origin Shield absorbs thundering-herd at kick-off; CloudFront itself has no single point of failure — traffic automatically routes to available PoPs if a location degrades.

Kinesis durability: Records are replicated synchronously across three AZs within the stream before the PutRecord call returns; no records are lost even if an AZ fails during a match.

Performance Efficiency

Edge caching: CloudFront's 400+ PoP network with Origin Shield ensures the majority of viewers are served from a cache hit within tens of milliseconds — critical for the high request rates at kick-off.

ABR streaming: The six-rendition ABR ladder allows every viewer's player to select the highest quality their connection supports, maximising QoE across varying network conditions.

Kinesis On-Demand: Eliminates shard under-provisioning at the traffic spike immediately following kick-off — the most latency-sensitive period for analytics pipeline throughput.

Cost Optimisation

Match-scoped lifecycle: MediaLive is started 4 hours before kick-off and stopped post-match. No encoding costs are incurred between match days — the single largest cost control mechanism for a seasonal sports event.

S3 tiering: Automatic lifecycle transitions to Standard-IA and Glacier Instant Retrieval reduce storage cost as match recordings age, without requiring manual intervention.

CloudFront caching: High cache hit ratio (target >98% for segment files) means the majority of viewer requests are served without touching origin — minimising MediaPackage request costs.

Sustainability (6th Pillar)

Match-scoped infrastructure: Starting and stopping MediaLive between matches eliminates idle energy consumption. A continuously running channel would consume the same energy for 168 hours/week as a 3-hour match — a 56× difference in energy efficiency.

Edge offload: Serving ~98% of viewer requests from CloudFront edge cache means each segment is fetched from origin once and served thousands of times — dramatically reducing the number of origin compute cycles per viewer.

HEVC transcoding: Encoding Smart TV profiles in H.265 reduces the bitrate required to achieve equivalent quality by ~40%, directly reducing CloudFront data transfer volume and the energy consumed to deliver it.

Storage lifecycle: Automatic S3 tiering reduces storage in higher-energy-intensity tiers; Glacier Instant Retrieval uses significantly less active storage infrastructure than S3 Standard for data accessed infrequently.

Engineering Decisions & Tradeoffs

Every architectural decision in this platform involves a tradeoff. The following documents the key decisions, what was chosen, what was traded away, and why the tradeoff was acceptable given the constraints.

Decision 1: MediaLive + MediaPackage vs. Third-Party Encoder + Custom Origin

Chosen: AWS Elemental managed services (MediaLive + MediaPackage).

Traded away: Lower per-hour cost of self-managed encoder (e.g., Bitmovin on EC2). MediaLive Standard is approximately 3–5× more expensive per active hour than a comparable EC2 instance running open-source encoding software.

Why acceptable: MediaLive provides native two-pipeline redundancy, automatic MediaPackage failover, native MediaConnect integration, and AWS-managed SLAs. For a live broadcast with no tolerance for an engineer manually restarting a crashed encoder during a match, the operational reliability justifies the cost premium.

Decision 2: CloudFront Price Class All vs. Price Class 200

Chosen: Price Class All — all 400+ edge locations globally.

Traded away: Price Class 200 (excludes some South American and African PoPs) would reduce per-GB CDN pricing slightly. Estimated saving: 5–8% on data transfer costs.

Why acceptable: Manchester United's major fan bases in Southeast Asia and the Middle East would experience higher latency and lower cache hit rates with Price Class 200. The QoE degradation in these high-revenue markets is not an acceptable tradeoff for a 5–8% cost reduction.

Decision 3: Kinesis On-Demand vs. Provisioned Shards

Chosen: On-Demand capacity mode for both analytics streams.

Traded away: Provisioned shards are cheaper if the workload is predictable. At steady-state throughput, Provisioned costs approximately 50% less per shard-hour than On-Demand equivalent capacity.

Why acceptable: The kick-off traffic spike produces a step-function increase in event volume within seconds — too fast for manual shard scaling. On-Demand absorbs this automatically. Given the short match window (3 hours) and seasonal frequency (10 matches), the cost premium over Provisioned is approximately $200/season — a negligible operational simplicity tradeoff.

Decision 4: Enhanced Fan-Out vs. Standard GetRecords

Chosen: Enhanced Fan-Out for all Lambda consumers.

Traded away: EFO adds $0.015 per shard-hour per consumer. Standard GetRecords polling is free (beyond data retrieval charges). For a 200-shard stream with 3 consumers for 3 hours: approximately $27 per match in additional EFO cost.

Why acceptable: Without EFO, three consumers share 2 MB/second read throughput per shard — approximately 666 KB/second each. At 50,000 records/second across 200 shards, each shard carries ~250 records/second × ~500 bytes = ~125 KB/second, comfortably within 666 KB/second per consumer. However, EFO's push-based delivery reduces consumer lag from ~200ms (polling) to under 70ms — critical for the live viewer count dashboard updating in near real-time during the match.

Decision 5: Vimond vs. Building Custom OTT Stack

Chosen: Vimond as the OTT product platform.

Traded away: Full control of the subscriber experience and lower long-term licensing cost versus a custom-built OTT stack.

Why acceptable: Building a full OTT platform (authentication, entitlements, payments, player SDK, DRM licence management, CMS, EPG) represents 18 to 24 months of engineering effort. Vimond delivers these capabilities immediately, with proven DRM multi-stack support and existing integrations with CloudFront signed URL generation. The time-to-market advantage justifies the licensing cost for the initial season.

Migration Path

As viewership scales and the DTC strategy matures, the following upgrades extend the platform without replacing it:

  • Replace MediaPackage TSV with Amazon IVS (Interactive Video Service) for interactive match experiences (polls, stats overlays, multi-angle) — IVS supports ultra-low latency (sub-3 seconds) for interactive formats
  • Add Amazon Personalize to serve contextually relevant content recommendations in the VOD library between match days, increasing platform engagement and reducing churn
  • Migrate analytics from Lambda + DynamoDB + S3 + Athena to Amazon Kinesis Data Analytics (Managed Apache Flink) for true real-time stream processing with sub-second windowed aggregations
  • Add AWS Elemental MediaTailor for server-side ad insertion (SSAI) on VOD replays — inserting targeted advertising at natural breaks without client-side ad blockers affecting fill rate
  • Enable CloudFront Continuous Deployment to safely test CDN configuration changes on a staging distribution receiving 5% of traffic before promoting to production — eliminating the risk of a CDN misconfiguration during a live match