IMA DAI SDK unter tvOS verwenden

Mit der Google Cloud Video Stitcher API registrierte Livestreams abspielen

In diesem Leitfaden wird gezeigt, wie du mit dem IMA DAI SDK für tvOS einen Livestream für ein Ereignis anforderst und abspielst, das bei der Google Cloud Video Stitcher API registriert ist. Außerdem erfährst du, wie du während der Wiedergabe eine Werbeunterbrechung einfügst.

In diesem Leitfaden wird das einfache Beispiel aus dem Einstiegsleitfaden für die dynamische Anzeigenbereitstellung in IMA erweitert.

Informationen zur Integration mit anderen Plattformen oder zur Verwendung des IMA clientseitige SDKs siehe Interactive Media Ads SDKs.

Google Cloud-Projekt einrichten

Geben Sie die folgenden Variablen zur Verwendung im IMA SDK ein:

Standort
Die Google Cloud-Region, in der Ihre Livekonfiguration erstellt wurde: LOCATION
Projektnummer
Die Google Cloud-Projektnummer, für die die Video Stitcher API verwendet wird: PROJECT_NUMBER
OAuth-Token

Das kurzlebige OAuth-Token eines Dienstkontos mit der Nutzerrolle „Video Stitcher“:

OAUTH_TOKEN

Weitere Informationen zum Erstellen kurzlebiger Anmeldedaten für Dienstkonten Das OAuth-Token kann für mehrere Anfragen wiederverwendet werden, solange es nicht abgelaufen ist.

Netzwerkcode

Ad Manager-Netzwerkcode für die Anzeigenanfrage: NETWORK_CODE

ID der Live-Konfiguration
Die Live-Konfigurations-ID, die du beim Erstellen des Livestream-Ereignisses angegeben hast: LIVE_CONFIG_ID
Benutzerdefinierter Asset-Schlüssel
Der benutzerdefinierte Ad Manager-Asset-Schlüssel, der beim Erstellen einer Konfiguration für ein Livestream-Ereignis mit der Video Stitcher API generiert wurde: CUSTOM_ASSET_KEY

Grundlegendes Beispiel herunterladen und vorbereiten

Laden Sie die Beispiele für die dynamische Anzeigenbereitstellung von IMA für tvOS und extrahieren Sie das Basisbeispiel in einen neuen Ordner. Dieses Beispiel ist ein Xcode-Projekt, bei dem das IMA SDK über Cocoapods geladen wird.

Damit das Beispiel ausgeführt werden kann, muss CocoaPods installiert sein. Öffnen Sie dann den Ordner des einfachen Beispiels im Terminal und führen Sie den folgenden Befehl aus:

pod install --repo-update

Sobald der Befehl ausgeführt wurde, sehen Sie eine Datei mit dem Namen BasicExample.xcworkspace in im Projektordner. Öffnen Sie diese Datei in Xcode und führen Sie das Beispiel aus, um sicherzustellen, das Testvideo und die Anzeigen wie erwartet wiedergegeben werden.

Livestream anfordern

Wenn du den Beispielstream durch deinen Livestream ersetzen möchtest, musst du die IMAVideoStitcherLiveStreamRequest-Klasse, mit der automatisch eine Anzeige erstellt wird mit Google Ad Manager. Über die Google Ad Manager-Benutzeroberfläche können Sie die generierten dynamischen Anzeigenaufrufe finden, um sie zu überwachen und zu beheben.

Das vorhandene Beispiel enthält Beispiele für die Anforderung eines VOD-Streams oder eines von den Google-Servern für die dynamische Anzeigenbereitstellung. Damit das Beispiel mit der Google Cloud Video Stitcher API verwenden möchten, müssen Sie die aktuelle requestStream ersetzen. mit einer, die die Klasse IMAVideoStitcherLiveStreamRequest verwendet:

ViewController.m

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

static NSString *const kLiveConfigId = @"LIVE_CONFIG_ID";
static NSString *const kLocation = @"LOCATION";
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
static NSString *const kOAuthToken = @"OAUTH_TOKEN";
static NSString *const kNetworkCode = @"NETWORK_CODE";
static NSString *const kCustomAssetKey = @"CUSTOM_ASSET_KEY";

static NSString *const kBackupStreamURLString =
    @"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/"
    @"master.m3u8";

@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
- (void)requestStream {
  IMAAVPlayerVideoDisplay *videoDisplay =
      [[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.playerViewController.player];
  IMAAdDisplayContainer *adDisplayContainer =
      [[IMAAdDisplayContainer alloc] initWithAdContainer:self.adContainerView];

  IMAVideoStitcherLiveStreamRequest *request =
      [[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigId
                                                                    region:kLocation
                                                             projectNumber:kProjectNumber
                                                                OAuthToken:kOAuthToken
                                                               networkCode:kNetworkCode
                                                            customAssetKey:kCustomAssetKey
                                                        adDisplayContainer:self.adDisplayContainer
                                                              videoDisplay:self.videoDisplay
                                                               userContext:nil];

  [self.adsLoader requestStreamWithRequest:request];
}

(Optional) Optionen für die Streamingsitzung hinzufügen

Du kannst deine Streamanfrage anpassen, indem du Sitzungsoptionen hinzufügst, um die Standardkonfiguration der Cloud Video Stitcher API zu überschreiben. Gib dazu den Parameter videoStitcherSessionOptions in deine IMAVideoStitcherLiveStreamRequest ein. Wenn Sie eine unbekannte Option angeben, In der Video Stitcher API wird ein HTTP 400-Fehler zurückgegeben. Weitere Informationen finden Sie in der Anleitung zur Fehlerbehebung.

Du kannst die Manifest-Optionen beispielsweise mit dem folgenden Code-Snippet überschreiben. Dabei werden zwei Streammanifeste mit Darstellungen angefordert, die von der niedrigsten bis zur höchsten Bitrate sortiert sind.

Objective-C

 // Define session options JSON string.
 // The following session options are examples. Use session options
 // that are compatible with your video stream.
 NSString *sessionOptionsStr =
   @"{"
   "  \"manifestOptions\": {"
   "    \"includeRenditions\":["
   "      {\"bitrateBps\": 3000, \"codecs\": \"hvc1.1.4.L126.B0, mp4a.40.2\"},"
   "      {\"bitrateBps\": 2000, \"codecs\": \"avc1.64001f, mp4a.40.2\"},"
   "    ]"
   "  }"
   "}";
 // convert JSON NSString to NSDictionary
 NSData *sessionOptionsData = [sessionOptionsStr dataUsingEncoding:NSUTF8StringEncoding];
 NSError *error = nil;
 NSDictionary *sessionOptions = [NSJSONSerialization
                       JSONObjectWithData:sessionOptionsData
                       options:0
                       error:&error];
 // make stream request
 IMAVideoStitcherLiveStreamRequest *streamRequest =
     [[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigID
                                                                   region:kLocation
                                                           projectNumber:kProjectNumber
                                                               OAuthToken:kOAuthToken
                                                             networkCode:kNetworkCode
                                                           customAssetKey:kCustomAssetKey
                                                       adDisplayContainer:adDisplayContainer
                                                             videoDisplay:imaVideoDisplay
                                                             userContext:nil
                                             videoStitcherSessionOptions:sessionOptions];
 [self.adsLoader requestStreamWithRequest:streamRequest];

Swift

 // Define session options JSON string.
 // The following session options are examples. Use session options
 // that are compatible with your video stream.
 let sessionOptionsStr = """
     {
       "manifestOptions": {
         "includeRenditions": [
           {"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
           {"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
         ],
         "bitrateOrder": "ascending"
       }
     }
     """
 // convert JSON string to dictionary
 guard let sessionOptionsData = sessionOptionsStr.data(using: .utf8, allowLossyConversion: false) else { return nil }
 let sessionOptions = try? JSONSerialization.jsonObject(with: sessionOptionsData, options: .mutableContainers)
 // make stream request
 let streamRequest = IMAVideoStitcherLiveStreamRequest(
   liveStreamEventID:ViewController.liveConfigID
   region:ViewController.location
   projectNumber:ViewController.projectNumber
   OAuthToken:ViewController.oAuthToken
   networkCode:ViewController.networkCode
   customAssetKey:ViewController.customAssetKey
   adDisplayContainer:adDisplayContainer
   videoDisplay:imaVideoDisplay
   userContext:nil
   videoStitcherSessionOptions:sessionOptions)
 adsLoader?.requestStream(with: streamRequest)

Führen Sie das Projekt aus und fordern Sie dann Ihren benutzerdefinierten Livestream an.

Werbeunterbrechung einfügen

Die Google Cloud Video Stitcher API fügt für jede Werbeunterbrechung Anzeigen ein, die aus dem Anzeigen-Tag abgerufen wurden. Werbeunterbrechungen werden im Manifest mit Anzeigenmarkierungen gekennzeichnet. Anzeigenmarkierungen sind die vom Livestreamencoder eingefügt wurden.

Die Anzeige wird sofort nach dem Einfügen der Werbeunterbrechung wiedergegeben.

Bereinigen

Nachdem du einen Livestream mit der Google Cloud Video Stitcher API gehostet und über das IMA DAI SDK für tvOS angefordert hast, solltest du alle Bereitstellungsressourcen bereinigen.

Folge der Anleitung unter Livestreams bereinigen, um alle nicht benötigten Ressourcen und Assets zu entfernen.