MicrocosmWorksInnovation und Architektur digitaler Kosmen
Über unsKontakt
MicrocosmWorksInnovieren und Gestalten digitaler Kosmen

Bereitstellung von IT-Lösungen, die zĂ€hlen. Wir sind leidenschaftlich fĂŒr Technologie, Sicherheit und helfen Unternehmen, durch zuverlĂ€ssige, innovative IT-Infrastruktur zu wachsen.

[email protected]
+91 7011868196
New Delhi, India

AI Wachstumszentrum

AI HubStartup-InnovationUnternehmensbeschleuniger

Lösungen

Alle LösungenWellness- & Fitness-AppsAI Video PlattformAI Agent Entwicklung

Ressourcen

EinblickeBranchenleitfÀdenAnwendungsfall-BlaupausenArchitektur-MusterFallstudien

Unternehmen

Über unsKontaktUnsere Arbeit

Dienstleistungen

Digitale BeratungCloud-InfrastrukturSaaS-EntwicklungKI-EntwicklungVideotechnologie
ERP-EntwicklungZoho-AnpassungOdoo-EntwicklungSalesforce-IntegrationBenutzerdefinierte CRM-Entwicklung
QuickBooks-IntegrationIoT-LösungenBlockchain-Entwicklung
Cybersecurity-BeratungIT-Support - L3

© 2026 MicrocosmWorks. Alle Rechte vorbehalten.

DatenschutzrichtlinieNutzungsbedingungen
ZurĂŒck zu Einblicken
Media Services

Server-Side Ad Insertion

SCTE-35 Marker und serverseitige Werbeeinblendung in einen FAST Channel integrieren, damit Anzeigen nahtlos in den Live-Stream eingefĂŒgt werden.

Untitled (612 x 640 px) (512 x 640 px) (512 x 600 px).webpPankaj
‱
July 22, 2026
‱
Aktualisiert July 23, 2026
‱
7 min read
ChatGPT Image Jul 23, 2026, 11_34_43 AM (1).webp
7 min read

FAST Channels verdienen Geld mit Werbeunterbrechungen. Das gesamte GeschĂ€ftsmodell basiert auf einer einzigen Annahme: Wenn der Kanal sagt „Werbung einblenden“, hört jedes nachgeschaltete System – der Ad Server, der SSAI Splicer, der Smart-TV Player – dies genau im selben Moment und mit exakt derselben Dauer. SCTE-35 ist das Standardprotokoll, das diese Nachricht ĂŒbermittelt. Wenn dies unbemerkt fehlschlĂ€gt – und stummes Fehlschlagen ist der Standard-Fehlermodus – werden Anzeigen entweder nicht gerendert, zum falschen Zeitpunkt ausgelöst oder haben die falsche LĂ€nge. Der Zuschauer sieht ein Testbild. Die Einnahmen bleiben aus.

Dies ist die technische Geschichte, wie die FAST Channels von mStudio standardkonforme SCTE-35 Cues aus bedienerfreundlichen Eingaben senden und warum wir es als drei Cues pro Unterbrechung anstatt nur einen aufgebaut haben.

Schneller Überblick

AspektDetail
BereichSCTE-35 Ad-Break-Signalisierung fĂŒr AWS MediaLive FAST Channels
Bediener-WorkflowWerbeunterbrechungseditor pro Programm – Position in Sekunden, Dauer in Sekunden
Emittierte Cues pro UnterbrechungDrei – Werbe-Start TimeSignal, SpliceInsert, Werbe-Ende TimeSignal
DauerbeschrĂ€nkungen10–120 Sekunden, validiert auf der Datenschicht
Nachgeschaltete KonsumentenPlayer, Ad Server und AWS MediaTailor (konzipiert, aber noch nicht angeschlossen) sind Beispiele.
StatusSCTE-35 Cue-Emission in Produktion; SSAI-Integration in Konzeption

Das GeschÀftsproblem

Jede Werbeunterbrechung auf einem FAST Channel ist ein Einnahmeereignis. Der Kanal sendet einen Marker, der besagt „hier wird eine Anzeige platziert, sie dauert 30 Sekunden, bitte vorbereiten.“ Nachgeschaltete Systeme – Google Ad Manager, AWS MediaTailor, regionale Ad Server, Smart-TV Player SDKs – lesen diesen Marker und entscheiden, was eingefĂŒgt werden soll.

Wenn der Marker korrekt ist, lĂ€uft die Werbeunterbrechung sauber ab, die Impression wird gezĂ€hlt und der Betreiber wird bezahlt. Wenn der Marker falsch ist – falsche Dauer, falsche Form, falsches Format – lehnt das Ad System ihn entweder ab (keine Anzeige ausgeliefert) oder akzeptiert ihn fehlerhaft (Anzeige mit falscher LĂ€nge oder eine, die in das nĂ€chste Programm ĂŒbergeht). Beide Ergebnisse kosten echtes Geld und beide schlagen still fehl. Der Kanal streamt weiter. Der Zuschauer sieht ein Testbild oder einen ungeschickten Schnitt. Die Monetarisierungspipeline liefert einfach niedrigere Zahlen und keine Fehlermeldung, der man nachgehen könnte.

Das technische Ziel ist nicht „Anzeigen zu unterstĂŒtzen“. Es lautet: Jede vom Betreiber definierte Werbeunterbrechung muss bei jedem nachgeschalteten Konsumenten als standardkonformes SCTE-35 Signal ankommen, und zwar jedes Mal genau bei dem vom Betreiber gewĂ€hlten Frame.

Was SCTE-35 tatsÀchlich ist (die 90-Sekunden-Version)

SCTE-35 ist ein Standard zum EinfĂŒgen von Cue-Nachrichten in einen Videostream. Die Cues enthalten keine Werbeinhalte; sie tragen Signale – „Werbeunterbrechung beginnt hier“, „Werbeunterbrechung endet hier“, „dieses Segment ist N Sekunden lang“. Das nachgeschaltete System liest diese Signale und reagiert darauf: Eine SSAI-Schicht fĂŒgt ein echtes Werbemittel in das HLS Manifest ein, ein Smart-TV Player löst ein Overlay aus, ein Ad Server protokolliert eine Slot-Möglichkeit.

Zwei Cue-Formen sind fĂŒr unseren Anwendungsfall relevant:

  • SpliceInsert – der ursprĂŒngliche SCTE-35 Cue. TrĂ€gt eine SpliceEventId, eine Dauer in Sekunden und ein „Out-of-Network“-Flag. Die meisten klassischen Ad Server lesen dies.
  • TimeSignal – der neuere, ausdrucksstĂ€rkere Cue. TrĂ€gt einen SegmentationDescriptor mit einer SegmentationTypeId (52 = Provider Ad Start, 53 = Provider Ad End) und einer SegmentationDuration in 90.000-Tick-Einheiten. SSAI Systeme und moderne Player bevorzugen diese Form, da sie sauber ĂŒber Start und Ende hinweg paart.

Beide Formen sind korrekt SCTE-35. Verschiedene nachgeschaltete Konsumenten bevorzugen unterschiedliche. Das Emittieren nur einer Form lÀsst Geld auf dem Tisch liegen.

Warum das wichtig ist. Eine naive Implementierung sendet einen SpliceInsert pro Werbeunterbrechung und betrachtet dies als erledigt. Die Werbeunterbrechung funktioniert auf Àlteren Playern und schlÀgt bei SSAI stillschweigend fehl. Die HÀlfte Ihres Anzeigenbestands wird monetarisiert; die andere HÀlfte nicht. Sie werden nicht wissen, welche welche ist, bis Ihre Einnahmezahlen niedrig ausfallen.

Warum naive AnsÀtze scheitern

Die AbkĂŒrzungen sind verlockend, weil sie alle fast funktionieren.

  • „Zum Zeitpunkt der Kodierung Werbung in das Originalvideo einfĂŒgen.“ Es gibt keinen Raum fĂŒr FlexibilitĂ€t. Der Betreiber kann keine A/B-Tests fĂŒr die Platzierung durchfĂŒhren, Anzeigen nach dem Deployment nicht Ă€ndern, keine regionalen oder zielgruppenorientierten Anzeigen schalten. Der Hauptgrund fĂŒr die Existenz von FAST Channels ist die Monetarisierung desselben Inhalts auf verschiedene Weisen – das Einbrennen von Anzeigen zum Zeitpunkt der Kodierung schließt dies aus.
  • „Client-seitige Werbeeinblendung nutzen.“ Ad-Blocking ist einfach. Unterschiedlicher Codepfad pro GerĂ€t. Keine serverseitige Personalisierung. Und es umgeht SSAI vollstĂ€ndig, was niedrigere CPMs bedeutet.
  • „Einfach einen SpliceInsert pro Unterbrechung senden.“ Der hĂ€ufigste Produktionsfehler. Funktioniert bei einigen Playern, wird aber von SSAI Systemen, die TimeSignal Cues zum Paaren von Start/Ende benötigen, stillschweigend ignoriert. Teilweise Monetarisierung, ohne Fehler zur Untersuchung.
  • „Alles in 90 kHz Ticks ausdrĂŒcken, weil die Spezifikation sie erwĂ€hnt.“ Die Spezifikation ist Ă€rgerlicher als das. SpliceInsert.Duration ist in Sekunden. SegmentationDuration ist in 90 kHz Ticks. Das Verwechseln fĂŒhrt zu Cues, die die Schema-Validierung bestehen und versendet werden, dann aber beim Player als fehlerhafte Dauern scheitern. Der Encoder wird es nicht bemerken. Der Player ĂŒberspringt die Unterbrechung einfach.
  • „MediaLive zur BestĂ€tigung zulassen.“ Das wird es nicht. MediaLive akzeptiert ĂŒberlappende Unterbrechungen, Unterbrechungen mit Null-Dauer und unmögliche Segmentierungsdauern ohne Beanstandung. Die BestĂ€tigung muss erfolgen, bevor MediaLive die Aktion sieht.

Der Hebel, den wir hatten, war die Grenze zwischen der Operator UI – wo Werbeunterbrechungen nur {position, duration} Paare sind – und dem MediaLive Zeitplan, wo jeder Cue perfekt sein muss.

Unsere Lösung

Die Werbeunterbrechung als erstklassiges Datenobjekt durchgĂ€ngig behandeln. Der Betreiber definiert sie in den einfachstmöglichen Begriffen. Das Backend validiert sie einmal auf der Schema-Schicht. Die Lambda-Funktion ĂŒbersetzt sie zur Deployment-Zeit in einen Drei-Cue-Stack, wobei jeder Cue in der von seiner eigenen Spezifikation geforderten Zeitbasis ausgedrĂŒckt wird. Nichts anderes im Stack muss etwas ĂŒber SCTE-35 wissen – die Übersetzung befindet sich in einer Funktion, in derselben Lambda-Funktion, die jede andere Zeitplanaktion besitzt.

Diagramm 1 · End-to-End Anzeigenmarker-Pipeline

Operator UI Validation Flow-2026-07-22-054745.webp


 

Architektur

  • Frontend Ad-Break-Editor – Betreiber fĂŒgen Werbeunterbrechungen pro Programm hinzu, indem sie einen Positions-Offset (Sekunden vom Programmstart) und eine Dauer (Sekunden) angeben. Bumper Slots sind Teil des Datenmodells und bereit fĂŒr die Ausspielschicht.
  • AdMarker Collection (MongoDB) – ein Dokument pro Programm mit Werbeunterbrechungen, das auf das Video verweist. Das adBreaks[] Array speichert {position, duration}, wobei Mongoose zum Speicherzeitpunkt 10 ≀ duration ≀ 120 erzwingt. Bumpers tragen eine adBreakId Referenz fĂŒr die nachgeschaltete Paarung.
  • NestJS Backend (schedule.service.ts) – verbindet zur Deployment-Zeit jeden Zeitplan mit seinem AdMarker und benennt Felder gemĂ€ĂŸ dem Vertrag der Lambda-Funktion um (position → offsetSeconds, duration → durationSeconds). Ein Bulk-Abruf, kein N+1-Problem.
  • Lambda Orchestrator (fastChannel-lambda-fun/index.js) – verantwortet die SCTE-35 Übersetzung. FĂŒr jede Werbeunterbrechung wird der Drei-Cue-Stack in denselben BatchUpdateScheduleCommand emittiert, der Eingabewechsel und Wasserzeichen enthĂ€lt. Aktionsnamen werden pro Programm versioniert, damit der Orphan Sweep sie nach einem partiellen Deploy paaren kann.
  • AWS MediaLive – empfĂ€ngt die Aktionen, emittiert #EXT-SCTE35 Marker im HLS Manifest zur vom Betreiber gewĂ€hlten Sekunde.



 

Wichtige technische Entscheidungen

1. Drei Cues pro Werbeunterbrechung, nicht einer

Jede Werbeunterbrechung sendet drei diskrete Aktionen fĂŒr denselben logischen Moment im Programm.

Diagramm 2 · Lebenszyklus einer einzelnen Werbeunterbrechung

Program Ad Splice Insertion-2026-07-22-054554.webp


Die Start- und End-TimeSignal Cues teilen sich eine SegmentationUpid, damit nachgeschaltete Systeme sie deterministisch paaren können. Der SpliceInsert trÀgt eine eindeutige SpliceEventId zur Deduplizierung auf Player-Ebene. Verschiedene Konsumenten lesen verschiedene Cues. Das Emittieren aller drei deckt jeden Vertrag ab, der uns heute wichtig ist, und jeden plausiblen in der Zukunft.

HĂ€ufiger Produktionsfehler. Senden Sie einen SpliceInsert und gehen Sie davon aus, dass der Rest des Ökosystems es herausfindet. SSAI Systeme verwerfen stillschweigend Unterbrechungen, denen passende TimeSignal Cues fehlen; klassische Ad Server ignorieren TimeSignal-only Signale. Ohne alle drei wird jede Werbeunterbrechung von einem Teil Ihres nachgeschalteten Stacks monetarisiert und vom Rest ĂŒbersehen – und Sie erfahren dies aus dem Umsatzbericht, nicht aus den Logs.

2. Zwei Zeitbasen, in einer Funktion abgeglichen

SpliceInsert.Duration ist in Sekunden. SegmentationDuration innerhalb eines TimeSignal Deskriptors ist in 90.000-Tick-Einheiten. Dieselbe logische Dauer, zwei Kodierungen – und der hĂ€ufigste SCTE-35 Fehler in der Praxis ist das Verwechseln dieser.

Diagramm 3 · Zeitkonvertierungslogik

3 Diagram.webp

Die Konvertierung befindet sich in buildProgramActions und nur dort. Es gibt eine kanonische Stelle, an der man nachsehen muss, wenn eine Cue-Dauer falsch herauskommt, und eine Stelle, die man Àndern muss, wenn sich die Spezifikation jemals weiterentwickelt.

Kompromiss, den wir absichtlich eingegangen sind. Wir hÀtten beide Zeitbasen im AdMarker Dokument speichern und die Lambda-Funktion sie durchkopieren lassen können. Wir haben dies bewusst nicht getan: Das Speichern nur des Sekundenwerts bedeutet, dass es nur eine Zahl gibt, die ein Operator festlegen muss, nur eine Zahl, die validiert werden muss, und nur eine Zahl, die falsch sein kann. Der 90 kHz Wert ist abgeleitet, niemals gespeichert. Abgeleitete Daten können nicht driften.

3. Position ist relativ, Auslösezeit ist absolut

Der Betreiber sagt „Werbeunterbrechung bei 720 Sekunden ins Programm.“ Die Lambda-Funktion berechnet die tatsĂ€chliche UTC-Auslösezeit als programStartTime + offsetSeconds × 1000 und stempelt diese auf die Aktion. Jede andere Zeitplanaktion – Eingabewechsel, Wasserzeichen ein, Programmende – verwendet dieselbe Offset-zu-Timestamp-Pipeline. Anzeigen-Cues landen auf denselben Frame-Grenzen wie alles andere, ohne Mehrdeutigkeit darĂŒber, welche Uhr die Zeitachse besitzt.

4. Validierung auf der Datenschicht, nicht am Draht

Das AdMarker Schema erzwingt duration ∈ [10, 120] Sekunden zum Mongoose Speicherzeitpunkt. Eine außerhalb des Bereichs liegende Unterbrechung erreicht niemals die Lambda-Funktion. Werbeunterbrechungen, die ĂŒber das Programmende hinausgehen wĂŒrden, werden zur Build-Zeit gekĂŒrzt anstatt abgelehnt – Betreiber verlieren ihre Arbeit nicht durch eine einzige schlechte Unterbrechung. Die Arten von Fehlern, die nicht auftreten können, sind interessanter als die, die auftreten können.

5. Cue-Emission von SSAI entkoppelt

Was wir heute ausliefern, ist die Signalisierungsschicht. Die serverseitige Werbeeinblendung ĂŒber AWS MediaTailor – die diese Cues konsumieren wĂŒrde, um echte Werbemittel in das HLS Manifest einzufĂŒgen – ist vollstĂ€ndig konzipiert und noch nicht angeschlossen. Die bewusste Reihenfolge: Zuerst die Cue-Schicht korrekt in Produktion bringen, von echten KanĂ€len verwendet, bevor SSAI aktiviert wird. Wenn die Integration live geht, sind die Cues bereits vorhanden. Das nachgeschaltete System erhĂ€lt vom ersten Tag an einen sauberen Vertrag zur Konsumierung.

Warum diese Reihenfolge wichtig ist. Das Debugging von SSAI ist brutal, wenn Ihre Cues falsch sind, da jeder Fehler wie ein SSAI Fehler aussieht, selbst wenn die Cues fehlerhaft sind. Indem wir die Cue-Schicht zuerst isoliert ausgeliefert und gegen reale Player und Ad Server validiert haben, haben wir eine ganze Kategorie von Integrationsverwirrungen eliminiert, bevor sie ĂŒberhaupt entstehen konnte.

Ergebnisse

  • Jede vom Betreiber definierte Werbeunterbrechung sendet einen standardkonformen Drei-Cue SCTE-35 Stack im HLS Manifest des Kanals – zur richtigen Sekunde, gegen die richtige Zeitbasis.
  • Die Übersetzungsschicht befindet sich in einer Funktion. SpezifikationsĂ€nderungen oder neue nachgeschaltete Konsumenten erfordern eine Änderung an einer einzigen Datei, nicht eine Suche quer durch die Codebasis.
  • Die Dauervalidierung erfolgt auf der Datenschicht, bevor ein Cue den Encoder erreicht. Bedienerfehler werden in der UI sichtbar, nicht stillschweigend zur Sendezeit – fehlerhafte Cues können MediaLive nicht erreichen.
  • Die Cue-Generierung ist deterministisch: Identische Bediener-Eingaben erzeugen identische SCTE-35 Aktionen, sodass dieselbe Unterbrechung sich bei jedem Deployment und jedem Kanal gleich verhĂ€lt.
  • Die Signalisierungsschicht ist ausgeliefert und live. Der SSAI Konsument (MediaTailor) ist konzipiert und bereit zur Anbindung – und wenn dies geschieht, werden die Cues jedes bestehenden Kanals bereits darauf warten.

Technologie-Stack: AWS MediaLive · AWS Lambda · NestJS · MongoDB · TypeScript · Node 18 · SCTE-35 (Scte35TimeSignalSettings, Scte35SpliceInsertSettings) · AWS SDK v3

SSAISCTE-35Ad InsertionMediaTailor
Untitled (612 x 640 px) (512 x 640 px) (512 x 600 px).webp

Über den Autor

Pankaj

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

Möchten Sie mehr erfahren?

Kontaktieren Sie uns, um zu besprechen, wie wir Ihnen bei der Implementierung dieser Lösungen fĂŒr Ihr Unternehmen helfen können.

Kontakt aufnehmen

HĂ€ufig gestellte Fragen

Validating ad-break duration and timing before deployment prevents malformed SCTE-35 cues from reaching MediaLive, reducing playback issues and protecting advertising revenue.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!