Reproduza streams de VOD registrados com a API Google Cloud Video Stitcher.
Este guia demonstra como usar o SDK de DAI do IMA para iOS para solicitar e reproduzir Stream de VOD do Google Cloud sessão.
Este guia expande o exemplo básico do Guia de início de uso da DAI do IMA.
Para informações sobre a integração com outras plataformas ou o uso do SDK SDKs do lado do cliente, consulte SDKs do Interactive Media Ads.
Configure um projeto do Google Cloud
Insira as seguintes variáveis para uso no SDK do IMA:
- Local
- A região do Google Cloud
em que a configuração de VOD foi criada:
LOCATION
- Número do projeto
- O número do projeto do Google Cloud que usa a API Video Stitcher:
PROJECT_NUMBER
- Token OAuth
Um token OAuth de curta duração de uma conta de serviço com a função de usuário do Video Stitcher:
OAUTH_TOKEN
Leia mais sobre criação de OAuth de curta duração tokens. O token OAuth pode ser reutilizado em várias solicitações, desde que não tenha expirado.
- Código da rede
O código de rede do Ad Manager para solicitar anúncios:
NETWORK_CODE
- ID de configuração do VOD
O ID de configuração de VOD para o stream de VOD:
VOD_CONFIG_ID
Leia mais sobre como criar o ID de configuração de VOD no artigo sobre agrupamento do Cloud para criar um guia de configuração de VOD.
- Contexto do usuário
- O contexto do usuário para rastrear solicitações. Pode ser
nil
. O padrão énil
neste guia.
Configurar o exemplo básico
Acesse a página de lançamento do DAI do IMA para iOS no
GitHub e faça o download do
exemplo básico do Objective-C. Este exemplo é um projeto Xcode do iOS que depende do
o Cocoapods para carregar o SDK de DAI do IMA. Se você usa Swift, o IMA não tem
aplicativo de exemplo para iOS, mas confira o snippet de código Swift posteriormente neste guia para saber como
para implementar um IMAVideoStitcherVODStreamRequest
no seu app.
Para preparar a execução do exemplo, verifique se o CocoaPods está instalado, abra a pasta do exemplo básico no terminal e execute o seguinte comando:
pod install --repo-update
Quando o comando for concluído, você vai encontrar um arquivo chamado BasicExample.xcworkspace na pasta do projeto. Abra esse arquivo no Xcode e execute o exemplo para garantir que o vídeo de teste e os anúncios sejam reproduzidos como esperado.
Solicitar um stream de VOD
Para substituir o stream de amostra pelo stream de VOD integrado ao seu anúncio, use
IMAVideoStitcherVODStreamRequest
para criar uma sessão com o Google Ad Manager. Você pode usar a interface do Google Ad Manager para localizar as sessões de DAI geradas para monitoramento e depuração.
Na amostra existente, há exemplos para solicitar um stream de VOD ou um
transmissão ao vivo de servidores de DAI do Google. Para que ele funcione com o Google Cloud
API Video Stitcher, é necessário substituir a função requestStream
atual
com um que usa a classe IMAVideoStitcherVODStreamRequest
.
Veja um exemplo:
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 (em inglês)
...
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)
}
...
Execute o projeto e solicite e reproduza a transmissão VOD personalizada.
(Opcional) Adicionar opções de sessão de streaming
Personalize sua solicitação de transmissão adicionando opções de sessão para substituir a configuração padrão
da API Cloud Video Stitcher preenchendo o parâmetro
videoStitcherSessionOptions
na IMAVideoStitcherVODStreamRequest.
Se você fornecer uma opção não reconhecida, o Cloud
A API Video Stitcher responderá com um erro HTTP 400. Consulte o
guia de solução de problemas
para receber ajuda.
Por exemplo, é possível substituir as opções de manifesto com o snippet de código abaixo, que solicita dois manifestos de transmissão com renditions ordenadas do bitrate mais baixo para o mais alto.
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:kRegion
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.region
projectNumber:ViewController.projectNumber
OAuthToken:ViewController.oAuthToken
networkCode:ViewController.networkCode
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:sessionOptions)
adsLoader?.requestStream(with: streamRequest)
Limpar
Agora que você hospedou um fluxo de VOD usando a API Google Cloud Video Stitcher e o SDK do IMA DAI para iOS, é importante limpar todos os recursos de veiculação.
Siga o guia de limpeza de VOD para remover recursos e recursos desnecessários.