Skip to content

Media and Entertainment

We build sports streaming and fan analytics, with AI agents held to every rights deal.

When live game delivery and audience analytics are both on your roadmap and your team can only staff one, our senior engineers join you and build them as one system. Any agent we add reads only what each rights deal and your privacy terms allow.

  • BZZR
  • Databricks partner
  • Microsoft Solutions Partner

The problems

What we're brought in for

  • A count instead of an audience

    Rights holders have historically been handed almost nothing by their streaming partners. How many watched, from which devices, and what else those people care about are answerable questions that most platforms in this market don't answer.

  • The engineer who scopes it builds it

    For BZZR, which carries Texas Rangers games beside creator video and podcasts, we built live streaming with ad injection, a pipeline that transcribes and indexes partner video, and analytics on Databricks that a club can act on. Whoever scopes your version of that with your product team is the engineer who'd build it.

  • Three numbers called a view

    Viewers, peak concurrent and minutes watched get used as if they were the same number, and the contract usually means only one of them.

  • Subscribers asked to start again

    A club that changes streaming platforms mid-season loses the people who already paid, unless identity was built to move.

What we build

What we build in media and entertainment

The streaming product4

  • Built for BZZR

    Live games with ad injection

    Texas high school football through Major League Baseball, on an AWS Elemental stack with ad injection.

    • Live games and ads in one stream
    • From high school football to Major League Baseball
    AWS ElementalLive streaming
  • Built for BZZR

    Games, creators and podcasts together

    One product for live games, creator video and podcasts, under team and talent control, with a social layer beside the stream.

    • One app for the game and the conversation
    • Verified creators publish next to the live game
    PostgreSQLGCP
  • Built for BZZR

    A club moved mid-season

    In July 2026 the Texas Rangers moved their direct-to-consumer streaming to BZZR, part-way through the season.

    • Existing subscribers came across authenticated
    • Nobody was asked to sign up again
    IdentityLive streaming
  • Built for BZZR

    Partner video into a sports graph

    Partner video is ingested, transcribed and mined for the moments worth surfacing, and that output is the graph of who is talking about whom.

    • Key terms and the moments worth surfacing
    • Who is talking about whom, as a graph
    TranscriptionSports graph

Audience data on Databricks4

  • Built for BZZR

    Click analytics on Databricks

    Click analytics for BZZR runs on Databricks. The fan intelligence layer, joining that behaviour to the content graph, is what gets built on top.

    • Click analytics running on Databricks
    • The graph and the viewing kept as separate layers
    DatabricksClick analytics
  • How we'd build it

    Heartbeats, then the three counts

    We'd have the player send a session start, play, pause, seek, ad start and complete, and a heartbeat while the video is moving, then agree which of viewers, peak concurrent and minutes watched the contract means.

    • Minutes from heartbeats, not from session ends
    • The contract's definition chosen before the chart
    Structured StreamingDatabricks
  • How we'd build it

    Ad beacons joined to the break

    We'd join the break schedule to the beacons the player sends at the start, middle and end of each ad, so a sponsor can be told what actually ran, including the slate when the ads don't fill the break.

    • Fill and slate read from the same join
    • One viewer's manifest, rewritten for that viewer
    AWS ElementalAd beacons
  • How we'd build it

    A name that lands on the clip

    We'd keep each word's start and end time through the transcript, so a search for a player opens the second it was said.

    • Timestamps kept at every step
    • A search opens a clip, not a two-hour file
    Transcription

Reference architecture

How the data fits together in media and entertainment

The live stream, the player events and the partner video land once. Click analytics and the sports graph stay separate layers, and the fan intelligence is what gets built on top.

1 · Live games
and ad injection

2 · Databricks lakehouse, Unity Catalog
playback and the sports graph, kept apart

1 · Player events
and heartbeats

1 · Partner video

3 · Three counts, named apart
viewers, peak concurrent, minutes watched

4 · Click analytics

4 · The fan intelligence
built on top

4 · A creator's audience

Live games, player events and partner video land once under Unity Catalog. Click analytics and the sports graph stay separate, and the fan intelligence is built on top.
  1. Step 1: Land the stream, the events and the video

    Live game delivery and ad injection, player events, and partner video each arrive as their own governed tables.

  2. Step 2: One lakehouse for playback and the graph

    Databricks and Unity Catalog hold the playback events and the sports graph of who is talking about whom, as separate layers.

  3. Step 3: Keep the three counts apart

    Viewers, peak concurrent and minutes watched are computed from the heartbeats and named as three numbers, so a rights holder and a sponsor are not handed the same one.

  4. Step 4: Serve the club and the creators

    Click analytics reads those tables. The fan intelligence layer, and a creator's audience, are what get built on top of them.

Proof

Work we've shipped in media and entertainment

Compliance and governance

The rules a streaming app runs into

  • Apple reader apps

    Guideline 3.1.3(a) lists video among the reader apps, so a viewer can sign in to a subscription bought on the web. On the United States storefront the guidelines also allow a link out to buy. Other storefronts restrict that more tightly.

    Source: App Store Review Guidelines

The longer version is under In depth.

How we engage

Ways to start

  • Six weeks, after discovery

    Lakehouse Launchpad

    A governed lakehouse from a standing start, with Unity Catalog in place before the first pipeline and dashboards for the people who asked for them.

  • Two weeks, fixed fee

    Databricks Health Check

    Reads cost, job reliability and Unity Catalog coverage on the platform you already run, and ends in a ranked scorecard.

  • For the length of the engagement

    Forward-deployed engineers

    Senior engineers in your workspace and your repository, as a team with a lead or as individuals under yours.

  • Two weeks, fixed fee

    AI Readiness Assessment

    Names the use case worth building first, the data and permissions it needs, and what it would cost to run for a month.

In depth

Media and Entertainment in depth, with sources

Rights holders have historically been handed almost nothing by their streaming partners. How many watched, from which devices, and what else those people care about are answerable questions that most platforms in this market don't answer.

For BZZR, which carries Texas Rangers games beside creator video and podcasts, we built live streaming with ad injection, a pipeline that transcribes and indexes partner video, and analytics on Databricks that a club can act on. Whoever scopes your version of that with your product team is the engineer who'd build it.

How a play button becomes "who watched"

A streaming report is only as good as the events the player sends. The useful set is small. A session start with the viewer, device and app version, then play, pause and seek, an ad start and an ad complete, and a heartbeat every thirty seconds or so while the video is actually moving.

The heartbeat is the one people skip, and it's the one that matters, because an app that gets swiped away never sends a session end. Without heartbeats you can count starts but you can't count minutes. Three numbers then get confused in every meeting. Viewers counts distinct people across the whole game, peak concurrent is the most people watching at one moment, and minutes watched comes from multiplying heartbeats by the interval.

A rights holder asking how many watched usually means the first, a sponsor usually means the third, and the platform's own dashboard often shows the second. Agreeing which one goes in the contract is worth doing before anyone builds a chart. On Databricks the heartbeats land as a stream, and a watermark tells Structured Streaming how late an event may arrive and still count.

For a live screen during the game, approx_count_distinct gives viewers cheaply, and the docs give its default maximum relative standard deviation as 5%. For the number that goes to a club, count the distinct IDs exactly, because a 5% gap is an argument nobody needs.

SELECT game_id,
       count(DISTINCT viewer_id)        AS viewers,
       approx_count_distinct(viewer_id) AS viewers_live_estimate,
       count(*) * 30 / 60.0             AS minutes_watched
FROM   media.playback.heartbeats
WHERE  event_date = current_date()
GROUP  BY game_id;
Illustrative table name, assuming one heartbeat row every 30 seconds while playback is running.

Sources: approx_count_distinct, watermarks in Structured Streaming

Ads in a live game, and the number sales will ask for

BZZR's live games run on an AWS Elemental stack with ad injection. The general mechanism, as AWS documents it for MediaTailor, goes like this. The player asks for the stream with some information about the viewer.

MediaTailor asks an ad decision server what to show, gets back a VAST response, and rewrites the manifest for that one viewer. In a live stream it replaces the content between the ad markers, so an ad break has to be signalled with a cue-out and either a duration or a matching cue-in.

The detail that changes reporting is what happens when the ads don't fit. AWS's own example is a 70-second break and two 40-second ads, which plays one ad and fills the remaining 30 seconds with slate or the underlying content.

Fill rate and slate time live in the gap between the break schedule and the ad beacons, which the player or MediaTailor sends at the start, middle and end of each ad. Join those two and you can tell a sponsor what actually ran.

Sources: how MediaTailor ad insertion works, live ad stitching behaviour, ad tracking and beacons

Hours of partner video, searchable by the moment

The BZZR pipeline ingests partner video, transcribes it and mines it for key terms and the moments worth surfacing, and that output builds the sports graph of who is talking about whom. The part that makes a transcript useful is timing.

Amazon Transcribe, for example, returns a start time, an end time and a confidence score for every word, so a mention of a player can point at the second it happened rather than at a two-hour file.

Keep the timestamps through every step, and a search for a name lands on the clip. Drop them, and you've built a very large text file.

Checked on 11 October 2026 against Amazon Transcribe output format.

What a fan analytics build has to decide

The subscriber question is the one that bites late. When the Texas Rangers moved their direct-to-consumer streaming to BZZR in July 2026, part-way through the season, the existing subscribers came across transferred and authenticated rather than being asked to sign up again.

That only works if identity was designed as something you can move. The whole build is written up in [the BZZR case study](/case-studies/bzzr).

Questions worth answering first

  • Which definition of a view goes into the rights-holder contract
  • Whether every player on every device sends a heartbeat, and at what interval
  • Who owns the subscriber identity, and whether it survives a move between platforms
  • Which device and location data your privacy terms let you keep, and for how long
  • Whether the club needs numbers during the game or the next morning
  • Where ad beacons go, and whether you can join them to the break schedule

FAQ

Media and Entertainment: questions we get asked

How would you govern an AI agent on fan and viewing data?

We'd design the rules in before the agent is built. What each rights deal lets you share, and which device and location data your privacy terms let you keep, become policy and Unity Catalog permissions the agent works under, so a summary for one club never reads another club's audience.

Every action it proposes is checked against that policy and recorded, in testing as in production, the way the Field Guide's chapter on governed actions describes and our AI agent services build.

Can you handle live game delivery, or only the data side?

Both, and on BZZR at /case-studies/bzzr they are the same product. Live streaming with ad injection runs on an AWS Elemental stack, and the content pipeline that transcribes and indexes partner video feeds the same graph the analytics read from.

What can we actually tell our rights holders?

Who watched, how often, on what device, and what else that audience follows. The value is in joining viewing behaviour to the content graph rather than reporting either alone, which is the work Databricks carries.

Does an OTT streaming app have to sell subscriptions through Apple's in-app purchase?

Not always. Apple's App Store Review Guidelines list video among the reader app categories in guideline 3.1.3(a), so a streaming app may let a viewer sign in to a subscription bought on the web. On the United States storefront the guidelines also allow links and buttons to buy outside the app, which other storefronts restrict more tightly.

The identity work matters whichever way the paywall goes. When the Texas Rangers moved their streaming to BZZR part-way through the season, existing subscribers came across without signing up again, and we'd design for that move from the start.

Talk to someone who has built this.

A technical conversation with a senior engineer who has shipped in media and entertainment, about what you're trying to build.