IMA DAI SDK auf iOS-Geräten verwenden

VOD-Streams abspielen, die bei der Google Cloud Video Stitcher API registriert sind

In diesem Leitfaden wird gezeigt, wie du mit dem IMA DAI SDK für iOS eine Google Cloud VOD-Stream-Sitzung anforderst und wiedergibst.

Dieser Leitfaden erweitert das grundlegende Beispiel aus dem Abschnitt Erste Schritte Leitfaden für die dynamische Anzeigenbereitstellung mit IMA-Werten.

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

Google Cloud-Projekt einrichten

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

Standort
Die Google Cloud-Region, in der deine VOD-Konfiguration erstellt wurde: LOCATION
Projektnummer
Die Google Cloud-Projektnummer, in der die Video Stitcher API verwendet wird: PROJECT_NUMBER
OAuth-Token

Das kurzlebige OAuth-Token eines Dienstkontos mit dem Video Stitcher-Nutzer Rolle:

OAUTH_TOKEN

Weitere Informationen zum Erstellen kurzlebiger OAuth-Tokens Das OAuth-Token kann für mehrere Anfragen wiederverwendet werden, solange abgelaufen.

Netzwerkcode

Der Ad Manager-Netzwerkcode zum Anfordern von Anzeigen: NETWORK_CODE

VOD-Konfigurations-ID

Die VOD-Konfigurations-ID für den VOD-Stream: VOD_CONFIG_ID

Weitere Informationen zum Erstellen der VOD-Konfigurations-ID findest du im Leitfaden zum Erstellen einer VOD-Konfiguration für die Cloud-Stitching-Funktion.

Nutzerkontext
Der Nutzerkontext zum Verfolgen von Anfragen. Kann nil sein. In diesem Leitfaden ist standardmäßig nil festgelegt.

Einfaches Beispiel einrichten

GitHub-Version für die dynamische Anzeigenbereitstellung von IMA iOS aufrufen und laden Sie die ein einfaches Objective-C-Beispiel. Dieses Beispiel ist ein iOS-Xcode-Projekt, bei dem das IMA DAI SDK über Cocoapods geladen wird. Wenn Sie Swift verwenden, hat IMA keine iOS-Beispiel-App. Sehen Sie sich später in diesem Leitfaden das Swift-Code-Snippet an, um zu erfahren, um ein IMAVideoStitcherVODStreamRequest in Ihrer eigenen App zu implementieren.

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 Ihrem Projektordner. Öffnen Sie diese Datei in Xcode und führen Sie das Beispiel aus, um sicherzustellen, damit das Testvideo und die Testanzeigen wie erwartet wiedergegeben werden.

VOD-Stream anfordern

Um den Beispielstream durch Ihren VOD-Stream aus Anzeigen-Stitching zu ersetzen, verwenden Sie IMAVideoStitcherVODStreamRequest um eine Anzeigensitzung mit Google Ad Manager zu erstellen. Sie können die Google Ads- Manager-UI zum Auffinden der generierten Sitzungen für die dynamische Anzeigenbereitstellung für Monitoring und Fehlerbehebung

Im vorhandenen Beispiel findest du Beispiele für das Anfordern eines VOD-Streams oder Livestreams von den DAI-Servern von Google. Damit es mit Google Cloud funktioniert Video Stitcher API – Sie müssen die aktuelle Funktion requestStream ersetzen mit einer, die die Klasse IMAVideoStitcherVODStreamRequest verwendet.

Beispiel:

Objective-C

ViewController.m

...

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
/// The Stream's VOD config ID.
static NSString *const kVODConfigID = @"VOD_CONFIG_ID";
/// The Network Code used by the Video Stitcher API.
static NSString *const kNetworkCode = @"NETWORK_CODE";
/// The Google Cloud project using the Video Stitcher API.
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
/// The Google Cloud region containing your project.
static NSString *const kLocation = @"LOCATION";
/// An OAuth Token created by a Google Cloud account with Video Stitcher API
/// permissions.
static NSString *const kOAuthToken = @"OAUTH_TOKEN";

/// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will not
/// be used.
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 {
    // 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];
    IMAVideoStitcherVODStreamRequest *streamRequest =
        [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                             region:kLocation
                                                      projectNumber:kProjectNumber
                                                         OAuthToken:kOAuthToken
                                                        networkCode:kNetworkCode
                                                 adDisplayContainer:adDisplayContainer
                                                       videoDisplay:imaVideoDisplay
                                                        userContext:nil
                                        videoStitcherSessionOptions:nil];
    [self.adsLoader requestStreamWithRequest:streamRequest];
}

...

Swift

ViewController.swift

...

class ViewController: UIViewController, IMAAdsLoaderDelegate, IMAStreamManagerDelegate {
  /// The Stream's VOD config ID.
  static let vodConfigID = "VOD_CONFIG_ID"
  /// The Network Code used by the Video Stitcher API.
  static let networkCode = "NETWORK_CODE"
  /// The Google Cloud project using the Video Stitcher API.
  static let projectNumber = "PROJECT_NUMBER"
  /// The Google Cloud region containing your project.
  static let location = "LOCATION"
  /// An OAuth Token created by a Google Cloud account with Video Stitcher API
  /// permissions.
  static let oAuthToken = "OAUTH_TOKEN"

  /// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will
  /// not be used.
  static let backupStreamURLString = """
    http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/\
    bbb-,480p,720p,1080p,.mov.csmil/master.m3u8
    """

  ...

  func requestStream() {
    // Create an ad display container for ad rendering.
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: videoView,
      viewController: self,
      companionSlots: nil)
    // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
    let imaVideoDisplay = IMAAVPlayerVideoDisplay(avPlayer: contentPlayer!)
    // Create a VOD stream request.
    let streamRequest = IMAVideoStitcherVODStreamRequest(
      VODConfigID: ViewController.vodConfigID,
      region: ViewController.location,
      projectNumber: ViewController.projectNumber,
      oAuthToken: ViewController.oAuthToken,
      networkCode: ViewController.networkCode,
      adDisplayContainer: adDisplayContainer!,
      videoDisplay: imaVideoDisplay,
      userContext: nil,
      videoStitcherSessionOptions: nil)
    adsLoader?.requestStream(with: streamRequest)
  }

  ...

Führen Sie das Projekt aus. Anschließend können Sie Ihren benutzerdefinierten VOD-Stream anfordern und abspielen.

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

Passen Sie Ihre Streamanfrage an, indem Sie Sitzungsoptionen hinzufügen, um die Standardeinstellung zu überschreiben Cloud Video Stitcher API konfigurieren, indem Sie den videoStitcherSessionOptions in Ihrem IMAVideoStitcherVODStreamRequest. Wenn Sie eine unbekannte Option angeben, In der Video Stitcher API wird ein HTTP 400-Fehler zurückgegeben. Informationen hierzu finden Sie in der Anleitung zur Fehlerbehebung um Unterstützung zu erhalten.

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
 IMAVideoStitcherVODStreamRequest *streamRequest =
     [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                           region:kLocation
                                                     projectNumber:kProjectNumber
                                                       OAuthToken:kOAuthToken
                                                       networkCode:kNetworkCode
                                               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 = IMAVideoStitcherVODStreamRequest(
   vodConfigID:ViewController.vodConfigID
   region:ViewController.location
   projectNumber:ViewController.projectNumber
   OAuthToken:ViewController.oAuthToken
   networkCode:ViewController.networkCode
   adDisplayContainer:adDisplayContainer
   videoDisplay:imaVideoDisplay
   userContext:nil
   videoStitcherSessionOptions:sessionOptions)
 adsLoader?.requestStream(with: streamRequest)

Bereinigen

Nachdem du nun erfolgreich einen VOD-Stream gehostet hast, über die Google Cloud Video Stitcher API und über das IMA DAI SDK angefordert. für iOS-Geräte sollten alle bereitgestellten Ressourcen.

Folgen Sie VOD-Bereinigung um nicht benötigte Ressourcen und Assets zu entfernen.