Utiliser le SDK IMA DAI sur iOS

Lire des diffusions en direct enregistrées avec l'API Google Cloud Video Stitcher

Ce guide explique comment utiliser le SDK IMA DAI pour iOS pour demander et lire un flux en direct pour un événement enregistré avec l'API Google Cloud Video Stitcher, et comment insérer une coupure publicitaire pendant la lecture.

Ce guide reprend l'exemple de base tiré de la page Premiers pas ce guide pour l'insertion dynamique d'annonces.

Pour en savoir plus sur l'intégration à d'autres plates-formes ou sur l'utilisation des SDK côté client IMA, consultez la page SDK Interactive Media Ads.

Configurer un projet Google Cloud

Saisissez les variables suivantes à utiliser dans le SDK IMA:

Emplacement
Région Google Cloud dans laquelle votre configuration en production a été créée : LOCATION
Numéro du projet
Numéro de projet Google Cloud utilisant l'API Video Stitcher: PROJECT_NUMBER
Jeton OAuth

Jeton OAuth de courte durée d'un compte de service avec l'utilisateur Video Stitcher rôle:

OAUTH_TOKEN

En savoir plus sur de création d'identifiants éphémères comptes Google. Le jeton OAuth peut être réutilisé pour plusieurs requêtes tant qu'il n'a pas est arrivé à expiration.

Code de réseau

Code de réseau Ad Manager pour demander des annonces : NETWORK_CODE

ID de la configuration en ligne
ID de configuration du direct que vous avez spécifié lors de la création de votre événement en direct: LIVE_CONFIG_ID
Clé d'élément personnalisé
Clé d'élément personnalisé Ad Manager générée lors du processus de création d'une configuration pour un événement en direct avec l'API Video Stitcher :CUSTOM_ASSET_KEY

Contexte utilisateur
Contexte de l'utilisateur pour le suivi des demandes. Valeurs autorisées : nil. Dans ce guide, la valeur par défaut est nil.

Télécharger et préparer l'exemple de base

Téléchargez les exemples d'insertion dynamique d'annonces IMA pour iOS et extrayez l'exemple de base dans un nouveau dossier. Cet exemple est un projet Xcode qui s'appuie sur Cocoapods pour charger le SDK IMA.

Pour préparer l'exemple à l'exécution, assurez-vous que CocoaPods est installé, puis ouvrez le dossier de l'exemple de base dans le terminal et exécutez la commande suivante :

pod install --repo-update

Une fois cette commande terminée, un fichier nommé BasicExample.xcworkspace s'affiche dans le dossier de votre projet. Ouvrez ce fichier dans Xcode et exécutez l'exemple pour vous assurer que la vidéo et les annonces tests sont lues comme prévu.

Demander une diffusion en direct

Pour remplacer l'exemple de flux par votre diffusion en direct, vous devez utiliser la IMAVideoStitcherLiveStreamRequest qui crée automatiquement une annonce cette session avec Google Ad Manager. Vous pouvez utiliser l'interface utilisateur de Google Ad Manager pour localiser les sessions DAI générées à des fins de surveillance et de débogage.

L'exemple existant contient des exemples de requêtes de flux VOD ou de diffusions en direct à partir des serveurs DAI de Google. Pour que l'exemple fonctionne avec l'API Google Cloud Video Stitcher, vous devez remplacer la fonction requestStream actuelle par une fonction qui utilise la classe IMAVideoStitcherLiveStreamRequest :

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];
}

(Facultatif) Ajouter des options de session de streaming

Personnalisez votre demande de diffusion en ajoutant des options de session pour remplacer celles par défaut configuration de l'API Cloud Video Stitcher en renseignant le champ videoStitcherSessionOptions dans votre IMAVideoStitcherLiveStreamRequest. Si vous fournissez une option non reconnue, L'API Video Stitcher renvoie une erreur HTTP 400. Pour obtenir de l'aide, consultez le guide de dépannage.

Par exemple, vous pouvez ignorer options du fichier manifeste avec l'extrait de code suivant, qui demande deux fichiers manifestes de flux avec rendus classés du débit le plus faible au débit le plus élevé.

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)

Exécutez le projet, puis demandez à diffuser votre flux en direct personnalisé et lancez-le.

Insérer une coupure publicitaire

L'API Google Cloud Video Stitcher insère les annonces extraites du tag d'emplacement publicitaire pour chaque la coupure publicitaire. Les coupures publicitaires sont indiquées dans le fichier manifeste à l'aide de repères d'annonce. Les marqueurs d'annonces sont inséré par l'encodeur de diffusion en direct.

L'annonce est diffusée immédiatement après l'insertion de la coupure publicitaire.

Effectuer un nettoyage

Maintenant que vous avez hébergé un flux en direct à l'aide de l'API Google Cloud Video Stitcher et que vous l'avez demandé à l'aide du SDK IMA DAI pour iOS, il est important de nettoyer toutes les ressources de diffusion.

Suivez le nettoyage de la diffusion en direct pour supprimer les ressources et les éléments inutiles.