Este guia demonstra como reproduzir uma transmissão ao vivo ou de VOD da veiculação de conjunto da DAI usando o SDK do IMA DAI para tvOS com um player de vídeo. Para conferir ou seguir um exemplo de integração concluída, baixe o app de exemplo de veiculação de conjuntos (Obj C ou Swift).
Visão geral da veiculação de conjunto DAI do IMA
A implementação da veiculação de pod usando o SDK do DAI do IMA para tvOS envolve dois componentes principais:
StreamRequest: um objeto que define uma solicitação de stream para os servidores de publicidade do Google. Precisa ser criado usandoIMAPodStreamRequestouIMAPodVODStreamRequestpara ativar a veiculação de pod. Os dois métodos exigem um código de rede, e oIMAPodStreamRequesttambém precisa de uma chave de recurso personalizada. Uma chave de API é opcional.IMAStreamManager: um objeto que processa a comunicação entre o stream de vídeo e o SDK de DAI do IMA, como disparar pings de rastreamento e encaminhar eventos de stream para o publisher.
Pré-requisitos
Antes de começar, os seguintes itens são necessários:
- Xcode 13 ou mais recente.
- Método para instalar o SDK do IMA:
- Gerenciador de pacotes do Swift (preferencial)
- Uma cópia para download do SDK do IMA para tvOS
- Um app para tvOS já configurado com o SDK de DAI do IMA para reproduzir streams de vídeo com anúncios de DAI. Se você ainda não tiver um app desse tipo, recomendamos usar o BasicExample de DAI para tvOS como ponto de partida. O BasicExample tem a base de código mencionada neste guia. Para mais informações sobre como implementar o SDK de DAI do IMA, consulte o Guia de início rápido.
Configurar as variáveis da veiculação de conjunto
Faça todas as mudanças para a veiculação de pods em ViewController.swift no
Swift ou ViewController.m no Objective-C. Os snippets neste guia
usam a linguagem Swift por padrão. A primeira etapa é atualizar as
variáveis constantes.
Adicione as seguintes constantes de solicitação de stream de pod de anúncios:
STREAM_URL(usado apenas para transmissões ao vivo): o URL do stream de vídeo fornecido pelo manipulador de manifesto ou parceiro terceirizado que usa a veiculação de conjunto. Ele deve exigir que você insira o ID do stream fornecido pelo SDK de DAI do IMA antes de fazer uma solicitação. Nesse caso, o URL do stream inclui um marcador de posição,"[[STREAMID]]", que você substitui pelo ID do stream antes de fazer uma solicitação.NETWORK_CODE: o código de rede da sua conta do Ad Manager 360.CUSTOM_ASSET_KEY(usado apenas para transmissões ao vivo): a chave de recurso personalizada que identifica seu evento de veiculação de pod no Ad Manager 360. Seu manipulador de manifesto ou parceiro de veiculação de conjunto de anúncios de terceiros pode criar isso.API_KEY(usado apenas para transmissões ao vivo): uma chave de API opcional que pode ser necessária para recuperar um ID de stream do SDK de DAI do IMA.
Altere a seção de variáveis do exemplo para que corresponda ao seguinte:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Criar uma solicitação de stream de conjunto de anúncios ao vivo ou VOD
Disponibilização de pods de transmissão ao vivo
Modifique o método requestStream para criar uma solicitação de transmissão de pod ao vivo
instanciando 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)
}
...
Veiculação de conjunto de stream de VOD
Modifique o método requestStream para criar uma solicitação de stream de conjunto de VOD
instanciando 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)
}
...
Editar e definir o URL do stream
Disponibilização de pods de transmissão ao vivo
Modifique os métodos IMAAdsLoaderDelegate usando streamManager.streamId para
receber o ID do stream. Em seguida, insira o ID do stream no STREAM_URL, substituindo
"[[STREAMID]]". Depois de fazer essa alteração, defina o novo URL do stream usando
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
}
...
Veiculação de conjunto de stream de VOD
Modifique os métodos IMAAdsLoaderDelegate usando streamManager.streamId para
receber o ID do stream. Em seguida, solicite um URL de stream do seu parceiro de tecnologia de vídeo (VTP, na sigla em inglês) e chame IMAStreamManager.loadThirdPartyStream() para que o IMA carregue o URL de stream e as legendas retornadas pelo seu 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
}
Limpar recursos de DAI do IMA
Quando você terminar de solicitar e mostrar anúncios de display em um stream de veiculação de pod com o SDK da DAI do IMA, sugerimos que limpe todos os recursos após o término da sessão de veiculação de pod. Chame IMAStreamManager.destroy() para interromper a reprodução do stream, parar todo o rastreamento de anúncios e liberar todos os recursos de stream carregados.
Para ver outros exemplos do SDK do tvOS sendo usado, consulte exemplos no GitHub.