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 afin de demander et de lire une diffusion 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 développe l'exemple de base du guide de démarrage pour IMA DAI.
Pour savoir comment intégrer d'autres plates-formes ou utiliser les SDK IMA côté client, consultez SDK Interactive Media Ads.
Si vous souhaitez afficher ou suivre un exemple d'intégration terminé, téléchargez l'exemple Cloud Video Stitcher pour Objective-C ou Swift.
Configurer un projet Google Cloud
Saisissez les variables suivantes à utiliser dans le SDK IMA :
- Emplacement
- La région Google Cloud dans laquelle votre configuration active a été créée :
LOCATION - Numéro du projet
- Numéro du projet Google Cloud utilisant l'API Video Stitcher :
PROJECT_NUMBER - Jeton OAuth
Jeton OAuth de courte durée d'un compte de service avec le rôle utilisateur Video Stitcher :
OAUTH_TOKEN
Pour en savoir plus, consultez Créer des identifiants éphémères pour des comptes de service. Le jeton OAuth peut être réutilisé pour plusieurs requêtes tant qu'il n'a pas expiré.
- Code de réseau
Code de réseau Ad Manager pour demander des annonces :
NETWORK_CODE
- ID de la configuration en direct
- ID de configuration en direct que vous avez spécifié lors de la création de votre événement de diffusion en direct :
LIVE_CONFIG_ID - Clé d'élément personnalisée
- Clé de ressource personnalisée Ad Manager générée lors de la création d'une configuration pour une diffusion en direct avec l'API Video Stitcher :
CUSTOM_ASSET_KEY
- Contexte utilisateur
- Contexte utilisateur pour le suivi des demandes. Valeurs autorisées :
nil. La valeur par défaut estnildans ce guide.
Télécharger et préparer l'exemple de base
Téléchargez les exemples IMA DAI 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'exécution de l'exemple, 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-updateUne 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 de test et les annonces sont lues comme prévu.
Demander une diffusion en direct
Pour remplacer le flux d'exemple par votre diffusion en direct, vous devez utiliser la classe IMAVideoStitcherLiveStreamRequest qui crée automatiquement une session publicitaire avec Google Ad Manager. Vous pouvez utiliser l'UI Google Ad Manager pour localiser les sessions DAI générées à des fins de surveillance et de débogage.
Dans l'exemple existant, vous trouverez des exemples de requêtes de flux VOD ou de diffusion 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 flux en ajoutant des options de session pour remplacer la configuration par défaut de l'API Cloud Video Stitcher en renseignant le paramètre videoStitcherSessionOptions dans votre IMAVideoStitcherLiveStreamRequest.
Si vous fournissez une option non reconnue, l'API Cloud Video Stitcher répondra avec une erreur HTTP 400. Pour obtenir de l'aide, consultez le guide de dépannage.
Par exemple, vous pouvez remplacer les options du fichier manifeste avec l'extrait de code suivant, qui demande deux fichiers manifestes de flux avec des rendus classés du débit le plus faible au 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\": {"
" \"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)
Exécutez le projet, puis demandez et regardez votre diffusion en direct personnalisée.
Insérer une coupure publicitaire
L'API Google Cloud Video Stitcher insère les annonces récupérées à partir du tag d'emplacement publicitaire pour chaque coupure publicitaire. Les coupures publicitaires sont indiquées dans le fichier manifeste à l'aide de repères publicitaires. Les marqueurs d'annonces sont insérés par l'encodeur de diffusion en direct.
Si vous utilisez votre propre diffusion en direct, vous devez insérer le repère publicitaire. Pour en savoir plus sur les marqueurs d'annonces HLS et DASH compatibles, consultez la documentation sur les marqueurs d'annonces.
Si vous avez créé une diffusion en direct à l'aide de l'API Google Cloud Livestream, insérez un événement de chaîne de coupure publicitaire.
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 guide de nettoyage des diffusions en direct pour supprimer les ressources et les composants inutiles.