IMA DAI SDK auf iOS-Geräten verwenden

Mit der Google Cloud Video Stitcher API registrierte Livestreams abspielen

In dieser Anleitung wird gezeigt, wie Sie mit dem IMA DAI SDK für iOS einen Livestream für ein Ereignis anfordern und abspielen, das mit der Google Cloud Video Stitcher API registriert wurde, und wie Sie während der Wiedergabe eine Werbeunterbrechung einfügen.

Diese Anleitung baut auf dem grundlegenden Beispiel aus der Kurzanleitung für IMA DAI auf.

Informationen zur Integration in andere Plattformen oder zur Verwendung der clientseitigen IMA-SDKs finden Sie unter Interactive Media Ads SDKs.

Wenn Sie sich eine vollständige Beispielintegration ansehen oder ihr folgen möchten, laden Sie das Cloud Video Stitcher-Beispiel für Objective-C oder Swift herunter.

Google Cloud-Projekt einrichten

Geben Sie die folgenden Variablen für die Verwendung im IMA SDK ein:

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

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

OAUTH_TOKEN

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

Netzwerkcode

Der Ad Manager-Netzwerkcode zum Anfordern von Anzeigen: NETWORK_CODE

Live-Konfigurations-ID
Die Live-Konfigurations-ID, die Sie beim Erstellen des Livestreamereignisses angegeben haben: LIVE_CONFIG_ID
Benutzerdefinierter Asset-Schlüssel
Der benutzerdefinierte Ad Manager-Assetschlüssel, der beim Erstellen einer Konfiguration für ein Livestream-Event mit der Video Stitcher API generiert wird: CUSTOM_ASSET_KEY

Nutzerkontext
Der Nutzerkontext für Tracking-Anfragen. Kann nil sein. In dieser Anleitung wird standardmäßig nil verwendet.

Einfaches Beispiel herunterladen und vorbereiten

Laden Sie die IMA DAI-Beispiele für iOS herunter und extrahieren Sie das Basic Example in einen neuen Ordner. Dieses Beispiel ist ein Xcode-Projekt, in dem das IMA SDK mit 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

Nachdem der Befehl ausgeführt wurde, wird in Ihrem Projektordner eine Datei mit dem Namen BasicExample.xcworkspace angezeigt. Öffnen Sie diese Datei in Xcode und führen Sie das Beispiel aus, um zu prüfen, ob das Testvideo und die Anzeigen wie erwartet wiedergegeben werden.

Livestream anfordern

Wenn Sie den Beispielstream durch Ihren Livestream ersetzen möchten, müssen Sie die Klasse IMAVideoStitcherLiveStreamRequest verwenden, mit der automatisch eine Anzeigensitzung mit Google Ad Manager erstellt wird. Sie können die Google Ad Manager-Benutzeroberfläche verwenden, um die generierten DAI-Sitzungen zu finden und sie zu Monitoring- und Debugging-Zwecken zu nutzen.

Im vorhandenen Beispiel gibt es Beispiele für das Anfordern eines VOD-Streams oder eines Livestreams von den DAI-Servern von Google. Damit das Beispiel mit der Google Cloud Video Stitcher API funktioniert, müssen Sie die aktuelle requestStream-Funktion durch eine Funktion ersetzen, die die IMAVideoStitcherLiveStreamRequest-Klasse verwendet:

ViewController.m

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

/// Fallback URL in case something goes wrong in loading the stream. If all goes well,
/// this will not be used.
static NSString *const kTestAppContentUrl_M3U8 =
    @"//devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";


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";


@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
- (void)requestStream {
  // Create an ad display container for ad rendering.
  IMAAdDisplayContainer *adDisplayContainer =
      [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
                                          viewController:self
                                          companionSlots:nil];
  // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
  IMAAVPlayerVideoDisplay *imaVideoDisplay =
      [[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer];


  IMAVideoStitcherLiveStreamRequest *streamRequest =
      [[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigID
                                                                    region:kLocation
                                                             projectNumber:kProjectNumber
                                                                OAuthToken:kOAuthToken
                                                               networkCode:kNetworkCode
                                                            customAssetKey:kCustomAssetKey
                                                        adDisplayContainer:adDisplayContainer
                                                              videoDisplay:imaVideoDisplay
                                                               userContext:nil
                                                               videoStitcherSessionOptions:nil];

  [self.adsLoader requestStreamWithRequest:streamRequest];
}

(Optional) Optionen für die Streaming-Sitzung hinzufügen

Sie können Ihre Streamanfrage anpassen, indem Sie Sitzungsoptionen hinzufügen, um die Standardkonfiguration der Cloud Video Stitcher API zu überschreiben. Dazu müssen Sie den Parameter videoStitcherSessionOptions in Ihrer IMAVideoStitcherLiveStreamRequest ausfüllen. Wenn Sie eine nicht erkannte Option angeben, antwortet die Cloud Video Stitcher API mit einem HTTP-Fehler 400. Weitere Informationen finden Sie im Leitfaden zur Fehlerbehebung.

Mit dem folgenden Code-Snippet können Sie beispielsweise die Manifestoptionen überschreiben. Es werden zwei Streammanifeste mit Renditionen angefordert, die von der niedrigsten 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\": {"
   "    \"bitrateOrder\": \"ascending\""
   "  }"
   "}";
 // 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": {
         "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. Anschließend können Sie Ihren benutzerdefinierten Livestream anfordern und abspielen.

Werbeunterbrechung einfügen

Mit der Google Cloud Video Stitching-Tool API werden Anzeigen eingefügt, die für jede Werbeunterbrechung über das Anzeigen-Tag abgerufen werden. Werbeunterbrechungen werden im Manifest mit Werbemarkierungen gekennzeichnet. Anzeigenmarkierungen werden vom Livestream-Encoder eingefügt.

Die Anzeige wird direkt nach dem Einfügen der Werbeunterbrechung abgespielt.

Bereinigen

Nachdem Sie einen Livestream mit der Google Cloud Video Stitcher API gehostet und ihn mit dem IMA DAI SDK für iOS angefordert haben, ist es wichtig, alle Bereitstellungsressourcen zu bereinigen.

Folge der Anleitung zum Bereinigen von Livestreams, um unnötige Ressourcen und Assets zu entfernen.