In diesem Leitfaden wird beschrieben, wie Sie eine Clientanwendung entwickeln, um einen HLS- oder DASH-Livestream mit der Pod Serving API und Ihrem Manifestbearbeiter zu laden.
Vorbereitung
Bevor Sie fortfahren, benötigen Sie Folgendes:
Einen benutzerdefinierten Asset-Schlüssel für ein Livestream-Ereignis, das mit dem
Pod serving redirectDAI-Typ konfiguriert wurde. So rufen Sie diesen Schlüssel ab:Livestream für die dynamische Anzeigenbereitstellung einrichten.
Verwenden Sie eine SOAP API-Clientbibliothek, um die
LiveStreamEventService.createLiveStreamEventsMethode mit einemLiveStreamEventObjekt aufzurufen. Die EigenschaftdynamicAdInsertionTypemuss auf den Enum-WertPOD_SERVING_REDIRECTfestgelegt sein. Alle Clientbibliotheken finden Sie unter Clientbibliotheken und Beispiel code.
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 die dynamische Anzeigenbereitstellung einrichten.
Streamanfrage stellen
Wenn ein Nutzer einen Stream auswählt, gehen Sie so vor:
Stellen Sie eine
POST-Anfrage an die Methode des Livestream-Dienstes. Weitere Informationen finden Sie unter Methode: stream.Übergeben Sie Parameter für das Anzeigen-Targeting im Format
application/x-www-form-urlencodedoderapplication/json. Mit dieser Anfrage wird eine Streamsitzung 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 Erfolg sehen Sie eine ähnliche Ausgabe wie die folgende:
{ "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 die ID der Streamsitzung und speichern Sie andere Daten für die nächsten Schritte.
Anzeigenmetadaten abrufen
So rufen Sie Anzeigenmetadaten ab:
Lesen Sie den Wert
metadata_urlaus der Antwort der Streamregistrierung.Stellen Sie eine
GET-Anfrage an den Endpunkt. Weitere Informationen finden Sie unter Methode: metadata.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 Objekt
tagsfür spätere Schritte.Legen Sie mit dem Wert
polling_frequencyeinen Timer fest, um regelmäßig Metadaten für alle nachfolgenden Werbeunterbrechungen anzufordern.
Stream in Videoplayer laden
Nachdem Sie die Sitzungs-ID aus der Registrierungsantwort erhalten haben, übergeben Sie sie an Ihren Manifestbearbeiter 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 Ihres Manifestbearbeiters. Wenn Sie einen Manifestbearbeiter entwickeln, lesen Sie den Artikel Manifestbearbeiter 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 Ihr Player bereit ist, starten Sie die Wiedergabe.
Auf Anzeigenereignisse warten
Prüfen Sie das Containerformat Ihres Streams auf zeitgesteuerte Metadaten:
HLS-Streams mit Transport Stream (TS)-Containern 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.In DASH-Streams werden
InbandEventStream-Elemente verwendet, wenn die Segmente Event Message (emsg)-Boxen 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 Ihrem Stream finden Sie im Leitfaden Ihres Videoplayers. Weitere Informationen finden Sie im Leitfaden zum Verarbeiten zeitgesteuerter Metadaten.
So rufen Sie die Anzeigenereignis-ID aus ID3-Tags ab:
- Filtern Sie die Ereignisse nach
scheme_id_urimiturn:google:dai:2018oderhttps://aomedia.org/emsg/ID3. 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
Anzeigenereignisdaten anzeigen
So suchen Sie das
TagSegment
Objekt:
Rufen Sie das Objekt
tagsfür Anzeigenmetadaten unter Anzeigenmetadaten ab. Das Objekttagsist ein Array vonTagSegment-Objekten.Verwenden Sie die vollständige Anzeigenereignis-ID, um ein
TagSegment-Objekt mit dem Typprogresszu finden.Verwenden Sie die ersten 17 Zeichen der Anzeigenereignis-ID, um ein
TagSegment-Objekt anderer Typen zu finden.Nachdem Sie das
TagSegmenthaben, verwenden Sie die Eigenschaftad_break_idals Schlüssel um dasAdBreakObjekt im Objektad_breaksfür Anzeigenmetadaten zu finden.Im folgenden Beispiel wird ein
AdBreak-Objekt gesucht:{ "type":"mid", "duration":15, "ads":1 }Verwenden Sie die Daten
TagSegmentundAdBreak, um Informationen zur Anzeigenposition in der Werbeunterbrechung anzuzeigen. Beispiel:Ad 1 of 3.
Pings zur Medienbestätigung senden
Senden Sie für jedes Anzeigenereignis außer dem Typ progress einen Ping zur Medienbestätigung.
progress-Ereignisse werden von Google DAI verworfen. Wenn Sie diese Ereignisse häufig senden, kann sich das auf die App-Leistung auswirken.
So generieren Sie die vollständige Bestätigungs-URL für Medien eines Anzeigenereignisses:
Hängen Sie aus der Streamantwort die vollständige Anzeigenereignis-ID an den Wert
media_verification_urlan.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 Statuscode
202. Andernfalls erhalten Sie den Fehlercode404.
Mit der Überprüfung der Streamingaktivitäten (SAM) können Sie ein Protokoll aller Anzeigenereignisse aufrufen. Weitere Informationen finden Sie unter Livestream beobachten und Fehler beheben.