In diesem Leitfaden wird beschrieben, wie Sie eine Clientanwendung entwickeln, um einen HLS- oder DASH-Livestream mit der Pod-Auslieferungs-API und Ihrem Manifest-Manipulator zu laden.
Vorbereitung
Bevor Sie fortfahren, benötigen Sie Folgendes:
Ein benutzerdefinierter Asset-Schlüssel für ein Livestream-Ereignis, das mit dem DAI-Typ
Pod serving redirect
konfiguriert wurde. So erhalten Sie diesen Schlüssel:Livestream für die dynamische Anzeigenbereitstellung einrichten
Verwenden Sie eine SOAP API-Clientbibliothek, um die Methode
LiveStreamEventService.createLiveStreamEvents
mit einemLiveStreamEvent
-Objekt und der EigenschaftdynamicAdInsertionType
aufzurufen, die auf den EnumerationswertPOD_SERVING_REDIRECT
festgelegt ist. Informationen zu allen Clientbibliotheken finden Sie unter Clientbibliotheken und Beispielcode.
Prüfen Sie, ob das Interactive Media Ads (IMA) SDK für Ihre Plattform verfügbar ist. Wir empfehlen, das IMA SDK zu verwenden, um den Umsatz zu steigern. Weitere Informationen finden Sie unter IMA SDK für DAI einrichten.
Streaminganfrage stellen
Wenn ein Nutzer einen Stream auswählt, gehen Sie so vor:
Stellen Sie eine
POST
-Anfrage an die Livestream-Dienstmethode. Weitere Informationen finden Sie unter Methode: stream.Übergeben Sie Parameter für das Anzeigentargeting im Format
application/x-www-form-urlencoded
oderapplication/json
. Mit dieser Anfrage wird eine Streamingsitzung bei Google DAI registriert.Im folgenden Beispiel wird eine Streamanfrage gestellt:
Formularcodierung
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());
JSON-Codierung
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());
Bei erfolgreicher Ausführung erhalten Sie eine Ausgabe ähnlich der folgenden:
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }
Suchen Sie in der JSON-Antwort nach der Stream-Sitzungs-ID und speichern Sie andere Daten für die nachfolgenden Schritte.
Anzeigenmetadaten abrufen
So rufen Sie Anzeigenmetadaten ab:
Lesen Sie den
metadata_url
-Wert aus der Antwort auf die Streamregistrierung.Senden Sie eine
GET
-Anfrage an den Endpunkt. Weitere Informationen finden Sie unter Methode: Metadaten.Im folgenden Beispiel werden Anzeigenmetadaten abgerufen:
const response = await fetch(metadata_url); console.log(await response.json());
Bei Erfolg erhalten Sie die PodMetadata-Antwort für aktuelle und bevorstehende Werbeunterbrechungen:
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }
Speichern Sie das
tags
-Objekt für spätere Schritte.Legen Sie einen Timer mit dem
polling_frequency
-Wert fest, um regelmäßig Metadaten für alle nachfolgenden Werbeunterbrechungen anzufordern.
Lade den Stream in deinen Videoplayer.
Nachdem Sie die Sitzungs-ID aus der Registrierungsantwort erhalten haben, übergeben Sie sie an Ihren Manifest-Manipulator oder erstellen Sie eine Manifest-URL, um den Stream in einen Videoplayer zu laden.
Informationen zum Übergeben der Sitzungs-ID finden Sie in der Dokumentation zu Ihrem Manifest-Manipulator. Wenn Sie eine Manifestbearbeitung entwickeln, lesen Sie den Abschnitt Manifestbearbeitung für Livestream.
Im folgenden Beispiel wird eine Manifest-URL zusammengestellt:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
Wenn der Player bereit ist, starte die Wiedergabe.
Auf Anzeigenereignisse warten
Prüfe das Containerformat deines Streams auf zeitgesteuerte Metadaten:
HLS-Streams mit Transport Stream-Containern (TS) verwenden zeitgesteuerte ID3-Tags, um zeitgesteuerte Metadaten zu übertragen. Weitere Informationen finden Sie unter Common Media Application Format mit HTTP Live Streaming (HLS).
In DASH-Streams werden
EventStream
-Elemente verwendet, um Ereignisse im Manifest anzugeben.DASH-Streams verwenden
InbandEventStream
-Elemente, wenn die Segmenteemsg
-Felder (Event Message) für Nutzlastdaten, einschließlich ID3-Tags, enthalten. Weitere Informationen finden Sie unter InbandEventStream.CMAF-Streams, einschließlich DASH und HLS, verwenden
emsg
-Boxen mit ID3-Tags.
Informationen zum Abrufen von ID3-Tags aus deinem Stream findest du in der Anleitung deines Videoplayers. Weitere Informationen finden Sie im Leitfaden zum Verarbeiten von Zeitmetadaten.
So rufen Sie die Anzeigenereignis-ID aus ID3-Tags ab:
- Ereignisse nach
scheme_id_uri
miturn:google:dai:2018
oderhttps://aomedia.org/emsg/ID3
filtern. Extrahieren Sie das Byte-Array aus dem Feld
message_data
.Im folgenden Beispiel werden die
emsg
-Daten in JSON decodiert:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }
Filtern Sie die ID3-Tags mit dem Format
TXXXgoogle_{ad_event_ID}
:TXXXgoogle_1234567890123456789
Werbeereignisdaten anzeigen
So finden Sie das TagSegment
-Objekt:
Rufen Sie das
tags
-Objekt für Anzeigenmetadaten aus Poll ad metadata ab. Dastags
-Objekt ist ein Array vonTagSegment
-Objekten.Verwenden Sie die vollständige Anzeigenereignis-ID, um ein
TagSegment
-Objekt mit dem Typprogress
zu finden.Verwenden Sie die ersten 17 Zeichen der Anzeigenereignis-ID, um ein
TagSegment
-Objekt anderer Typen zu finden.Nachdem Sie die
TagSegment
haben, verwenden Sie die Eigenschaftad_break_id
als Schlüssel, um das ObjektAdBreak
im Objektad_breaks
mit Anzeigenmetadaten zu finden.Im folgenden Beispiel wird ein
AdBreak
-Objekt gesucht:{ "type":"mid", "duration":15, "ads":1 }
Mit den Daten
TagSegment
undAdBreak
können Sie Informationen zur Anzeigenposition in der Werbeunterbrechung anzeigen. Beispiel:Ad 1 of 3
Media-Bestätigungs-Pings senden
Senden Sie für jedes Anzeigenereignis mit Ausnahme des Typs progress
einen Media-Überprüfungs-Ping.
Bei Google DAI werden progress
-Ereignisse verworfen. Wenn Sie diese Ereignisse häufig senden, kann sich das auf die Leistung Ihrer App auswirken.
So generieren Sie die vollständige Media-Bestätigungs-URL eines Anzeigenereignisses:
Hängen Sie aus der Streamantwort die vollständige ID des Werbeereignisses an den Wert
media_verification_url
an.Stellen Sie eine
GET
-Anfrage mit der vollständigen URL:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);
Bei Erfolg erhalten Sie eine Antwort mit dem Codestatus
202
. Andernfalls erhalten Sie den Fehlercode404
.
Mit der Überwachung der Streamingaktivitäten (Stream Activity Monitor, SAM) können Sie ein Protokoll aller bisherigen Werbeereignisse aufrufen. Weitere Informationen finden Sie unter Livestream überwachen und Fehler beheben.