Middleware-architectuur: integratie van API’s voor het beheer van aangepaste EPG’s en VOD

  1. De ruggengraat van moderne OTT

Als je een streamingplatform aan het opzetten bent, dan is je Middleware is de onbezongen held. Het is de cruciale coördinerende laag die zich bevindt tussen de wirwar van je inhoudsbronnen (XMLTV-feeds, VOD (CMS, live-encoders) en de vlekkeloze ervaring die uw gebruikers verwachten op hun Apple TV of Android-app.

In deze handleiding zetten we de exacte architectuur uiteen die nodig is om hoogwaardige videomiddleware te ontwikkelen. We zullen het volgende behandelen: Gecentraliseerde gegevensopname, Ontwerp van een API met hoge beschikbaarheid, en de caching-strategieën die nodig zijn om miljoenen EPG verzoeken zonder dat je database crasht.

Belangrijkste architecturale doelstellingen:

  • Aggregatie: Gegevens uit uiteenlopende bronnen (Gracenote, XMLTV, JSON-feeds) naadloos importeren.

  • Normalisatie: Reinig en standaardiseer metadata tot één enkel, doorzoekbaar intern schema.

  • Prestaties: Realiseer API-responstijden van minder dan 50 ms door middel van intensieve caching (Redis).

  • Beveiliging: Grondige controles op gebruiksrechten, het genereren van DRM-tokens en geografische blokkering.

Een blauwdruk voor schaalbare levering van EPG en VOD

2. Systeemarchitectuur op hoog niveau

Een monolithische applicatie volstaat niet voor moderne streaming. Wij raden een Microservices of Modulaire monoliet de aanpak achter een robuuste API-gateway. Dit zorgt ervoor dat een storing in je EPG-invoerworker je inlogservice niet platlegt.

Het architectuurdiagram

grafiek TD
    subgrafiek "Externe bronnen"
 EPG[EPG-aanbieder (Gracenote/XMLTV)]
 CMS[VOD CMS (assets/metadata)]
 LIVE[Live stream-encoders]
    einde

    subgrafiek "Middleware-kern"
 GW[API-gateway / Load Balancer]
 
 subgrafiek "Ingestielaag"
 ING_EPG[EPG-ingestiewerker]
 ING_VOD[VOD-metadata-synchronisator]
        einde
 
 subgrafiek "Service-laag"
 SVC_EPG[EPG-service]
 SVC_VOD[VOD-catalogusservice]
 SVC_USR[Gebruikers & rechten]
 SVC_DRM[DRM-ondertekenaar]
        einde
 
 subgrafiek "Gegevensopslag"
 DB[(Primaire database - PostgreSQL)]
 CACHE[(Cache - Redis)]
 SEARCH[(Zoekmachine - Elasticsearch)]
 einde
    einde

    subgrafiek "Clients"
 WEB[Webapp]
 TV[Smart-tv / STB]
 MOB[Mobiele app]
    einde

    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. De EPG (elektronische programmagids) onder de knie krijgen

De EPG is het zwaarste onderdeel van elke IPTV/OTT systeem. Lineaire schema’s veranderen regelmatig en clientapparaten vragen voortdurend om deze gegevens. Als je bij elke gebruiker die de gids opent een query uitvoert op je SQL-database, zal je platform zal tijdens prime time dalen.

3.1 De opnamestrategie

Je kunt niet vertrouwen op het in realtime ophalen van gegevens bij providers. Je moet de gegevens lokaal importeren en opslaan.

  • Omgang met bestandsformaten: Maak parsers voor standaard XMLTV- en providerspecifieke JSON-schema’s.

  • Updatefrequentie: Voer elke 6-12 uur volledige importen uit. Voer elke 15 minuten “Delta”-updates uit om last-minute wijzigingen in het schema op te vangen (bijvoorbeeld verlengingen bij sportwedstrijden).

  • Normalisatie: Koppel externe genre-ID’s (bijv. “ProviderA-Comedy”) aan uw interne genre-ID’s (bijv. “Internal-101”) om de consistentie van de gebruikersinterface te waarborgen.

3.2 Geoptimaliseerd databaseschema

We gebruiken PostgreSQL voor relationele integriteit, maar leveren gegevens aan clients via Redis.

Tabel: kanalen | Kolom | Type | Beschrijving | | :— | :— | :— | | id | UUID | Unieke kanaal-ID | | display_name | VARCHAR | Kanaalnaam (bijv. “HBO”) | | stream_url | VARCHAR | De URL van het HLS/DASH-manifest | | logische_positie | INT | Kanaalnummer (bijv. 101) |

Tabel: programma's | Kolom | Type | Beschrijving | | :— | :— | :— | | id | UUID | Unieke programma-ID | | channel_id | UUID | FK naar kanalen | | start_time | TIJDSSTAMP | Starttijd UTC (geïndexeerd) | | eindtijd | TIJDSSTAMP | Eindtijd UTC (geïndexeerd) | | titel | VARCHAR | Titel van het programma | | afbeeldingen | JSONB | URL's van posters/miniaturen |

3.3 De “Windowing”-cachetechniek

Klanten hebben nooit het volledige 7-daagse programma in één keer nodig. Ze bekijken de EPG meestal in blokken (bijvoorbeeld: “Wat is er nu op tv?”).

De Redis-strategie:

  1. Sleutelstructuur: epg:{channel_id}:{date_bucket}

  2. Waarde: Een gecomprimeerde JSON-array met programma’s voor dat specifieke tijdsblok.

  3. De stroom: De middleware controleert eerst Redis. Als de gegevens daar ontbreken (cache miss), voert de middleware een intensieve SQL-query uit, vult Redis aan (cache set) en retourneert de gegevens. Dit vermindert de belasting van de database met 95%.

4. Een schaalbare VOD-module bouwen

Video op aanvraag (VOD) vereist een andere aanpak dan live-tv. Het richt zich op de rijkdom aan metadata, uitgebreide zoekmogelijkheden en strikte toegangscontrole.

4.1 Hiërarchie van metagegevens

Maak je gegevens niet te plat. Houd een strikte hiërarchie aan ter ondersteuning van de “Watching”-functies in de gebruikersinterface:

  • Serie: De container op het hoogste niveau (bijvoorbeeld “Breaking Bad”).

  • Seizoen: Onderdeel van een reeks.

  • Aflevering: Het afspeelbare bestand. Bevat technische metagegevens (videocodec, audiotracks, duur).

4.2 Zoeken en ontdekken

SQL VIND IK LEUK zoekopdrachten zijn te traag voor VOD. Repliceer de alleen-lezen metagegevens naar een speciale zoekmachine (Elasticsearch of MeiliSearch). Dit maakt het volgende mogelijk:

  • Fuzzy-vergelijking (omgaan met typefouten).

  • Gewogen resultaten (met extra nadruk op “Nieuwe releases”).

  • Filteren op criteria (Jaar, Genre, Acteur).

4.3 Genereren van beveiligde streams (DRM)

Nooit Sla statische stream-URL’s op in je database of frontend-code.

  1. Verzoeken van klanten POST /vod/play/{asset_id}.

  2. De middleware controleert het abonnement (de rechten) van de gebruiker.

  3. De middleware roept de DRM-provider (Widevine/PlayReady) aan om een tijdelijk licentietoken te genereren.

  4. De middleware retourneert een ondertekende URL: https://cdn.service.com/movie.mpd?token=xyz...

5. Ontwerppatronen voor API’s

Jouw API is het product. Ontwerp deze zo dat hij RESTful, versiegebonden en voorspelbaar is.

5.1 Krachtige EPG-eindpunten

Kanaallijst ophalen

GET /api/v1/channels

Programmagids (rooster) ophalen Invoer: begin (ISO-datum), einde (ISO-datum)

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

Geoptimaliseerde responsstructuur:

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

5.2 VOD- en afspeel-eindpunten

Bekijk de VOD-details

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

Afspeelcontext ophalen (beveiligd)

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

6. Uw stappenplan naar productie

Als je klaar bent om te beginnen, volg dan dit stapsgewijze uitvoeringsplan om stabiliteit te waarborgen.

Fase 1: Basis

  • [ ] PostgreSQL- en Redis-clusters implementeren.

  • [ ] Voer de eerste databasemigraties uit (kanalen, programma’s, VOD-bestanden).

  • [ ] De authenticatieservice (op basis van JWT) opzetten.

Fase 2: Gegevensopname en gegevensstroom

  • [ ] Ontwikkel de XMLTV-parser (Python of Node.js).

  • [ ] Implementeer een “diffing”-logica om alleen gewijzigde programma’s bij te werken (dit bespaart schrijfbewerkingen naar de database).

  • [ ] Stel de webhooks van het VOD CMS zo in dat ze realtime updates van metagegevens activeren.

Fase 3: Client-API en beveiliging

  • [ ] specifiek: Implementeer de EPG Grid API met de hierboven genoemde Redis-cachingstrategie.

  • [ ] Implementeer de Search API met behulp van Elasticsearch.

  • [ ] De logica voor het ondertekenen van DRM-tokens integreren om veilig afspelen te garanderen.

Fase 4: Operationele uitmuntendheid

  • [ ] Stel gecentraliseerde logboekregistratie in (ELK Stack of CloudWatch).

  • [ ] Stel de cachingregels voor het CDN (CloudFront/Akamai) zo in dat statische bestanden worden uitbesteed.

nl_NLDutch
Scroll naar boven