Lire des flux VOD enregistrés avec l'API Google Cloud Video Stitcher
Ce guide explique comment utiliser le SDK IMA DAI iOS pour demander et lire un Flux de vidéo à la demande Google Cloud session.
Ce guide développe l'exemple de base du guide de démarrage pour la DAI IMA.
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 VOD a été créée :
LOCATION
- Numéro du projet
- Numéro de projet Google Cloud utilisant l'API Video Stitcher:
PROJECT_NUMBER
- Jeton OAuth
Le jeton OAuth de courte durée d'un compte de service avec le rôle utilisateur "Video Stitcher" :
OAUTH_TOKEN
En savoir plus sur de création d'authentifications OAuth de courte durée les jetons. 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 configuration pour la vidéo à la demande
ID de configuration VOD du flux VOD :
VOD_CONFIG_ID
Pour en savoir plus sur la création de l'ID de configuration de vidéo à la demande, consultez la section Cloud Suding create a guide de configuration pour la vidéo à la demande.
- Contexte utilisateur
- Contexte de l'utilisateur pour le suivi des demandes. Valeurs autorisées :
nil
. Dans ce guide, la valeur par défaut estnil
.
Configurer l'exemple de base
Accédez à la page de version GitHub de l'API IMA iOS DAI et téléchargez l'exemple Objective-C de base. Cet exemple est un projet Xcode iOS qui repose sur
pour charger le SDK IMA DAI. Si vous utilisez Swift, IMA ne propose pas d'application exemple iOS. Consultez l'extrait de code Swift plus loin dans ce guide pour savoir comment implémenter un IMAVideoStitcherVODStreamRequest
dans votre propre application.
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 l'exécution de la 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 un flux de vidéo à la demande
Pour remplacer le flux d'échantillon par votre flux VOD assemblé avec des annonces, utilisez IMAVideoStitcherVODStreamRequest
pour créer une session d'annonces 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 qu'il fonctionne avec l'API Google Cloud Video Stitcher, vous devez remplacer la fonction requestStream
actuelle par une fonction qui utilise la classe IMAVideoStitcherVODStreamRequest
.
Exemple :
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)
}
...
Exécutez le projet, puis demandez à lire votre flux VOD personnalisé.
(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
IMAVideoStitcherVODStreamRequest.
Si vous fournissez une option non reconnue, l'API Cloud Video Stitcher répondra par une erreur HTTP 400. Pour obtenir de l'aide, consultez le guide de dépannage.
Par exemple, vous pouvez remplacer les options de fichier manifeste avec l'extrait de code suivant, qui demande deux fichiers manifestes de flux avec des rendus triés du débit le plus bas 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\": {"
" \"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)
Effectuer un nettoyage
Maintenant que vous avez hébergé un flux de vidéo à la demande à l'aide de l'API Google Cloud Video Stitcher et en utilisant le SDK IMA DAI pour iOS, il est important de nettoyer toute diffusion ressources.
Suivez le Nettoyage des vidéos à la demande pour supprimer les ressources et les éléments inutiles.