Middleware-arkitektur: Integrering av API-er for tilpasset EPG- og VOD-administrasjon

  1. Ryggraden i moderne OTT

Hvis du utvikler en strømmetjeneste, vil din Mellomvare er den ukjente helten. Det er det avgjørende koordineringslaget som ligger mellom kaoset av innholdskilder (XMLTV-feeder, VOD (CMS, live-kodere) og den førsteklasses opplevelsen brukerne dine forventer på Apple TV eller i Android-appen.

I denne veiledningen går vi i detalj gjennom den nøyaktige arkitekturen som kreves for å utvikle en høytytende videomiddleware. Vi skal ta for oss Enhetlig datainnhenting, API-design for høy tilgjengelighet, og de caching-strategiene som er nødvendige for å betjene millioner av EPG forespørsler uten at databasen din krasjer.

Viktige arkitektoniske mål:

  • Aggregering: Importer data sømløst fra ulike kilder (Gracenote, XMLTV, JSON-feeder).

  • Normalisering: Rens og standardiser metadataene til et enkelt, søkbart internt skjema.

  • Ytelse: Oppnå API-responstider på under 50 ms ved hjelp av aggressiv caching (Redis).

  • Sikkerhet: Grundige rettighetskontroller, generering av DRM-tokener og geoblokkering.

En plan for skalerbar levering av EPG og VOD

2. Systemarkitektur på overordnet nivå

En monolitisk applikasjon holder ikke mål for moderne strømming. Vi anbefaler en Mikrotjenester eller Modulær monolitt tilnærmingen bak en robust API-gateway. Dette sikrer at en feil i EPG-innlesingsprosessen ikke fører til at påloggingstjenesten din går ned.

Arkitekturdiagrammet

graf TD
    undergraf "Eksterne kilder"
 EPG[EPG-leverandør (Gracenote/XMLTV)]
 CMS[VOD CMS (ressurser/metadata)]
 LIVE[Kodere for direktesendinger]
    slutt

    undergraf "Middleware-kjerne"
 GW[API-gateway / lastbalanser]
 
 undergraf "Innhentingslag"
 ING_EPG[EPG-innhentingsarbeider]
 ING_VOD[VOD-metadatasykroniserer]
        slutt
 
 delgraf "Tjenestelag"
 SVC_EPG[EPG-tjeneste]
 SVC_VOD[VOD-katalogtjeneste]
 SVC_USR[Bruker og rettigheter]
 SVC_DRM[DRM-signatur]
        slutt
 
 undergraf "Data Persistence"
 DB[(Primær database – PostgreSQL)]
 CACHE[(Cache – Redis)]
 SEARCH[(Søkemotor – Elasticsearch)]
 slutt
    slutt

    undergraf "Klienter"
 WEB[Nettapp]
 TV[Smart-TV / STB]
 MOB[Mobilapp]
    slutt

    EPG --> ING_EPG
    CMS --> ING_VOD
    ING_EPG --> DB
    ING_VOD --> DB
    ING_VOD --> SEARCH
    
    WEB --> GW
    TV --> GW
    MOB --> GW
 
 GW --> SVC_EPG
    GW --> SVC_VOD
    GW --> SVC_USR
    
    SVC_EPG --> CACHE
    SVC_EPG --> DB
    SVC_VOD --> DB
    SVC_VOD --> SEARCH
    SVC_USR --> DB
    SVC_USR --> SVC_DRM

 

3. Å bli fortrolig med EPG (elektronisk programguide)

EPG er den tyngste komponenten i enhver IPTV/OTT systemet. Lineære tidsplaner endres ofte, og brukerens enheter ber om disse dataene kontinuerlig. Hvis du foretar en søk i SQL-databasen for hver bruker som åpner guiden, vil plattformen din vil gå ned i seertallene i beste sendetid.

3.1 Inntaksstrategien

Du kan ikke stole på at data hentes i sanntid fra leverandørene. Du må hente inn og lagre dataene lokalt.

  • Håndtering av formater: Lag parsere for standard XMLTV- og leverandørspesifikke JSON-skjemaer.

  • Oppdateringsfrekvens: Kjør fullstendige innlesninger hver 6.–12. time. Kjør “Delta”-oppdateringer hvert 15. minutt for å fange opp endringer i programmet i siste øyeblikk (f.eks. overtid i sport).

  • Normalisering: Knytt eksterne sjanger-ID-er (f.eks. “ProviderA-Comedy”) til dine interne sjanger-ID-er (f.eks. “Internal-101”) for å sikre konsistens i brukergrensesnittet.

3.2 Optimalisert databaseskjema

Vi bruker PostgreSQL for å sikre relasjonsintegriteten, men leverer data til klienter via Redis.

Tabell: kanaler | Kolonne | Type | Beskrivelse | | :— | :— | :— | | id | UUID | Unik kanal-ID | | display_name | VARCHAR | Kanalnavn (f.eks. “HBO”) | | stream_url | VARCHAR | URL-en til HLS/DASH-manifestet | | logisk_posisjon | INT | Kanalnummer (f.eks. 101) |

Tabell: programmer | Kolonne | Type | Beskrivelse | | :— | :— | :— | | id | UUID | Unik program-ID | | channel_id | UUID | Fremmednøkkel til kanaler | | starttid | TIDSPUNKT | Starttidspunkt i UTC (indeksert) | | end_time | TIDSPUNKT | Sluttidspunkt i UTC (indeksert) | | tittel | VARCHAR | Programtittel | | bilder | JSONB | URL-er til plakater/miniatyrbilder |

3.3 “Windowing”-teknikken for hurtigbufring

Kundene trenger aldri hele 7-dagersprogrammet på en gang. De ser vanligvis på programoversikten i blokker (f.eks. “Hva går på TV akkurat nå?”).

Redis-strategien:

  1. Nøkkelstruktur: epg:{channel_id}:{date_bucket}

  2. Verdi: En komprimert JSON-matrise med programmer for akkurat dette tidsrommet.

  3. Forløpet: Middleware sjekker først Redis. Hvis dataene mangler (Cache Miss), utfører den en ressurskrevende SQL-forespørsel, fyller inn dataene i Redis (Cache Set) og returnerer dataene. Dette reduserer belastningen på databasen med 95%.

4. Utvikling av en skalerbar VOD-modul

Video på forespørsel (VOD) krever en annen tilnærming enn direktesendt TV. Den legger vekt på omfattende metadata, avanserte søkefunksjoner og streng tilgangskontroll.

4.1 Metadata-hierarki

Ikke gjør dataene dine flate. Oppretthold et strengt hierarki for å støtte “Watching”-funksjonene i brukergrensesnittet:

  • Serie: Toppnivåbeholderen (f.eks. “Breaking Bad”).

  • Sesong: Del av serien.

  • Sæson/Episode: Den avspillbare enheten. Inneholder tekniske metadata (videokodek, lydspor, varighet).

4.2 Søk og utforsking

SQL LIKER Søkene er for trege for VOD. Replikér skrivebeskyttet metadata til en egen søkemotor (Elasticsearch eller MeiliSearch). Dette gjør det mulig å:

  • Upresis søk (håndtering av skrivefeil).

  • Vektede resultater (med vekt på “Nye utgivelser”).

  • Filtrering etter kriterier (år, sjanger, skuespiller).

4.3 Generering av sikre strømmer (DRM)

Aldri Lagre statiske strøm-URL-er i databasen eller i frontend-koden.

  1. Kundeforespørsler POST /vod/play/{asset_id}.

  2. Middleware validerer brukerens abonnement (rettigheter).

  3. Middleware kontakter DRM-leverandøren (Widevine/PlayReady) for å generere et lisens-token med kort varighet.

  4. Middleware returnerer en signert URL: https://cdn.service.com/movie.mpd?token=xyz...

5. API-designmønstre

API-et ditt er selve produktet. Utform det slik at det er RESTful, versjonert og forutsigbart.

5.1 Høyytelses-EPG-endepunkter

Hent kanalliste

GET /api/v1/channels

Hent programoversikten (programtabellen) Inndata: start (ISO-dato), slutt (ISO-dato)

GET /api/v1/epg?start=2023-10-27T10:00:00Z&end=2023-10-27T14:00:00Z

Optimalisert responsstruktur:

{
  "kanaler": [
    {
      "id": "ch_101",
 "name": "Movies 24",
 "programs": [
 {
 "id": "prog_999",
          "title": "Inception",
 "start": 1698400800,
 "end": 1698408000,
 "is_catchup_available": true
 }
      ]
    }
  ]
}

5.2 VOD- og avspillingsendepunkter

Få informasjon om VOD

GET /api/v1/vod/assets/{asset_id}?expand=related,cast

Hent avspillingskontekst (sikker)

POST /api/v1/vod/play
Innhold: { "asset_id": "12345", "device_id": "tv_living_room" }

6. Veikartet ditt mot produksjon

Hvis du er klar til å sette i gang, bør du følge denne trinnvise gjennomføringsplanen for å sikre stabilitet.

Fase 1: Grunnleggende fundament

  • [ ] Ta i bruk PostgreSQL- og Redis-klynger.

  • [ ] Kjør innledende databasemigreringer (kanaler, programmer, VOD-innhold).

  • [ ] Bygg autentiseringstjenesten (JWT-basert).

Fase 2: Innhenting og dataflyt

  • [ ] Utvikle XMLTV-parseren (Python eller Node.js).

  • [ ] Implementer “diffing”-logikk for å kun oppdatere endrede programmer (sparer på databasebeskrivelser).

  • [ ] Konfigurer VOD CMS-webhooks for å utløse oppdateringer av metadata i sanntid.

Fase 3: Klient-API og sikkerhet

  • [ ] spesifikt: Implementere EPG Grid API med den ovennevnte Redis-caching-strategien.

  • [ ] Implementer søke-API-et ved hjelp av Elasticsearch.

  • [ ] Integrer signeringslogikken for DRM-token for sikker avspilling.

Fase 4: Driftsmessig fortreffelighet

  • [ ] Konfigurer sentralisert loggføring (ELK Stack eller CloudWatch).

  • [ ] Konfigurer caching-regler for CDN (CloudFront/Akamai) for å avlaste statiske ressurser.

nb_NONorwegian
Skroll til toppen