Use o SDK de DAI para IMA no Roku

Veja streams em direto registadas com a API Google Cloud Video Stitcher

Este guia demonstra como usar o SDK para DAI do IMA para Roku para pedir e ver uma transmissão em direto de um evento registado na API Google Cloud Video Stitcher e como inserir uma pausa para anúncios durante a reprodução.

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

Para obter informações sobre a integração com outras plataformas ou sobre a utilização dos SDKs do lado do cliente para IMA, consulte os SDKs para Anúncios Multimédia Interativos.

Se quiser ver ou acompanhar uma integração de exemplo concluída, transfira o exemplo do Editor de vídeo do Google Cloud.

Configure um projeto do Google Cloud

Introduza as seguintes variáveis para utilização no SDK para IMA:

Location
A região do Google Cloud onde a configuração publicada 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 utilizador do Video Stitcher:

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ários pedidos, desde que não tenha expirado.

Código de rede

O código de rede do Ad Manager para pedir anúncios: NETWORK_CODE

ID da configuração de streams em direto
O ID de configuração em direto que especificou quando criou o evento de stream em direto: LIVE_CONFIG_ID
Chave do recurso personalizado
A chave do recurso personalizado do Ad Manager gerada durante o processo de criação de uma configuração para um evento de stream em direto com a API Video Stitcher: CUSTOM_ASSET_KEY

Transfira o exemplo básico

Transfira e execute o IMA Roku DAI Basic Example. Clique no botão de reprodução no leitor de vídeo para iniciar o filme curto "Tears of Steel", que contém pausas para anúncios a cada 30 segundos.

Peça uma stream em direto

Para substituir a stream de exemplo pela sua stream em direto do Cloud Video Stitcher, use a função sdk.createVideoStitcherLiveStreamRequest(). Assim que a sessão de DAI estiver ativa, pode usar a IU do Google Ad Manager para localizar as sessões de DAI geradas para fins de monitorização e depuração.

No exemplo existente, existem declarações condicionais para determinar se deve construir um VOD StreamRequest ou uma stream em direto StreamRequest. Para que funcione com a API Google Cloud Video Stitcher, adicione um novo caminho para criar uma sessão em direto do Cloud Video Stitcher StreamRequest 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 estas alterações, recarregue a app para pedir e ver a sua transmissão em direto personalizada.

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

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

Se fornecer uma opção não reconhecida, a API Cloud Video Stitcher responde com um erro HTTP 400. Consulte o guia de resolução de problemas para obter assistência.

Por exemplo, pode substituir as opções do manifesto com o seguinte fragmento do código, que pede dois manifestos de streams com representações ordenadas da taxa de bits mais baixa para a mais alta.


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

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

' The following session options are examples. Use session options
' that are compatible with your video stream.
sessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

Insira uma pausa para anúncios

A API Google Cloud Video Stitcher insere anúncios obtidos a partir da etiqueta de anúncio para cada pausa para anúncios. As pausas para anúncios são indicadas no manifesto através de marcadores de anúncios. Os marcadores de anúncios são inseridos pelo codificador de stream em direto.

O anúncio é apresentado imediatamente após a inserção da pausa para anúncios.

Limpar

Agora que alojou com êxito uma stream em direto através da API Google Cloud Video Stitcher e a pediu através do SDK para DAI do IMA para Roku, é importante limpar todos os recursos de publicação.

Siga o guia de limpeza de streams em direto para remover recursos e recursos multimédia desnecessários.