Este guia descreve os marcadores de anúncios suportados pela API Video Stitcher. A API Video Stitcher identifica os limites das pausas para anúncios através de marcadores de anúncios no manifesto HLS/DASH de origem de uma stream em direto e realiza a união de anúncios numa pausa para anúncios para cada sessão da stream em direto.
Antes de começar
Certifique-se de que conhece os conceitos introdutórios e a terminologia da API Video Stitcher. Para mais informações, consulte a vista geral técnica.
Consulte a especificação SCTE-35 Digital Program Insertion Cueing Message For Cable.
Comandos SCTE-35
Os marcadores de anúncios de streams em direto são representados por sinais SCTE-35 padrão. Na lista de comandos SCTE-35, a API Video Stitcher suporta os seguintes dois comandos:
splice_insert
time_signal
Com o time_signal
, pode fornecer metadados arbitrários adicionais para a pausa publicitária associada no primeiro identificador de programa exclusivo (UPID) de segmentação.
A API Video Stitcher espera que o valor de segmentation_upid_type
seja 0x0C
, que significa MPU()
. O private_data
no MPU()
deve ser uma string JSON codificada em base64, na qual determinadas chaves JSON estão reservadas para os seguintes fins específicos:
%%AD_TAG_ID%%
: especifica a etiqueta de anúncio a usar para a pausa para anúncios. O ID da etiqueta de anúncio deve ser uma das chaves noadTagMacros
da sessão em direto.%%SLATE_ID%%
: especifica a faixa a usar para a pausa para anúncios. O ID da ardósia tem de corresponder ao ID de uma ardósia que já tenha sido criada no mesmo Google Cloud projeto.
Todos os outros pares de chave-valor na carga útil do UPID são usados para a substituição de macros de etiquetas de anúncios.
Por exemplo, se um URI de etiqueta do anúncio for https://example.com?key=[foo]
e o private_data
for eyJmb28iOiJiYXIifQ==
, que é a representação base64 de {"foo":"bar"}
, a API Video Stitcher substitui [foo]
por bar
e faz um pedido de etiqueta do anúncio para https://example.com?key=bar
.
Integração do Google Ad Manager
Para o fluxo de trabalho de integração do Google Ad Manager, as mensagens SCTE35 podem conter determinados valores que podem ser substituídos na etiqueta do anúncio. Consulte a lista de macros suportadas.
Certifique-se de que o adTagUri
registado na configuração em direto
contém as macros escolhidas.
Por exemplo, se a mensagem SCTE35 transmitir um valor para
%%SPLICE_INSERT_EVENT_ID%%
, certifique-se de que a macro existe no adTagUri
, conforme
ilustrado no exemplo seguinte:
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Quando a API Video Stitcher pede os metadados dos anúncios e a mensagem splice_insert
SCTE35 tem splice_insert_event_id
definido como 123
, usa a seguinte etiqueta de anúncio:
AD_TAG_URI¯o=123
Marcadores de anúncios HLS
EXT-X-DATERANGE
A utilização de #EXT-X-DATERANGE
é especificada na
especificação HTTP Live Streaming:
- Uma etiqueta
#EXT-X-DATERANGE
com o atributoSCTE35-OUT
indica o ponto de divisão de início imediato de uma pausa para anúncios. - Uma etiqueta
#EXT-X-DATERANGE
com o atributoSCTE35-IN
indica o ponto de edição imediato de uma pausa para anúncios. - Espera-se que os valores de
SCTE35-OUT
eSCTE35-IN
sejam codificados em hexadecimal.
Exemplo:
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
A etiqueta #EXT-X-DATERANGE
aplica-se apenas ao segmento seguinte na playlist de variantes, mesmo quando a etiqueta START-DATE
não corresponde à data/hora do segmento.
EXT-X-CUE-OUT e EXT-X-CUE-IN
Uma etiqueta #EXT-X-CUE-OUT
indica o início imediato de uma pausa para anúncios e
uma etiqueta #EXT-X-CUE-IN
indica o fim imediato de uma pausa para anúncios.
Pode usar uma etiqueta #EXT-OATCLS-SCTE35
para a mensagem SCTE-35, e espera-se que o valor seja codificado em base64.
Exemplo (sem mensagem SCTE-35):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
Exemplo (com mensagem SCTE-35):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
Se a duração de uma etiqueta EXT-X-CUE-OUT
for especificada, esse valor tem precedência, mesmo que a duração da pausa para anúncios na mensagem SCTE-35 esteja em conflito com ele. Se a duração da etiqueta EXT-X-CUE-OUT
não for especificada e for especificada na mensagem SCTE-35 associada, é usado o valor da mensagem SCTE-35.
Marcadores de anúncios DASH
Atualmente, a API Video Stitcher só suporta manifestos DASH de vários períodos. Num manifesto DASH de vários períodos, uma pausa para anúncios deve ser representada por um elemento Period
com uma stream de eventos que contenha um marcador de cue-out. Não é necessário um marcador cue-in, uma vez que o fim do período de pausa para anúncios indica o fim da pausa para anúncios.
Se forem apresentados vários eventos cue-out no fluxo de eventos SCTE-35 de um período de pausa para anúncios, a API Video Stitcher só usa o primeiro. A hora de apresentação do evento de indicação de fim é ignorada, uma vez que a hora de início da pausa é igual à hora de início do período.
Segue-se uma lista dos schemeIdUri
suportados para uma stream de eventos SCTE-35:
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
Uma stream de eventos cujo schemeIdUri
está definido como urn:scte:scte35:2014:xml+bin
contém eventos que representam mensagens SCTE-35 em binário codificado em base64.
Exemplo:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
Uma stream de eventos cujo schemeIdUri
está definido como urn:scte:scte35:2013:xml
contém eventos que representam mensagens SCTE-35 em XML não codificado.
Exemplo:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
Notificação de pausa para anúncios antecipada para streams em direto
Para a união em direto, as etiquetas de anúncios são processadas de forma síncrona quando a API Video Stitcher recebe o marcador de anúncio cue-out no manifesto de uma stream em direto. Este processamento síncrono aciona um grande número de pedidos de etiquetas de anúncios e provoca longos atrasos nos pedidos de reprodução da sessão em direto se a stream tiver muitos anúncios.
A notificação de pausa para anúncios antecipada (EABN) dá à API Video Stitcher mais tempo para preparar anúncios através da notificação da API sobre uma futura pausa para anúncios.
Notificação de pausa para anúncios antecipada HLS
Para notificar a API de uma próxima pausa para anúncios, para que a API possa preparar os anúncios antecipadamente, a playlist HLS de uma stream em direto tem de:
- Use
#EXT-X-DATERANGE
ouEXT-X-CUE-OUT
como marcador de anúncio - Repita um marcador de anúncio de sinalização no manifesto de origem da stream em direto
#EXT-X-DATERANGE
Quando o codificador de origem agenda uma pausa para anúncios futura, pode inserir um marcador de sinalização de saída #EXT-X-DATERANGE
no manifesto de origem. O atributo X-TYPE
do marcador indica o tipo de marcador de anúncio. Para a notificação de intervalo de anúncios antecipado, espera-se que o valor de X-TYPE
seja EABN
. O atributo START-TIME
do marcador indica a hora de início real ou planeada da pausa para anúncios.
O atributo DURATION
do marcador é obrigatório para indicar a duração da pausa
publicitária. Este marcador é denominado EABN cue-out.
No início real da pausa para anúncios, o codificador de origem tem de inserir um marcador de
#EXT-X-DATERANGE
cue-out no manifesto de origem. O atributo ID
do marcador tem de ser igual ao cue-out EABN correspondente. O valor de START-TIME
do marcador tem de ser igual ao tempo de multimédia do segmento no qual este marcador é inserido. Este marcador chama-se sinal de saída imediato.
O manifesto de exemplo seguinte contém um cue-out EABN, um cue-out imediato e um cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
- Use
#EXT-X-CUE-OUT
como marcador de anúncio - Repita um marcador de anúncio de sinalização no manifesto de origem da stream em direto
Quando o codificador de origem agenda uma próxima pausa para anúncios, também pode inserir um
#EXT-X-CUE-OUT
marcador de indicação de fim no manifesto de origem. O atributo X-TYPE
do marcador indica o tipo de marcador de anúncio. Para a notificação de intervalo de anúncios antecipado, espera-se que o valor de X-TYPE
seja EABN
. O atributo DURATION
do marcador tem de indicar a duração da pausa de anúncios.
Este marcador é denominado EABN cue-out.
No início real da pausa para anúncios, o codificador de origem tem de inserir um marcador de
#EXT-X-CUE-OUT
cue-out no manifesto de origem. O atributo ID
do marcador tem de ser igual ao cue-out EABN correspondente. Este marcador
denomina-se sinal de saída imediato.
O manifesto de exemplo seguinte contém um cue-out EABN, um cue-out imediato e um cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
Notificação de pausa para anúncios antecipada DASH
Para notificar a API de uma pausa para anúncios futura, para que a API possa preparar os anúncios antecipadamente, um manifesto de stream em direto DASH tem de repetir o evento de marcador de anúncio no elemento Main Period
e no elemento Ad Break Period
.
A primeira ocorrência em Main Period
notifica a API de uma pausa para anúncios
futura e a segunda ocorrência em Ad Break Period
indica o
início imediato da pausa para anúncios.
Segue-se um exemplo de manifesto:
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
O que se segue?
Saiba como concluir tarefas específicas da API Video Stitcher.