Usare l'SDK IMA DAI su iOS

Riprodurre i live streaming registrati con l'API Video Stitcher di Google Cloud

Questa guida illustra come utilizzare l'SDK IMA DAI per iOS per richiedere e riprodurre un live streaming di un evento registrato con Google Cloud Video Stitcher API e come inserire un'interruzione pubblicitaria durante la riproduzione.

Questa guida si espande sull'esempio di base della sezione Come iniziare guida per IMA DAI.

Per informazioni sull'integrazione con altre piattaforme o sull'utilizzo dell'IMA SDK lato client, consulta gli SDK Interactive Media Ads.

Configura un progetto Google Cloud

Inserisci le seguenti variabili da utilizzare nell'SDK IMA:

Località
La regione Google Cloud dove è stata creata la configurazione live: LOCATION
Numero progetto
Il numero del progetto Google Cloud che utilizza l'API Video Stitcher: PROJECT_NUMBER
Token OAuth

Il token OAuth a breve termine di un account di servizio con il ruolo utente Video Stitcher:

OAUTH_TOKEN

Scopri di più sulla creazione di credenziali di breve durata per gli account di servizio. Il token OAuth può essere riutilizzato in più richieste, a condizione che non sia scaduto.

Codice di rete

Il codice di rete Ad Manager per la richiesta di annunci: NETWORK_CODE

ID configurazione live
L'ID configurazione dal vivo che hai specificato durante la creazione dell'evento in live streaming: LIVE_CONFIG_ID
Chiave asset personalizzata
La chiave asset personalizzata di Ad Manager generata durante il processo di creazione di un configurazione per un evento in live streaming con l'API Video Stitcher: CUSTOM_ASSET_KEY

Contesto utente
Contesto utente per il monitoraggio delle richieste. Può essere nil. Il valore predefinito è nil in questa guida.

Scarica e prepara l'esempio di base

Scarica gli esempi di DAI IMA per iOS ed estrarre l'esempio di base in una nuova cartella. Questo esempio è un modello Xcode basato su Cocoapods per caricare l'SDK IMA.

Per preparare l'esempio da eseguire, assicurati che CocoaPods sia installato, quindi apri cartella di esempio di base nel terminale ed esegui questo comando:

pod install --repo-update

Al termine del comando, vedrai un file denominato BasicExample.xcworkspace nella cartella del progetto. Apri il file in Xcode ed esegui l'esempio per assicurarti che il video di prova e gli annunci vengono riprodotti come previsto.

Richiedi un live streaming

Per sostituire lo stream di esempio con il tuo live streaming, devi utilizzare lo IMAVideoStitcherLiveStreamRequest classe che crea automaticamente un annuncio sessione con Google Ad Manager. Puoi utilizzare l'interfaccia utente di Google Ad Manager per individuare le sessioni DAI generate a scopo di monitoraggio e debug.

Nel campione esistente sono disponibili alcuni esempi per richiedere uno stream VOD o una in live streaming dai server DAI di Google. Per far funzionare l'esempio con Google API Cloud Video Stitcher, dovrai sostituire l'attuale requestStream con una funzione che utilizza 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];
}

(Facoltativo) Aggiungere opzioni per la sessione di streaming

Personalizza la richiesta di stream aggiungendo opzioni di sessione per eseguire l'override della configurazione predefinita dell'API Cloud Video Stitcher compilando il parametro videoStitcherSessionOptions nella richiesta IMAVideoStitcherLiveStreamRequest. Se fornisci un'opzione non riconosciuta, l'API Cloud Video Stitcher risponderà con un errore HTTP 400. Consulta il guida alla risoluzione dei problemi per ricevere assistenza.

Ad esempio, puoi eseguire l'override opzioni del file manifest con il seguente snippet di codice, che richiede due manifest dello stream con immagini ordinate dalla velocità in bit più bassa a quella più alta.

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)

Esegui il progetto, quindi puoi richiedere e riprodurre il tuo live streaming personalizzato.

Inserisci un'interruzione pubblicitaria

L'API Google Cloud Video Stitcher inserisce gli annunci recuperati dal tag annuncio per ogni un'interruzione pubblicitaria. Le interruzioni pubblicitarie sono indicate nel file manifest utilizzando gli indicatori di annunci. Gli indicatori di annunci vengono inseriti dal codificatore del live streaming.

L'annuncio viene riprodotto immediatamente dopo l'inserimento dell'interruzione pubblicitaria.

Esegui la pulizia

Ora che hai ospitato un live streaming utilizzando l'API Google Cloud Video Stitcher e lo hai richiesto utilizzando l'SDK IMA DAI per iOS, è importante ripulire le risorse di pubblicazione.

Segui la guida alla pulizia dei live streaming per rimuovere risorse e asset non necessari.