Questa guida mostra come riprodurre uno stream live o VOD di pubblicazione di pod DAI utilizzando l'SDK IMA DAI per tvOS con un video player. Per visualizzare o seguire un'integrazione di esempio completata, scarica l'app di esempio di pubblicazione di pod (Obj C o Swift).
Panoramica della pubblicazione di pod IMA DAI
L'implementazione della pubblicazione di pod utilizzando l'SDK IMA DAI per tvOS prevede due componenti principali:
StreamRequest: un oggetto che definisce una richiesta di stream ai server pubblicitari di Google. Deve essere creato utilizzandoIMAPodStreamRequestoIMAPodVODStreamRequestper attivare la pubblicazione pod. Entrambi i metodi richiedono un codice di rete eIMAPodStreamRequestrichiede anche una chiave asset personalizzata. Una chiave API è facoltativa.IMAStreamManager: un oggetto che gestisce la comunicazione tra lo stream video e l'SDK IMA DAI, ad esempio l'attivazione dei ping di monitoraggio e l'inoltro degli eventi di stream al publisher.
Prerequisiti
Prima di iniziare, devi disporre di quanto segue:
- Xcode 13 o versioni successive.
- Metodo per l'installazione dell'SDK IMA:
- Swift Package Manager (opzione preferita)
- Una copia scaricata dell'SDK IMA per tvOS
- Un'app tvOS già configurata con l'SDK IMA DAI per riprodurre stream video con annunci DAI. Se non hai ancora un'app di questo tipo, ti consigliamo di utilizzare tvOS DAI BasicExample come punto di partenza. BasicExample contiene il codebase a cui si fa riferimento in questa guida. Per saperne di più su come implementare l'SDK IMA DAI, consulta la guida rapida.
Configura le variabili di pubblicazione di pod
Apporta tutte le modifiche per la pubblicazione di pod in ViewController.swift in Swift o ViewController.m in Objective-C. Gli snippet di questa guida utilizzano per impostazione predefinita il linguaggio Swift. Il primo passaggio consiste nell'aggiornare le variabili costanti.
Aggiungi le seguenti costanti di richiesta di stream di pod di annunci:
STREAM_URL(Utilizzato solo per i live streaming): l'URL dello stream video fornito dal manipolatore di manifest o dal partner terzo che utilizza la pubblicazione di pod. Dovrebbe richiederti di inserire l'ID stream fornito dall'SDK IMA DAI prima di effettuare una richiesta. In questo caso, l'URL dello stream include un segnaposto,"[[STREAMID]]", che devi sostituire con l'ID stream prima di effettuare una richiesta.NETWORK_CODE: il codice di rete del tuo account Ad Manager 360.CUSTOM_ASSET_KEY(utilizzata solo per i live streaming): la chiave asset personalizzata che identifica l'evento di pubblicazione dei pod in Ad Manager 360. Il tuo manipolatore di manifest o il tuo partner di pubblicazione di pod di terze parti può crearlo.API_KEY(utilizzato solo per i live streaming): una chiave API facoltativa che può essere richiesta per recuperare un ID stream dall'SDK IMA DAI.
Modifica la sezione delle variabili dell'esempio in modo che corrisponda a quanto segue:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Crea una richiesta di stream di pod live o VOD
Pubblicazione di pod di live streaming
Modifica il metodo requestStream per creare una richiesta di stream di pod pubblicitari live creando un'istanza di IMAPodStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Pubblicazione di pod di stream VOD
Modifica il metodo requestStream per creare una richiesta di stream di pod VOD creando un'istanza di IMAPodVODStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Modifica e imposta l'URL dello stream
Pubblicazione di pod di live streaming
Modifica i metodi IMAAdsLoaderDelegate utilizzando streamManager.streamId per ottenere l'ID stream. Poi inserisci l'ID stream in STREAM_URL, sostituendo "[[STREAMID]]". Dopo aver apportato questa modifica, imposta il nuovo URL dello stream utilizzando
videoDisplay.loadStream().
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
Pubblicazione di pod di stream VOD
Modifica i metodi IMAAdsLoaderDelegate utilizzando streamManager.streamId per ottenere l'ID stream. Poi, richiedi un URL stream al tuo partner tecnologico video (VTP) e chiama IMAStreamManager.loadThirdPartyStream() per fare in modo che IMA carichi l'URL stream e gli eventuali sottotitoli restituiti dal tuo TVP.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
Esegui la pulizia degli asset IMA DAI
Dopo aver completato la richiesta e la visualizzazione degli annunci in uno stream di pubblicazione di pod con l'SDK IMA DAI, ti consigliamo di eseguire la pulizia di tutte le risorse al termine della sessione di pubblicazione di pod. Chiama IMAStreamManager.destroy() per interrompere la riproduzione dello stream, interrompere tutto il monitoraggio degli annunci e rilasciare tutti gli asset dello stream caricati.
Per altri esempi di utilizzo dell'SDK tvOS, consulta gli esempi su GitHub.