Usar o SDK de DAI do IMA no Roku

Reproduza transmissões ao vivo registradas com a API Google Cloud Video Stitcher

Este guia demonstra como usar o SDK de DAI do IMA para o Roku com o objetivo de solicitar e reproduzir uma transmissão ao vivo de um evento registrado na API Google Cloud Video Stitcher e como inserir um intervalo de anúncio durante a reprodução.

Este guia expande o exemplo básico do Guia de iniciação para a DAI do IMA.

Para informações sobre como integrar com outras plataformas ou usar os SDKs do lado do cliente do IMA, consulte SDKs do Interactive Media Ads (link em inglês).

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 ativa 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

O token OAuth de curta duração de uma conta de serviço com o papel de usuário de editor de vídeo:

OAUTH_TOKEN

Leia mais sobre como criar credenciais de curta duração para contas de serviço. 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 em tempo real
O ID de configuração ao vivo que você especificou ao criar seu evento de transmissão ao vivo: LIVE_CONFIG_ID
Chave de recurso personalizada
A chave de recurso personalizada do Ad Manager gerada durante o processo de criação de uma configuração para um evento de transmissão ao vivo com a API Video Stitcher: CUSTOM_ASSET_KEY

Faça o download do exemplo básico

Faça o download e execute o Exemplo básico de DAI para Roku do IMA. Clique no botão de reprodução no player de vídeo para iniciar o curta-metragem "Tears of Steel", que contém intervalos de anúncio a cada 30 segundos.

Solicitar uma transmissão ao vivo

Para substituir o stream de amostra pela transmissão ao vivo do integrador de vídeos do Cloud, use a função sdk.createVideoStitcherLiveStreamRequest(). Quando a sessão da DAI estiver ativa, será possível usar a interface do Google Ad Manager para localizar as sessões da DAI geradas e fazer o monitoramento e a depuração.

Na amostra existente, há instruções condicionais para determinar se é preciso criar um StreamRequest de VOD ou um StreamRequest ativo. Para que ela funcione com a API Video Stitcher do Google Cloud, adicione um novo caminho para criar um StreamRequest publicado do Cloud Video Stitcher usando os valores gerados anteriormente.

Exemplo

basic_example/components/MainScene.xml

<?xml version="1.0" encoding="utf-8" ?>
<component name="MainScene" extends="Scene" initialFocus = "myVideo">
<script type="text/brightscript">
<![CDATA[
  function init()
    m.video = m.top.findNode("myVideo")
    m.video.notificationinterval = 1
    m.testLiveStream = {
      title: "Livestream",
      assetKey: "c-rArva4ShKVIAkNfy6HUQ",
      apiKey: "",
      type: "live"
    }
    m.testVodStream = {
      title: "VOD stream"
      contentSourceId: "2548831",
      videoId: "tears-of-steel",
      apiKey: "",
      type: "vod"
    }
    m.testVideoStitcherLiveStream = {
      title: "Video Stitcher Livestream",
      customAssetKey: "CUSTOM_ASSET_KEY",
      networkCode: "NETWORK_CODE",
      liveConfigId: "LIVE_CONFIG_ID",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      apiKey: "",
      type: "stitcherLive"
    }
    loadImaSdk()
  end function

  function loadImaSdk() as void
    m.sdkTask = createObject("roSGNode", "imasdk")
    m.sdkTask.observeField("sdkLoaded", "onSdkLoaded")
    m.sdkTask.observeField("errors", "onSdkLoadedError")

    ' Set this to the stream data you would like to play.
    selectedStream = m.testVideoStitcherLiveStream
    m.videoTitle = selectedStream.title
    m.sdkTask.streamData = selectedStream

    m.sdkTask.observeField("urlData", "urlLoadRequested")
    m.sdkTask.video = m.video
    ' Setting control to run starts the task thread.
    m.sdkTask.control = "RUN"
  end function

basic_example/components/Sdk.xml

  Sub loadStream()
    sdk = m.sdk
    sdk.initSdk()
    setupVideoPlayer()

    request = {}
    streamData = m.top.streamData
    if streamData.type = "live"
      request = sdk.CreateLiveStreamRequest(streamData.assetKey, streamData.apiKey)
    else if streamData.type = "vod"
      request = sdk.CreateVodStreamRequest(streamData.contentSourceId, streamData.videoId, streamData.apiKey)
    else if streamData.type = "stitcherLive"
      request = sdk.CreateVideoStitcherLiveStreamRequest(
        streamData.customAssetKey,
        streamData.networkCode,
        streamData.liveConfigId,
        streamData.region,
        streamData.projectNumber,
        streamData.oAuthToken
      )
    else
      request = sdk.CreateStreamRequest()
    end if

    request.player = m.player
    request.adUiNode = m.top.video

    requestResult = sdk.requestStream(request)
    If requestResult <> Invalid
      print "Error requesting stream ";requestResult
    Else
      m.streamManager = Invalid
      While m.streamManager = Invalid
        sleep(50)
        m.streamManager = sdk.getStreamManager()
      End While
      If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error"
        errors = CreateObject("roArray", 1, True)
        print "error ";m.streamManager["info"]
        errors.push(m.streamManager["info"])
        m.top.errors = errors
      Else
        m.top.streamManagerReady = True
        addCallbacks()
        m.streamManager.start()
      End If
    End If
  End Sub

Depois de adicionar essas mudanças, atualize o app para solicitar e reproduzir a transmissão ao vivo personalizada.

(Opcional) Adicionar opções de sessão de streaming

Personalize sua solicitação de stream adicionando opções de sessão para substituir a configuração padrão da API Cloud Video Stitcher preenchendo o parâmetro videoStitcherSessionOptions no seu objeto StreamRequest.

Se você fornecer uma opção não reconhecida, a API Cloud Video Stitcher responderá com um erro HTTP 400. Consulte o guia de solução de problemas para receber ajuda.

Por exemplo, você pode substituir as opções de manifesto com o snippet de código a seguir, que solicita dois manifestos de stream com renderizações ordenadas da menor taxa de bits para a maior.


request = sdk.CreateVideoStitcherLiveStreamRequest(customAssetKey, networkCode, liveConfigId, region, projectNumber, oAuthToken)

request.player = m.player
request.adUiNode = m.top.video

sessionOptions = {
  "manifestOptions": {
    "includeRenditions":[
      {"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
      {"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
    ]
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

Inserir um intervalo de anúncio

A API Google Cloud Video Stitcher insere anúncios recuperados da tag de anúncio para cada intervalo de anúncio. Os intervalos de anúncio são indicados no manifesto usando marcadores de anúncio. Os marcadores de anúncio são inseridos pelo codificador de transmissão ao vivo.

O anúncio é reproduzido imediatamente após o intervalo de anúncio ser inserido.

Limpar

Agora que você hospedou uma transmissão ao vivo usando a API Google Cloud Video Stitcher e a solicitou usando o SDK de DAI do IMA para Roku, é importante limpar todos os recursos de veiculação.

Siga o guia de limpeza da transmissão ao vivo para remover todos os recursos desnecessários.