Enviando SCTE-35 para o servidor Stream

Os marcadores SCTE são usados principalmente para inserir anúncios na saída de vídeo, indicando ao receptor (por exemplo, o servidor Streaming) em que momento inserir os anúncios e com qual duração. Isso permite que sistemas de terceiros selecionem dinamicamente anúncios a partir de um banco de dados. Você pode ler mais sobre o SCTE-35 em geral neste site.

Neste artigo:
Introdução
Exemplos de marcadores SCTE-35
Teste o marcador SCTE-35 localmente
Teste do marcador SCTE-35 no Nimble Streamer
Informações adicionais


Introdução

Recomendamos também nosso artigo geral sobre a SCTE.

Você pode associar o SCTE Marker a 4 objetos diferentes no PLAYDECK:
– Clipes (em qualquer posição)
– Blocos (Início e Fim)
– Sobreposições (Mostrar e Ocultar)
– Botões de ação

Em vez de fornecer um marcador SCTE predefinido, optamos por uma abordagem diferente: você mesmo deve criar seu próprio marcador SCTE. Isso pode exigir um certo tempo de adaptação, mas, no final das contas, é muito mais flexível. A vantagem é que você sempre terá compatibilidade com todos os receptores. Para coletar a duração do clipe e outras “variáveis”, fornecemos certos “placeholders”.

Observe que o SCTE deve estar ativado nas opções do seu Stream:


Exemplos de marcadores SCTE-35

Vamos dar uma olhada em alguns exemplos de SCTE-35. Eles representam a forma mais utilizada de SCTE-35, conhecida como “Splicing”.

Nota: O formato SCTE-35 apresentado aqui funciona melhor com o Nimble Streamer (veja abaixo). Dependendo do seu servidor Stream, o formato pode ser diferente. Consulte seu provedor.

Isso inserirá um anúncio e retornará automaticamente ao seu programa após o tempo definido. A duração será definida automaticamente pelo PLAYDECK para o clipe que estiver sendo reproduzido no momento. Esse valor pode ser substituído por {blockduration} ou por um valor inserido manualmente. Se você escolher um valor manual para a duração, a fórmula é: DURAÇÃO DO CLIPE multiplicada por 90000 e arredondada. A razão por trás disso é que 90000 é a escala de tempo padrão usada pela maioria dos sistemas SCTE. Exemplo: o clipe tem 12,4 segundos, portanto, a duração SCTE seria 1116000.

Em vez de enviar uma duração, você também pode enviar dois marcadores SCTE separados para iniciar e encerrar o anúncio. Eles são chamados de CUE-OUT (saída do programa para o anúncio) e CUE-IN (retorno ao programa).

Como você provavelmente já deve ter observado, a única diferença é que o “outOfNetworkIndicator” assume os valores 1 (CUE-OUT) e 0 (CUE-IN). O próprio sistema SCTE emparelha os dois marcadores com base no “spliceEventId”.

Nota: Os placeholders suportados são: {timestamp} {timestampunix} {airtimenext} {airtimenextunix} {plannednext} {plannednextunix} {clipid} {blockid} {blockduration} {clipduration}


Teste o marcador SCTE-35 localmente

Abra o PLAYDECK. Não é necessário carregar nenhum clipe por enquanto. Clique com o botão direito do mouse em qualquer botão de ação, crie uma nova ação e selecione COMANDOS/SCTE:

Insira a tag de amostra SCTE-35 clicando em SCTE-35. Feche as janelas pop-up clicando em OK (duas vezes):

Agora podemos enviar uma tag SCTE-35 para qualquer Stream compatível (UDP, DVB, SRT). Se você clicar em “Ação” agora, nada acontecerá, pois ainda não temos um Stream.

Vamos criar um teste UDP Stream, no qual simplesmente enviaremos a saída para um arquivo, para que não precisemos nos preocupar com questões relacionadas ao servidor (por enquanto). Copie as configurações conforme indicado a seguir e inicie o Stream clicando em “START NOW”. Não se esqueça de ativar o SCTE-35 com “Parâmetro”:

Queremos enviar nossa etiqueta de amostra SCTE-35 para o Stream agora. Então, feche as Configurações e clique no botão de ação várias vezes; em seguida, volte às Configurações e pare o Stream com a opção “PARAR AGORA”.

Suas tags SCTE-35 foram registradas pelo PLAYDECK. Você pode verificar os registros voltando ao seu código SCTE-35 no botão de ação e clicando em ABRIR REGISTROS DE EVENTOS:

Você também pode tornar visíveis as tags SCTE-35, que estão no seu arquivo Stream gravado. Para isso, precisamos de uma ferramenta separada chamada “DVBInspector”. Essa ferramenta também requer o JAVA Runtime; portanto, baixe os dois:

Esta ferramenta requer o JAVA Runtime. Caso ainda não esteja instalado, você pode baixá-lo aqui:
https://www.oracle.com/java/technologies/downloads/

Agora, descompacte o arquivo “DVBinspector-1.18.0-dist.zip” (ou similar) e execute o “DVBinspector-1.18.0.jar”. Em seguida, arraste e solte seu arquivo TS no aplicativo. Abra a árvore da seguinte maneira para visualizar seu marcador SCTE.


Teste do marcador SCTE-35 no Nimble Streamer

O Nimble Streamer é o nosso serviço Streaming preferido. É econômico, fácil de configurar e manter, mas ainda assim oferece o nível de complexidade necessário para casos de uso avançados:

https://softvelum.com/nimble/

Instale a versão de avaliação de 14 dias do Nimble no mesmo computador em que o PLAYDECK está sendo executado. Isso não é obrigatório, mas simplifica as coisas, já que você não precisa se preocupar com a configuração de rede. O Nimble também solicitará que você crie uma conta no WMSPanel, que é uma ferramenta de configuração baseada na web para o Nimble, já que o Nimble Streamer em si é instalado sem interface de usuário.

INFORMAÇÃO: Para que esta amostra do SCTE-35 funcione, você NÃO precisa ter os plug-ins “Nimble Live Transcoder” ou “Nimble Advertizer”, caso esteja testando em uma instalação ativa. Eles estão desativados por padrão na instalação de avaliação.

Depois de colocar o Nimble em funcionamento, há mais uma configuração que você precisa fazer manualmente. Abra o arquivo de configuração do servidor Nimble aqui:
c:\Arquivos de Programas\Nimble Streamer\conf\nimble.conf

No final deste arquivo, adicione as seguintes linhas e salve o arquivo.

scte35_processing_enabled = true 
scte35_forwarding_enabled = true 
hls_ad_scte35_forwarding_enabled = true
hls_ad_marker_format = cue
hls_ad_splice_out_cont_marker_enabled = true

Importante: Você precisa reiniciar o Nimble agora, seja reiniciando o seu PC ou reiniciando manualmente o serviço do Windows “Nimble Streamer”.

Aqui estão as linhas novamente, mas com comentários para você (não use essas):

scte35_processing_enabled = true  // Ativa o módulo SCTE de maneira geral. Necessário para todas as outras opções
scte35_forwarding_enabled = true  // Permite o encaminhamento dos marcadores SCTE-35 através do Live Transcoder
hls_ad_scte35_forwarding_enabled = true  // Ativa o encaminhamento de marcadores SCTE-35 para fluxos HLS
hls_ad_marker_format = cue  // Configura o Nimble para usar marcadores CUE-OUT e CUE-IN
hls_ad_splice_out_cont_marker_enabled = true  // Ativa a inserção automática de EXT-X-CUE-OUT-CONT

Agora, vamos configurar seu Streams no WMSPanel:
Primeiro, vamos definir nossa entrada Stream. Acesse “Nimble Streamer” no menu, selecione “MPEGTS In” e clique no botão “Add UDP stream”; em seguida, adicione o fluxo de entrada desta forma. Você pode usar qualquer outra porta, caso a 5001 já esteja em uso.

A seguir, vamos configurar o formato do fluxo de saída. Queremos usar o HLS aqui para demonstrar a conversão do marcador SCTE de UDP para HLS. Na mesma página, vá até “MPEGTS Out” e clique no botão “Adicionar fluxo de saída”; em seguida, adicione da seguinte maneira. Certifique-se de selecionar o fluxo de entrada como fonte de vídeo e áudio.

A seguir, continuamos nossa configuração no PLAYDECK. Acesse as configurações de saída do Stream e altere a URL do Stream para “udp://127.0.0.1:5001”.

INFORMAÇÃO: Você pode escolher qualquer codec de vídeo de sua preferência. Neste caso, escolhi o H.264 para que minha GPU NVIDIA faça a codificação, o que reduzirá o uso da CPU. Ative também o SCTE-35 na opção “Parâmetro”.

INFORMAÇÃO: Observe que o PLAYDECK não é capaz de transmitir diretamente em HLS. Se você selecionar “Apple HTTP Live Streaming” como formato de streaming, a saída será gravada em um arquivo. Portanto, você precisa especificar um destino de arquivo como “URL de streaming”, por exemplo, “c:\Users\Public\Documents\stream.m3u8”. Em seguida, use esse arquivo para transmitir usando qualquer servidor HLS. O PLAYDECK não é capaz de gravar tags SCTE HLS no arquivo de manifesto HLS (o arquivo *.3u8).

Em seguida, queremos que o PLAYDECK envie automaticamente o SCTE, não apenas por meio de um botão, mas em função do clipe. Para isso, inserimos qualquer clipe e clicamos no ícone COMANDOS na barra de ferramentas; depois, adicionamos um novo comando, selecionamos PLAY TIME 0 e inserimos o exemplo SCTE-35:

INFORMAÇÃO: Você também pode adicionar marcadores SCTE a blocos, sobreposições e botões de ação.

Agora vamos dar início à transmissão: coloque o clipe em CUE e PLAY e inicie o Stream nas configurações do PLAYDECK. Vá até o WMSPanel e abra, no menu “Nimble Streamer”, a opção “Live Streams”. Agora você verá uma transmissão ao vivo em andamento. Clique nela e selecione o ponto de interrogação na extremidade direita, assim.

Na lista de “URLs para reproduzir”, selecione aquele com a extensão “playlist.m3u8” e clique em “Copiar”. Agora, cole essa URL em qualquer navegador que tenha um reprodutor HLS integrado ou instalado. Para este exemplo, usaremos o navegador Chrome com a seguinte extensão de reprodutor HLS:
https://chromewebstore.google.com/detail/hls-player-m3u8-streaming/eakdijdofmnclopcffkkgmndadhbjgka

Depois de inserir essa URL no Chrome, você verá a transmissão do seu PLAYDECK sendo reproduzida imediatamente. Agora vou mostrar como monitorar seu marcador SCTE. No Chrome, pressione F12 para abrir as Ferramentas do Desenvolvedor. Na parte superior, clique na aba “Rede”. Você verá vários arquivos “chunks.m3u8”, que fazem parte do seu stream. Clique em um dos arquivos “chunk” (também chamados de “HLS Manifest”) e selecione “Visualizar” ao lado dele. Agora você verá a tag SCTE do HLS. Se ela não estiver lá, clique em outro “chunk”, pois enviamos o SCTE apenas no início do clipe.

É isso aí! Alcançamos nossos objetivos de teste. A seguir, mais informações que podem ser relevantes para se aprofundar no assunto.


Informações adicionais

Fazer login no PLAYDECK

Registramos todas as tags SCTE recebidas e enviadas. Isso também lhe dá a oportunidade de testar suas tags SCTE enviadas simplesmente conectando sua saída a uma entrada (tanto SDI quanto Streams) e deixando que o PLAYDECK detecte suas tags SCTE. Você pode abrir os arquivos de log pelo menu principal “Logs”:


Registro no Nimble Streamer

Se algo der errado ou não ocorrer como esperado, um bom ponto de partida é verificar os arquivos de log do Nimble. O log pode ser encontrado aqui no Windows:
c:\Arquivos de Programas\Nimble Streamer\log

O registro em log está habilitado por padrão na versão de avaliação do Nimble, mas caso você precise ativá-lo, aqui estão as opções para o arquivo “nimble.conf”.

log_access = arquivo
logging = depuração

Agora abra o arquivo de log e procure por “SCTE”. Você poderá ver algo como isto, o que indica que há um erro de digitação no seu marcador SCTE no PLAYDECK:

[SCTE35] Tipo de comando de emenda não suportado (type=6) para [mynewapp/mynewstream]

Se o seu SCTE Marker for analisado com sucesso no Nimble, ele terá a seguinte aparência:

[SCTE35] splice_insert: event_id=4157 oon=1 immediate=1 pts_adjustment=0 pts=0 actual_pts=202593600 duration=2707200 data=0xfc....



Ferramenta: TSDuck

Esta é uma coleção de ferramentas e plug-ins com uma ampla biblioteca para manipular fluxos de transporte MPEG. Com ela, você poderá inserir marcadores SCTE fora do PLAYDECK com base em um algoritmo ou em outra lógica complexa.

https://tsduck.io/


Ferramenta: x9k3

Essa ferramenta também pode converter marcadores SCTE-35 em arquivos UDP Streams ou MPEG-TS em tags SCTE do HLS. Isso permite que você instale um servidor de streaming que não possua conversão automática de SCTE-35 para HLS.

https://github.com/futzu/x9k3