Skip to content

Industry · enterprise & education

Private video, behind your own perimeter

Training material, internal briefings, lecture capture and recorded assessments. The volume is modest and the access rules are not — which is the opposite of a consumer service, and the reason consumer platforms fit this badly.

Audience

Who this is for

Organisations where the question is not how many people watch, but which people are allowed to, and where the recording is not permitted to leave the perimeter.

Enterprise network operators
Internal video behind an existing identity provider, with access decided by group membership rather than by subscription.
Education institutions
Lecture capture and course material with retention and deletion governed by policy rather than by a vendor's defaults.
Regulated organisations
Bodies whose data policy requires recordings and access logs to stay on infrastructure they control.

Here, access control is the product

A consumer streaming platform assumes almost everyone may watch almost everything, and spends its engineering on delivering at scale. An internal platform inverts that: the audience is small, the catalogue is sensitive, and the interesting question is who may see which item, for how long, and who is able to prove it afterwards.

Running it on your own infrastructure is not primarily a cost decision here. It is that the recordings never leave your perimeter, the viewing data never reaches a third party, and retention is something you enforce rather than something you request.

Detail

What a private deployment has to get right

Access

Groups, not a subscriber list

Entitlement follows your directory — departments, cohorts, roles — instead of a payment record, and it is enforced at the edge on every segment.

  • Directory-driven groups
  • Per-item and per-group rules
  • Enforced per segment, not per session

Containment

The recording never leaves

Origin, encoding and delivery inside your perimeter. No copy on a vendor's storage, no viewing telemetry leaving to a third-party analytics account.

  • Self-hosted origin and edge
  • Telemetry stays in your estate
  • No external processor to assess

Retention

Deletion that actually happens

Lifecycle rules declared in code, so a retention policy is enforced by the system rather than depending on somebody remembering.

  • Lifecycle rules in Terraform
  • Automatic expiry per class
  • Auditable deletion

Scale

Right-sized, not consumer-sized

A few thousand viewers does not need a consumer-scale estate. The same platform deploys small, and grows the same way if it needs to.

  • Small starting footprint
  • Same architecture, smaller estate
  • Grows without a redesign

Reference architecture

Everything inside the perimeter

The full on-premises pattern, deployed at a smaller size.

01Viewers

Untrusted — the public internet

  • Web playerHLS · AES-128
  • Mobile appsAndroid · iOS in development
  • TV appsAndroid TV · Tizen in development
  • Contributionbroadcaster RTMP in

02Edge zone — the only public addresses in the estate

TLS terminates here and nowhere else

  • traefik-edgeTLS · host and path routing
  • CrowdSecWAF and behavioural bans
  • Live pathlow-latency HLS
  • VOD pathrange-aware cache

03Application services — private VLAN, no public address

Reachable only through the edge, or through the bastion for operators

  • app-coreBFF aggregator
  • content-apicatalogue
  • search-apiindex-backed
  • session-authzsessions · entitlement
  • billingplans · payments · coupons
  • key-deliveryDRM keys, per segment
  • recommendationranking
  • bastionthe only way in, SSH only

04Media plane — live and on-demand are deliberately separate

A match-night surge cannot evict the back catalogue

  • live-transcodeFFmpeg, continuous
  • live-originHLS packaging
  • vod-transcode + GPUFFmpeg NVENC pool
  • vod-origin-cacheorigin pull and cache
  • upload-apiVOD ingest
  • job-schedulertranscode orchestration
  • RabbitMQjob queue
  • MinIOS3-compatible origin of record

05Data and messaging

State lives inside the perimeter

  • MariaDBprimary application store
  • Redissession and shared cache
  • Elasticsearchsearch index
  • ClickHouseper-session playback telemetry
  • Redpandaevent bus, Kafka API
  • OpenBaosecrets and transit encryption

06Virtualisation, delivery and observability

Declared entirely in code — the estate rebuilds from the repository

  • Proxmox VEisolated guest per service
  • Terraformguest lifecycle
  • Ansibleapplication delivery
  • Pipeline → registrybuild once, pull everywhere
  • Prometheusmetrics and cAdvisor
  • SigNozOpenTelemetry traces
  • Grafanadashboards and alerting
  • Lokifleet-wide logs
  • Yours — hardware you own
  • Rented — public cloud
  • Edge — faces the viewer
Live and VOD are deliberately separate machines. A stadium-scale live surge and a long-tail catalogue have opposite cache behaviour, and sharing one box means the surge evicts the catalogue.

Questions

The things internal teams ask first

Can it authenticate against our existing directory?

Yes. Your directory stays authoritative for identity and group membership; the platform consumes it rather than maintaining a parallel user list.

Is this overkill for a few hundred viewers?

The estate is sized to you. What does not shrink is the access control and the containment, and those are usually the reason an internal platform exists at all.

Can we prove who watched what?

Per-session telemetry and access logs stay in your own estate, which is what makes an audit answerable rather than a support ticket to a vendor.

What does the access policy have to say?

Group structure, retention obligations and where the data is allowed to live. Those three answers determine the architecture more than the viewer count does.